Cloudflare Agents SDK
STOP. Vos connaissances du Agents SDK peuvent être obsolètes. Préférez la récupération de documentation à la pré-formation pour toute tâche Agents SDK.
Documentation
Récupérez la documentation actuelle depuis https://github.com/cloudflare/agents/tree/main/docs avant d'implémenter.
| Sujet | Doc | À utiliser pour |
|---|---|---|
| Démarrage rapide | docs/getting-started.md |
Premier agent, configuration du projet |
| État | docs/state.md |
setState, validateStateChange, persistance |
| Routage | docs/routing.md |
Modèles d'URL, routeAgentRequest, basePath |
| Méthodes appellables | docs/callable-methods.md |
@callable, RPC, streaming, timeouts |
| Planification | docs/scheduling.md |
schedule(), scheduleEvery(), cron |
| Workflows | docs/workflows.md |
AgentWorkflow, tâches multi-étapes durables |
| HTTP/WebSockets | docs/http-websockets.md |
Hooks de cycle de vie, hibernation |
docs/email.md |
Routage email, résolveur de réponse sécurisé | |
| Client MCP | docs/mcp-client.md |
Connexion à des serveurs MCP |
| Serveur MCP | docs/mcp-servers.md |
Construction de serveurs MCP avec McpAgent |
| Client SDK | docs/client-sdk.md |
useAgent, useAgentChat, hooks React |
| Human-in-the-loop | docs/human-in-the-loop.md |
Flux d'approbation, pause de workflows |
| Streaming reprise | docs/resumable-streaming.md |
Récupération de flux à la déconnexion |
Docs Cloudflare : https://developers.cloudflare.com/agents/
Capacités
Le Agents SDK fournit :
- État persistant - Soutenu par SQLite, auto-synchronisé avec les clients
- RPC appelable - Méthodes
@callable()invoquées via WebSocket - Planification - Tâches uniques, récurrentes (
scheduleEvery), et cron - Workflows - Traitement en arrière-plan multi-étapes durable via
AgentWorkflow - Intégration MCP - Connectez-vous à des serveurs MCP ou construisez les vôtres avec
McpAgent - Gestion email - Recevez et répondez à des emails avec routage sécurisé
- Chat streaming -
AIChatAgentavec flux reprennables - Hooks React -
useAgent,useAgentChatpour les apps clients
D'ABORD : Vérifier l'installation
npm ls agents # Should show agents package
Si non installé :
npm install agents
Configuration Wrangler
{
"durable_objects": {
"bindings": [{ "name": "MyAgent", "class_name": "MyAgent" }],
},
"migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyAgent"] }],
}
Classe Agent
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 }),
}
Routage
Les requêtes se routent vers /agents/{agent-name}/{instance-name} :
| Classe | URL |
|---|---|
Counter |
/agents/counter/user-123 |
ChatRoom |
/agents/chat-room/lobby |
Client : useAgent({ agent: "Counter", name: "user-123" })
APIs principales
| Tâche | API |
|---|---|
| Lire l'état | this.state.count |
| Écrire l'état | this.setState({ count: 1 }) |
| Requête SQL | this.sql`SELECT * FROM users WHERE id = ${id}` |
| Planification (délai) | await this.schedule(60, "task", payload) |
| Planification (cron) | await this.schedule("0 * * * *", "task", payload) |
| Planification (intervalle) | await this.scheduleEvery(30, "poll") |
| Méthode RPC | @callable() myMethod() { ... } |
| RPC streaming | @callable({ streaming: true }) stream(res) { ... } |
| Démarrer un workflow | await this.runWorkflow("ProcessingWorkflow", params) |
Client React
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>
}
Références
- references/workflows.md - Intégration Durable Workflows
- references/callable.md - Méthodes RPC, streaming, timeouts
- references/state-scheduling.md - Persistance d'état, planification
- references/streaming-chat.md - AIChatAgent, flux reprennables
- references/mcp.md - Intégration serveur MCP
- references/email.md - Routage et gestion email
- references/codemode.md - Code Mode (expérimental)