agents-sdk

作者: Cloudflare

在 Cloudflare Workers 上使用 Agents SDK 建置 AI 代理。建立有狀態代理、持久化工作流程、即時 WebSocket 應用程式、排程任務、MCP 伺服器或聊天應用程式時載入。涵蓋 Agent 類別、狀態管理、可呼叫 RPC、Workflows 整合及 React hooks。

npx skills add https://github.com/cloudflare/skills --skill agents-sdk

Cloudflare Agents SDK

Your knowledge of the Agents SDK may be outdated. Prefer retrieval over pre-training for any Agents SDK task.

Retrieval Sources

Cloudflare docs: https://developers.cloudflare.com/agents/

TopicDocs URLUse for
Getting startedQuick startFirst agent, project setup
Adding to existing projectAdd to existing projectInstall into existing Workers app
ConfigurationConfigurationwrangler.jsonc, bindings, assets, deployment
Agent classAgents APIAgent lifecycle, patterns, pitfalls
StateStore and sync statesetState, validateStateChange, persistence
RoutingRoutingURL patterns, routeAgentRequest
Callable methodsCallable methods@callable, RPC, streaming, timeouts
SchedulingSchedule tasksschedule(), scheduleEvery(), cron
WorkflowsRun workflowsAgentWorkflow, durable multi-step tasks
HTTP/WebSocketsWebSocketsLifecycle hooks, hibernation
Chat agentsChat agentsAIChatAgent, streaming, tools, persistence
Client SDKClient SDKuseAgent, useAgentChat, React hooks
Client toolsClient toolsClient-side tools, autoContinueAfterToolResult
Server-driven messagesTrigger patternssaveMessages, waitUntilStable, server-initiated turns
Resumable streamingResumable streamingStream recovery on disconnect
EmailEmailEmail routing, secure reply resolver
MCP clientMCP clientConnecting to MCP servers
MCP serverMCP serverBuilding MCP servers with McpAgent
MCP transportsMCP transportsStreamable HTTP, SSE, RPC transport options
Securing MCP serversSecuring MCPOAuth, proxy MCP, hardening
Human-in-the-loopHuman-in-the-loopApproval flows, needsApproval, workflows
Durable executionDurable executionrunFiber(), stash(), surviving DO eviction
QueueQueueBuilt-in FIFO queue, queue()
RetriesRetriesthis.retry(), backoff/jitter
ObservabilityObservabilityDiagnostics-channel events
Push notificationsPush notificationsWeb Push + VAPID from agents
WebhooksWebhooksReceiving external webhooks
Cross-domain authCross-domain authWebSocket auth, tokens, CORS
Readonly connectionsReadonlyshouldConnectionBeReadonly
VoiceVoiceExperimental STT/TTS, withVoice
Browse the webBrowser toolsExperimental CDP browser automation
ThinkThinkExperimental higher-level chat agent class
MigrationsAI SDK v5, AI SDK v6Upgrading @cloudflare/ai-chat

Capabilities

The Agents SDK provides:

  • Persistent state — SQLite-backed, auto-synced to clients via setState
  • Callable RPC@callable() methods invoked over WebSocket
  • Scheduling — One-time, recurring (scheduleEvery), and cron tasks
  • Workflows — Durable multi-step background processing via AgentWorkflow
  • Durable executionrunFiber() / stash() for work that survives DO eviction
  • Queue — Built-in FIFO queue with retries via queue()
  • Retriesthis.retry() with exponential backoff and jitter
  • MCP integration — Connect to MCP servers or build your own with McpAgent
  • Email handling — Receive and reply to emails with secure routing
  • Streaming chatAIChatAgent with resumable streams, message persistence, tools
  • Server-driven messagessaveMessages, waitUntilStable for proactive agent turns
  • React hooksuseAgent, useAgentChat for client apps
  • Observabilitydiagnostics_channel events for state, RPC, schedule, lifecycle
  • Push notifications — Web Push + VAPID delivery from agents
  • Webhooks — Receive and verify external webhooks
  • Voice (experimental) — STT/TTS via @cloudflare/voice
  • Browser tools (experimental) — CDP-powered browsing via agents/browser
  • Think (experimental) — Higher-level chat agent via @cloudflare/think

FIRST: Verify Installation

npm ls agents  # Should show agents package

If not installed:

npm install agents

For chat agents:

npm install agents @cloudflare/ai-chat ai @ai-sdk/react

Wrangler Configuration

{
  "compatibility_flags": ["nodejs_compat"],
  "durable_objects": {
    "bindings": [{ "name": "MyAgent", "class_name": "MyAgent" }]
  },
  "migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyAgent"] }]
}

Gotchas:

  • Do NOT enable experimentalDecorators in tsconfig (breaks @callable)
  • Never edit old migrations — always add new tags
  • Each agent class needs its own DO binding + migration entry
  • Add "ai": { "binding": "AI" } for Workers AI

Agent Class

import { Agent, routeAgentRequest, callable } from "agents";

type State = { count: number };

export class Counter extends Agent<Env, State> {
  initialState = { count: 0 };

  validateStateChange(nextState: State, source: Connection | "server") {
    if (nextState.count < 0) throw new Error("Count cannot be negative");
  }

  onStateUpdate(state: State, source: Connection | "server") {
    console.log("State updated:", state);
  }

