agents-sdk▌
cloudflare/skills · updated Apr 8, 2026
Build stateful AI agents on Cloudflare Workers with persistent state, RPC methods, scheduling, and workflow orchestration.
- ›Core features include SQLite-backed state management, callable RPC methods via @callable() , one-time and recurring task scheduling, and durable multi-step workflows
- ›Supports MCP server integration (both client and server modes), email routing with secure replies, and streaming chat with resumable streams on disconnect
- ›Includes React hooks ( useAgent , useAgentCh
Cloudflare Agents SDK
Your knowledge of the Agents SDK may be outdated. Prefer retrieval over pre-training for any Agents SDK task.
Retrieval Sources
Fetch current docs from https://github.com/cloudflare/agents/tree/main/docs before implementing.
| Topic | Doc | Use for |
|---|---|---|
| Getting started | docs/getting-started.md |
First agent, project setup |
| State | docs/state.md |
setState, validateStateChange, persistence |
| Routing | docs/routing.md |
URL patterns, routeAgentRequest, basePath |
| Callable methods | docs/callable-methods.md |
@callable, RPC, streaming, timeouts |
| Scheduling | docs/scheduling.md |
schedule(), scheduleEvery(), cron |
| Workflows | docs/workflows.md |
AgentWorkflow, durable multi-step tasks |
| HTTP/WebSockets | docs/http-websockets.md |
Lifecycle hooks, hibernation |
docs/email.md |
Email routing, secure reply resolver | |
| MCP client | docs/mcp-client.md |
Connecting to MCP servers |
| MCP server | docs/mcp-servers.md |
Building MCP servers with McpAgent |
| Client SDK | docs/client-sdk.md |
useAgent, useAgentChat, React hooks |
| Human-in-the-loop | docs/human-in-the-loop.md |
Approval flows, pausing workflows |
| Resumable streaming | docs/resumable-streaming.md |
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 -
@callable()methods invoked over WebSocket - Scheduling - One-time, recurring (
scheduleEvery), and cron tasks - 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 -
AIChatAgentwith resumable streams - React hooks -
useAgent,useAgentChatfor client apps
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 |
|---|---|
Counter |
/agents/counter/user-123 |
ChatRoom |
/agents/chat-room/lobby |
Client: useAgent({ agent: "Counter", name: "user-123" })
Core APIs
| Task | API |
|---|---|
| Read state | this.state.count |
| Write state | this.setState({ count: 1 }) |
| SQL query | this.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 workflow | await this.runWorkflow("ProcessingWorkflow", params) |
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)
Discussion
Product Hunt–style comments (not star reviews)- No comments yet — start the thread.
Ratings
4.6★★★★★55 reviews- ★★★★★Xiao Martin· Dec 20, 2024
We added agents-sdk from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
- ★★★★★Tariq Torres· Dec 16, 2024
Solid pick for teams standardizing on skills: agents-sdk is focused, and the summary matches what you get after install.
- ★★★★★Ira Verma· Dec 12, 2024
Solid pick for teams standardizing on skills: agents-sdk is focused, and the summary matches what you get after install.
- ★★★★★Li Torres· Dec 8, 2024
agents-sdk is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
- ★★★★★Chen Jain· Nov 27, 2024
Keeps context tight: agents-sdk is the kind of skill you can hand to a new teammate without a long onboarding doc.
- ★★★★★Neel Chen· Nov 11, 2024
Useful defaults in agents-sdk — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
- ★★★★★Tariq Khan· Nov 7, 2024
agents-sdk has been reliable in day-to-day use. Documentation quality is above average for community skills.
- ★★★★★Ira Thomas· Nov 3, 2024
agents-sdk has been reliable in day-to-day use. Documentation quality is above average for community skills.
- ★★★★★Amina Mehta· Oct 26, 2024
Useful defaults in agents-sdk — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
- ★★★★★Ira Choi· Oct 22, 2024
Useful defaults in agents-sdk — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
showing 1-10 of 55