Configuration
Fetch https://developers.cloudflare.com/agents/runtime/operations/configuration/index.md for complete documentation.
Wrangler Config (wrangler.jsonc)
{
"name": "my-agent",
"main": "src/index.ts",
"compatibility_date": "2025-01-28",
"compatibility_flags": ["nodejs_compat"],
"durable_objects": {
"bindings": [
{ "name": "MyAgent", "class_name": "MyAgent" },
{ "name": "ChatAgent", "class_name": "ChatAgent" }
]
},
"migrations": [
{ "tag": "v1", "new_sqlite_classes": ["MyAgent", "ChatAgent"] }
],
"ai": { "binding": "AI" },
"assets": {
"directory": "./dist/client",
"binding": "ASSETS",
"not_found_handling": "single-page-application",
"run_worker_first": true
}
}Key Rules
- Every agent class needs a DO binding AND a
new_sqlite_classesmigration entry nodejs_compatis required- Never edit old migrations — add a new tag (e.g.
v2) for new classes - Do NOT enable
experimentalDecoratorsin tsconfig — it breaks@callable - For Workers AI locally, set
"ai": { "binding": "AI", "remote": true }in.dev.varsor config - Use
wrangler secret putfor secrets, never hardcode them
Vite Setup
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import { cloudflare } from "@cloudflare/vite-plugin";
import { agents } from "agents/vite";
export default defineConfig({
plugins: [react(), cloudflare(), agents()]
});Type Generation
npx wrangler typesThis generates env.d.ts with typed bindings. Regenerate after changing wrangler.jsonc.
tsconfig
Extend the agents tsconfig for correct settings:
{
"extends": ["agents/tsconfig"],
"include": ["src/**/*.ts", "src/**/*.tsx"],
"compilerOptions": { "paths": { "~/*": ["./src/*"] } }
}