  @callable()
  increment() {
    this.setState({ count: this.state.count + 1 });
    return this.state.count;
  }
}

export default {
  fetch: (req, env) => routeAgentRequest(req, env) ?? new Response("Not found", { status: 404 })
};

Routing

Requests route to /agents/{agent-name}/{instance-name}:

ClassURL
Counter/agents/counter/user-123
ChatRoom/agents/chat-room/lobby

Client: useAgent({ agent: "Counter", name: "user-123" })

Custom routing: use getAgentByName(env.MyAgent, "instance-id") then agent.fetch(request).

Core APIs

TaskAPI
Read statethis.state.count
Write statethis.setState({ count: 1 })
SQL querythis.sql`SELECT * FROM users WHERE id = ${id}`
Schedule (delay)await this.schedule(60, "task", payload)
Schedule (cron)await this.schedule("0 * * * *", "task", payload)
Schedule (interval)await this.scheduleEvery(30, "poll")
RPC method@callable() myMethod() { ... }
Streaming RPC@callable({ streaming: true }) stream(res) { ... }
Start workflowawait this.runWorkflow("ProcessingWorkflow", params)
Durable fiberawait this.runFiber("name", async (ctx) => { ... })
Enqueue workthis.queue("handler", payload)
Retry with backoffawait this.retry(fn, { maxAttempts: 5 })
Broadcast to clientsthis.broadcast(message)
Get connectionsthis.getConnections(tag?)

React Client

import { useAgent } from "agents/react";

function App() {
  const [state, setLocalState] = useState({ count: 0 });

  const agent = useAgent({
    agent: "Counter",
    name: "my-instance",
    onStateUpdate: (newState) => setLocalState(newState),
    onIdentity: (name, agentType) => console.log(`Connected to ${name}`)
  });

  return (
    <button onClick={() => agent.setState({ count: state.count + 1 })}>
      Count: {state.count}
    </button>
  );
}

References

Core

Chat & Streaming

Background Processing

Integrations

Experimental

來自 Cloudflare 的更多技能

building-ai-agent-on-cloudflare
Cloudflare
在 Cloudflare 上使用 Agents SDK 建置 AI 代理,具備狀態管理、即時 WebSocket、排程任務、工具整合及聊天功能。產生可部署至 Workers 的正式環境代理程式碼。 適用時機:使用者想「建置代理」、「AI 代理」、「聊天代理」、「有狀態代理」,提及「Agents SDK」,需要「即時 AI」、「WebSocket AI」,或詢問代理的「狀態管理」、「排程任務」或「工具呼叫」。
developmentofficial
building-mcp-server-on-cloudflare
Cloudflare
在 Cloudflare Workers 上建置遠端 MCP(模型上下文協定)伺服器,包含工具、OAuth 驗證與正式環境部署。可產生伺服器程式碼、設定驗證提供者,並部署至 Workers。 使用時機:使用者提及「建置 MCP 伺服器」、「建立 MCP 工具」、「遠端 MCP」、「部署 MCP」、為 MCP 加入「OAuth」,或提到 Cloudflare 上的模型上下文協定。亦會觸發於「MCP 驗證」或「MCP 部署」。
developmentofficial
cloudflare
Cloudflare
涵蓋 Cloudflare 平台的完整技能,包括 Workers、Pages、儲存(KV、D1、R2)、AI(Workers AI、Vectorize、Agents SDK)、網路(Tunnel、Spectrum)、安全(WAF、DDoS)以及基礎設施即程式碼(Terraform、Pulumi)。適用於任何 Cloudflare 開發任務。
official
durable-objects
Cloudflare
建立與審查 Cloudflare Durable Objects。適用於建構有狀態的協調機制(聊天室、多人遊戲、預訂系統)、實作 RPC 方法、SQLite 儲存、警報、WebSocket,或審查 DO 程式碼以符合最佳實務。涵蓋 Workers 整合、wrangler 設定,以及使用 Vitest 進行測試。
official
sandbox-sdk
Cloudflare
為安全程式碼執行建置沙盒應用程式。在建立AI程式碼執行、程式碼直譯器、CI/CD系統、互動式開發環境或執行不受信任的程式碼時載入。涵蓋Sandbox SDK生命週期、指令、檔案、程式碼直譯器及預覽URL。
official
web-perf
Cloudflare
使用 Chrome DevTools MCP 分析網頁效能。測量核心網頁指標(FCP、LCP、TBT、CLS、速度指數),識別渲染阻塞資源、網路依賴鏈、版面位移、快取問題及無障礙缺口。當被要求稽核、剖析、除錯或優化頁面載入效能、Lighthouse 分數或網站速度時使用。
official
workers-best-practices
Cloudflare
審查並指導 Cloudflare Workers 程式碼遵循生產最佳實踐。在撰寫新的 Workers、審查 Worker 程式碼、設定 wrangler.jsonc,或檢查常見的 Workers 反模式(串流、懸浮承諾、全域狀態、機密、綁定、可觀測性)時載入。傾向從 Cloudflare 文件檢索,而非依賴預先訓練的知識。
official
wrangler
Cloudflare
Cloudflare Workers CLI,用於部署、開發及管理 Workers、KV、R2、D1、Vectorize、Hyperdrive、Workers AI、Containers、Queues、Workflows、Pipelines 與 Secrets Store。在執行 wrangler 指令前載入,以確保正確語法與最佳實踐。
official