Agents
Build and deploy AI Agents on Cloudflare
Install / Use
/learn @cloudflare/AgentsREADME
Cloudflare Agents
Agents are persistent, stateful execution environments for agentic workloads, powered by Cloudflare Durable Objects. Each agent has its own state, storage, and lifecycle — with built-in support for real-time communication, scheduling, AI model calls, MCP, workflows, and more.
Agents hibernate when idle and wake on demand. You can run millions of them — one per user, per session, per game room — each costs nothing when inactive.
npm create cloudflare@latest -- --template cloudflare/agents-starter
Or add to an existing project:
npm install agents
Read the docs — getting started, API reference, guides, and more.
Quick Example
A counter agent with persistent state, callable methods, and real-time sync to a React frontend:
// server.ts
import { Agent, routeAgentRequest, callable } from "agents";
export type CounterState = { count: number };
export class CounterAgent extends Agent<Env, CounterState> {
initialState = { count: 0 };
@callable()
increment() {
this.setState({ count: this.state.count + 1 });
return this.state.count;
}
@callable()
decrement() {
this.setState({ count: this.state.count - 1 });
return this.state.count;
}
}
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext) {
return (
(await routeAgentRequest(request, env)) ??
new Response("Not found", { status: 404 })
);
}
};
// client.tsx
import { useAgent } from "agents/react";
import { useState } from "react";
import type { CounterAgent, CounterState } from "./server";
function Counter() {
const [count, setCount] = useState(0);
const agent = useAgent<CounterAgent, CounterState>({
agent: "CounterAgent",
onStateUpdate: (state) => setCount(state.count)
});
return (
<div>
<span>{count}</span>
<button onClick={() => agent.stub.increment()}>+</button>
<button onClick={() => agent.stub.decrement()}>-</button>
</div>
);
}
State changes sync to all connected clients automatically. Call methods like they're local functions.
Features
| Feature | Description |
| --------------------- | ---------------------------------------------------------------------- |
| Persistent State | Syncs to all connected clients, survives restarts |
| Callable Methods | Type-safe RPC via the @callable() decorator |
| Scheduling | One-time, recurring, and cron-based tasks |
| WebSockets | Real-time bidirectional communication with lifecycle hooks |
| AI Chat | Message persistence, resumable streaming, server/client tool execution |
| MCP | Act as MCP servers or connect as MCP clients |
| Workflows | Durable multi-step tasks with human-in-the-loop approval |
| Email | Receive and respond via Cloudflare Email Routing |
| Code Mode | LLMs generate executable TypeScript instead of individual tool calls |
| SQL | Direct SQLite queries via Durable Objects |
| React Hooks | useAgent and useAgentChat for frontend integration |
| Vanilla JS Client | AgentClient for non-React environments |
Coming soon: Realtime voice agents, web browsing (headless browser), sandboxed code execution, and multi-channel communication (SMS, messengers).
Packages
| Package | Description |
| ------------------------------------------- | ------------------------------------------------------------------------------- |
| agents | Core SDK — Agent class, routing, state, scheduling, MCP, email, workflows |
| @cloudflare/ai-chat | Higher-level AI chat — persistent messages, resumable streaming, tool execution |
| hono-agents | Hono middleware for adding agents to Hono apps |
| @cloudflare/codemode | Experimental — LLMs write executable code to orchestrate tools |
Examples
The examples/ directory has self-contained demos covering most SDK features — MCP servers/clients, workflows, email agents, webhooks, tic-tac-toe, resumable streaming, and more. The playground is the kitchen-sink showcase with everything in one UI.
There are also examples using the OpenAI Agents SDK in openai-sdk/.
Run any example locally:
cd examples/playground
npm run dev
Documentation
- Full docs on developers.cloudflare.com
docs/directory in this repo (synced upstream)- Anthropic Patterns guide — sequential, routing, parallel, orchestrator, evaluator
- Human-in-the-Loop guide — approval workflows with pause/resume
Repository Structure
| Directory | Description |
| ----------------------------------------------- | -------------------------------------------------------- |
| packages/agents/ | Core SDK |
| packages/ai-chat/ | AI chat layer |
| packages/hono-agents/ | Hono integration |
| packages/codemode/ | Code Mode (experimental) |
| examples/ | Self-contained demo apps |
| openai-sdk/ | Examples using the OpenAI Agents SDK |
| guides/ | In-depth pattern tutorials |
| docs/ | Markdown docs synced to developers.cloudflare.com |
| site/ | Deployed websites (agents.cloudflare.com, AI playground) |
| design/ | Architecture and design decision records |
| scripts/ | Repo-wide tooling |
Development
Node 24+ required. Uses npm workspaces.
npm install # install all workspaces
npm run build # build all packages
npm run check # full CI check (format, lint, typecheck, exports)
CI=true npm test # run tests (vitest + vitest-pool-workers)
Changes to packages/ need a changeset:
npx changeset
See AGENTS.md for deeper contributor guidance.
Contributing
We are not accepting external pull requests at this time — the SDK is evolving quickly and we want to keep the surface area manageable. That said, we'd love to hear from you:
- Bug reports & feature requests — open an issue
- Questions & ideas — start a discussion
License
Related Skills
tmux
334.1kRemote-control tmux sessions for interactive CLIs by sending keystrokes and scraping pane output.
blogwatcher
334.1kMonitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI.
Unla
2.1k🧩 MCP Gateway - A lightweight gateway service that instantly transforms existing MCP Servers and APIs into MCP servers with zero code changes. Features Docker deployment and management UI, requiring no infrastructure modifications.
mcp-server-code-execution-mode
319An MCP server that executes Python code in isolated rootless containers with optional MCP server proxying. Implementation of Anthropic's and Cloudflare's ideas for reducing MCP tool definitions context bloat.
