Loading...
Loading...
Cloudflare Workers provides comprehensive guidance for building edge-first applications using Durable Objects, KV, R2, D1, AI bindings, and Vectorize.
npx skill4agent add itallstartedwithaidea/agent-skills cloudflare-workersgraph TD
A[Client Request] --> B[Worker: Route + Auth]
B --> C{Request Type}
C -->|API| D[Durable Object: buddy-agent]
C -->|Content| E[KV: Cached Pages]
C -->|Upload| F[R2: Object Storage]
C -->|Query| G[D1: SQLite Database]
D --> H[Workers AI: Inference]
D --> I[Vectorize: Embeddings]
G --> J[buddy-brain: Knowledge Base]
E --> K[blog-engine: Page Serving]
H --> L[Response to Client]
I --> L
J --> L
K --> Lexport default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
if (url.pathname.startsWith("/api/chat")) {
const id = env.BUDDY_AGENT.idFromName("default");
const agent = env.BUDDY_AGENT.get(id);
return agent.fetch(request);
}
const cached = await env.PAGE_CACHE.get(url.pathname);
if (cached) return new Response(cached, {
headers: { "Content-Type": "text/html", "Cache-Control": "public, max-age=3600" },
});
return new Response("Not Found", { status: 404 });
},
} satisfies ExportedHandler<Env>;
export class BuddyAgent extends DurableObject {
async fetch(request: Request): Promise<Response> {
const body = await request.json<{ message: string }>();
const embedding = await this.env.AI.run("@cf/baai/bge-base-en-v1.5", {
text: [body.message],
});
const similar = await this.env.VECTORIZE.query(embedding.data[0], {
topK: 5,
returnMetadata: "all",
});
const context = similar.matches.map(m => m.metadata?.text).join("\n");
const response = await this.env.AI.run("@cf/meta/llama-3.1-8b-instruct", {
messages: [
{ role: "system", content: `Context: ${context}` },
{ role: "user", content: body.message },
],
});
return Response.json({ reply: response.response });
}
}// wrangler.jsonc
{
"name": "buddy-agent",
"main": "src/index.ts",
"compatibility_date": "2026-04-01",
"durable_objects": {
"bindings": [{ "name": "BUDDY_AGENT", "class_name": "BuddyAgent" }]
},
"kv_namespaces": [{ "binding": "PAGE_CACHE", "id": "abc123" }],
"vectorize": [{ "binding": "VECTORIZE", "index_name": "buddy-brain" }],
"ai": { "binding": "AI" }
}waitUntil()compatibility_datelocationHintwrangler secret putvars| Platform | Support | Notes |
|---|---|---|
| Cursor | Full | Wrangler CLI integration |
| VS Code | Full | Cloudflare extension available |
| Windsurf | Full | Workers-aware deployment |
| Claude Code | Full | Shell + wrangler access |
| Cline | Full | Terminal-based development |
| aider | Partial | Config file generation |
cloudflare-workersdurable-objectskvr2d1workers-aivectorizeedge-computingserverlessbuddy-agent