TokenEconomizer
코딩 에이전트를 위한 경험 기반 블랙박스 비용 제어
Cloudflare Agents SDK로 지속 메모리·실시간 WebSocket·스케줄 작업이 가능한 상태 저장 AI 에이전트를 만들 수 있습니다
Create stateful AI agents with persistent memory, real-time WebSocket connections, and scheduled tasks using the Cloudflare Agents SDK.
개발 도구TypeScript · JavaScriptGitHub @cloudflare온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Build and deploy AI Agents on Cloudflare
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗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.
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.
The agent is a Durable Object, so it needs a binding and a SQLite migration in wrangler.jsonc:
{
"name": "counter",
"main": "server.ts",
"compatibility_date": "2026-06-11",
"compatibility_flags": ["nodejs_compat"],
"durable_objects": {
"bindings": [{ "name": "CounterAgent", "class_name": "CounterAgent" }]
},
"migrations": [{ "tag": "v1", "new_sqlite_classes": ["CounterAgent"] }]
}
| Feature | Description |
|---|---|
| Persistent State | Syncs to all connected clients, survives restarts |
| Callable Methods | Type-safe RPC via the @callable() decorator |
| Sub-agents | Parent/child DO composition via facets, nested routing, and typed parent lookup |
| Agent Tools | Run chat-capable sub-agents as tools with streaming child timelines |
| 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 (HTTP, SSE, RPC, elicitation) |
| WebMCP | Expose page-local tools or bridge remote MCP tools to browser agents |
| Workflows | Durable multi-step tasks with human-in-the-loop approval |
| Send, receive, and reply via Cloudflare Email Service | |
| Voice | Continuous STT, streaming TTS, VAD, interruption, SFU utilities |
| Browser Agents | Run agents in the browser tab with agents/browser |
| Code Mode | LLMs generate executable TypeScript instead of individual tool calls |
| Sandboxed Execution | Run generated code inside an isolated Worker with a virtual filesystem |
| x402 Payments | Pay-per-call APIs and tools via the x402 protocol |
| Observability | Built-in tracing, metrics, and structured logs |
| SQL | Direct SQLite queries via Durable Objects |
| React Hooks | useAgent, useAgentChat, useVoiceAgent for frontend integration |
| Vanilla JS Client |
| Package | Description |
|---|---|
agents | Core SDK — Agents, routing, Voice, Channels, scheduling, MCP, workflows, x402, browser agents |
@cloudflare/ai-chat | Higher-level AI chat — persistent messages, resumable streaming, tool execution |
@cloudflare/think | Opinionated chat agent base — agentic loop, stream resumption, client tools, workspace tools |
@cloudflare/codemode | LLMs write executable code that calls your tools, instead of one tool call at a time |
@cloudflare/shell | Deprecated: use @cloudflare/computer workspaces |
@cloudflare/voice | Deprecated compatibility wrapper for the agents/voice exports |
@cloudflare/worker-bundler | Build and bundle Workers at runtime, for use with the Worker Loader binding |
hono-agents | Hono middleware for adding agents to Hono apps |
AI-chat modules used to live in
agents/ai-chat-agent,agents/chat,agents/ai-react, andagents/ai-types. Those entry points still re-export, but they're deprecated — import from@cloudflare/ai-chatdirectly. New chat-from-scratch projects should look at@cloudflare/think.
The examples/ directory has 30+ self-contained demos. A non-exhaustive tour:
playground/ is the kitchen-sink app: state, callable methods, scheduling, chat, tools, MCP, workflows, email, voice — all in one UIagents-as-tools/, computer-skills/, r2-skills/, workspace-chat/, resumable-stream-chat/, structured-input/, dynamic-tools/, multi-ai-chat/, context-overflow-recovery/mcp/, mcp-client/, mcp-server/, , , , , , , Examples using the OpenAI Agents SDK live in openai-sdk/. Work-in-progress experiments live in experimental/ (no stability guarantees).
Run any example locally:
cd examples/playground
npm start
docs/ directory in this repo (synced upstream)design/ — architecture and design decision records (chat API, sub-agents, agent tools, workspace, voice, browser tools, retries, and more)| Directory | Description |
|---|---|
packages/agents/ | Core SDK |
packages/ai-chat/ | AI chat layer |
packages/think/ | Opinionated chat agent base |
packages/codemode/ | Code Mode |
packages/shell/ | Deprecated sandboxed execution + filesystem |
packages/voice/ | Deprecated Voice compatibility wrapper |
packages/worker-bundler/ | Runtime Workers bundler |
packages/hono-agents/ | Hono integration |
examples/ | Self-contained demo apps |
experimental/ | Work-in-progress experiments (not published) |
Node 24+ required. pnpm workspaces with Nx for task orchestration, caching, and affected detection.
pnpm install # install all workspaces
pnpm run build # build all packages (Nx, cached, dependency-ordered)
pnpm run check # sherif + export checks + oxfmt + oxlint + typecheck
pnpm run test # vitest + vitest-pool-workers (Workers runtime)
pnpm run test:react # Playwright-based React hook tests
pnpm exec nx affected -t build # build only what changed
pnpm exec nx affected -t test # test only what changed
Changes to packages/ need a changeset:
pnpm exec changeset
See AGENTS.md for deeper contributor guidance.
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:
AgentClient and VoiceClient for non-React environments |
mcp-worker/codemode/, codemode-mcp/, codemode-mcp-openapi/, dynamic-workers/, dynamic-workers-playground/, worker-bundler-playground/voice-agent/ is the unified voice pipeline example with Workers AI, AssemblyAI, Telnyx, and ElevenLabs STT; voice-input/ covers dictation; telnyx-voice-agent/ covers phone transport; elevenlabs-starter/ covers broader ElevenLabs media APIsworkflows/, a2a/auth-agent/, cross-domain/, x402/, x402-mcp/, email-agent/, github-webhook/, push-notifications/tictactoe/, ai-chat/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 |