Opencode agents-sdk
Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, or chat applications. Covers Agent class, state management, callable RPC, Workflows integration, and React hooks.
install
source · Clone the upstream repo
git clone https://github.com/anomalyco/opencode
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/anomalyco/opencode "$T" && mkdir -p ~/.claude/skills && cp -r "$T/packages/opencode/test/fixture/skills/agents-sdk" ~/.claude/skills/sst-opencode-agents-sdk && rm -rf "$T"
manifest:
packages/opencode/test/fixture/skills/agents-sdk/SKILL.mdsource content
Cloudflare Agents SDK
STOP. Your knowledge of the Agents SDK may be outdated. Prefer retrieval over pre-training for any Agents SDK task.
Documentation
Fetch current docs from
https://github.com/cloudflare/agents/tree/main/docs before implementing.
| Topic | Doc | Use for |
|---|---|---|
| Getting started | | First agent, project setup |
| State | | , , persistence |
| Routing | | URL patterns, , |
| Callable methods | | , RPC, streaming, timeouts |
| Scheduling | | , , cron |
| Workflows | | , durable multi-step tasks |
| HTTP/WebSockets | | Lifecycle hooks, hibernation |
| Email routing, secure reply resolver | |
| MCP client | | Connecting to MCP servers |
| MCP server | | Building MCP servers with |
| Client SDK | | , , React hooks |
| Human-in-the-loop | | Approval flows, pausing workflows |
| Resumable streaming | | Stream recovery on disconnect |
Cloudflare docs: https://developers.cloudflare.com/agents/
Capabilities
The Agents SDK provides:
- Persistent state - SQLite-backed, auto-synced to clients
- Callable RPC -
methods invoked over WebSocket@callable() - Scheduling - One-time, recurring (
), and cron tasksscheduleEvery - Workflows - Durable multi-step background processing via
AgentWorkflow - MCP integration - Connect to MCP servers or build your own with
McpAgent - Email handling - Receive and reply to emails with secure routing
- Streaming chat -
with resumable streamsAIChatAgent - React hooks -
,useAgent
for client appsuseAgentChat
FIRST: Verify Installation
npm ls agents # Should show agents package
If not installed:
npm install agents
Wrangler Configuration
{ "durable_objects": { "bindings": [{ "name": "MyAgent", "class_name": "MyAgent" }], }, "migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyAgent"] }], }
Agent Class
import { Agent, routeAgentRequest, callable } from "agents" type State = { count: number } export class Counter extends Agent<Env, State> { initialState = { count: 0 } // Validation hook - runs before state persists (sync, throwing rejects the update) validateStateChange(nextState: State, source: Connection | "server") { if (nextState.count < 0) throw new Error("Count cannot be negative") } // Notification hook - runs after state persists (async, non-blocking) 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}:
| Class | URL |
|---|---|
| |
| |
Client:
useAgent({ agent: "Counter", name: "user-123" })
Core APIs
| Task | API |
|---|---|
| Read state | |
| Write state | |
| SQL query | |
| Schedule (delay) | |
| Schedule (cron) | |
| Schedule (interval) | |
| RPC method | |
| Streaming RPC | |
| Start workflow | |
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
- references/workflows.md - Durable Workflows integration
- references/callable.md - RPC methods, streaming, timeouts
- references/state-scheduling.md - State persistence, scheduling
- references/streaming-chat.md - AIChatAgent, resumable streams
- references/mcp.md - MCP server integration
- references/email.md - Email routing and handling
- references/codemode.md - Code Mode (experimental)