56 results available
Sign in
Skills directory

agents-sdk

cloudflare

·

Last changed
Hardened

This skill has been hardened by Chainguard

Last changed

This version passed the hardening gate. Hardening updated the skill content and independently checked the resulting changes. Classified findings before hardening: 12. Classified findings closed: 1. Classified findings remaining: 11. Unclassified scanner findings remaining: 0. Review findings closed: 1. Review findings remaining: 16.


Open before hardening

4

Medium

8

Low
Open after hardening

4

Medium

7

Low

Expand
File
Group
Subtype
Severity
Status
references/configuration.md

Supply Chain & Install-Time Trust

—

Medium
Open
references/webhooks-push.md

Supply Chain & Install-Time Trust

—

Medium
Open
references/codemode.md

Excessive Agency & Rogue Autonomy

—

Medium
Open
SKILL.md

Excessive Agency & Rogue Autonomy

—

Medium
Open
references/codemode.md

Sensitive Data & Secret Exposure

Hardcoded secret

Low
Open
references/codemode.md

Prompt Injection

Third-party content as instructions

Low
Open
SKILL.md

Prompt Injection

Third-party content as instructions

Low
Closed
references/configuration.md

Prompt Injection

Third-party content as instructions

Low
Open

12 findings


SKILL.md

Cloudflare Agents SDK

Your knowledge of the Agents SDK may be outdated. Prefer retrieval over pre-training for any Agents SDK task.

Retrieval Sources

Cloudflare docs: https://developers.cloudflare.com/agents/index.md

TopicDocs URLUse for

Getting started

Quick start

First agent, project setup

Adding to existing project

Add to existing project

Install into existing Workers app

Configuration

Configuration

wrangler.jsonc, bindings, assets, deployment

Agent class

Agents API

Agent lifecycle, patterns, pitfalls

State

Store and sync state

setState, validateStateChange, persistence

Routing

Routing

URL patterns, routeAgentRequest

Callable methods

Callable methods

@callable, RPC, streaming, timeouts

Scheduling

Schedule tasks

schedule(), scheduleEvery(), cron

Workflows

Run workflows

AgentWorkflow, durable multi-step tasks

HTTP/WebSockets

WebSockets

Lifecycle hooks, hibernation

Chat agents

Chat agents

AIChatAgent, streaming, tools, persistence

Client SDK

Client SDK

useAgent, AgentClient, state, RPC, HTTP

Client tools

Client tools

Client-side tools, autoContinueAfterToolResult

Server-driven messages

Autonomous responses

saveMessages, waitUntilStable, server-initiated turns

Resumable streaming

Chat agents

Stream recovery on disconnect

Email

Email

Email routing, secure reply resolver

MCP client

MCP client

Connecting to MCP servers

MCP server

MCP server

Building MCP servers with createMcpHandler

MCP transports

MCP transports

Streamable HTTP, SSE, RPC transport options

Securing MCP servers

Securing MCP

OAuth, proxy MCP, hardening

Human-in-the-loop

Human-in-the-loop

Workflow approvals, elicitation, timeout handling

Durable execution

Durable execution

runFiber(), stash(), surviving DO eviction

Queue

Queue

Built-in FIFO queue, queue()

Retries

Retries

this.retry(), backoff/jitter

Observability

Observability

Diagnostics-channel events

Push notifications

Push notifications

Web Push + VAPID from agents

Webhooks

Webhooks

Receiving external webhooks

Cross-domain auth

Cross-domain auth

WebSocket auth, tokens, CORS

Readonly connections

Readonly

shouldConnectionBeReadonly

Voice

Voice

Experimental STT/TTS, withVoice

Browse the web

Browser tools

Experimental CDP browser automation

Think

Think

Experimental higher-level chat agent class

Capabilities

The Agents SDK provides:

  • Persistent state — SQLite-backed, auto-synced to clients via setState
  • Callable RPC — @callable() methods invoked over WebSocket
  • Scheduling — One-time, recurring (scheduleEvery), and cron tasks
  • Workflows — Durable multi-step background processing via AgentWorkflow
  • Durable execution — runFiber() / stash() for work that survives DO eviction
  • Queue — Built-in FIFO queue with retries via queue()
  • Retries — this.retry() with exponential backoff and jitter
  • MCP integration — Connect to MCP servers or build your own with createMcpHandler
  • Email handling — Receive and reply to emails with secure routing
  • Streaming chat — AIChatAgent with resumable streams, message persistence, tools
  • Server-driven messages — saveMessages, waitUntilStable for proactive agent turns
  • React hooks — useAgent, useAgentChat for client apps
  • Observability — diagnostics_channel events for state, RPC, schedule, lifecycle
  • Push notifications — Web Push + VAPID delivery from agents
  • Webhooks — Receive and verify external webhooks
  • Voice (experimental) — STT/TTS via @cloudflare/voice
  • Browser tools (experimental) — CDP-powered browsing via agents/browser
  • Think (experimental) — Higher-level chat agent via @cloudflare/think

FIRST: Verify Installation

npm ls agents  # Should show agents package

If not installed:

npm install agents

For chat agents:

npm install agents @cloudflare/ai-chat ai @ai-sdk/react

Wrangler Configuration

{
  "compatibility_flags": ["nodejs_compat"],
  "durable_objects": {
    "bindings": [{ "name": "MyAgent", "class_name": "MyAgent" }]
  },
  "migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyAgent"] }]
}

Gotchas:

  • Do NOT enable experimentalDecorators in tsconfig (breaks @callable)
  • Never edit old migrations — always add new tags
  • Each agent class needs its own DO binding + migration entry
  • Add "ai": { "binding": "AI" } for Workers AI

Agent Class

import { Agent, routeAgentRequest, callable } from "agents";

type State = { count: number };

export class Counter extends Agent<Env, State> {
  initialState = { count: 0 };

  validateStateChange(nextState: State, source: Connection | "server") {
    if (nextState.count < 0) throw new Error("Count cannot be negative");
  }

  onStateUpdate(state: State, source: Connection | "server") {
  }

  @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 })
};

Routing

Requests route to /agents/{agent-name}/{instance-name}:

ClassURL

Counter

/agents/counter/user-123

ChatRoom

/agents/chat-room/lobby

Client: useAgent({ agent: "Counter", name: "user-123" })

Custom routing: use getAgentByName(env.MyAgent, "instance-id") then agent.fetch(request).

Core APIs

TaskAPI

Read state

this.state.count

Write state

this.setState({ count: 1 })

SQL query

this.sql`SELECT * FROM users WHERE id = ${id}`

Schedule (delay)

await this.schedule(60, "task", payload)

Schedule (cron)

await this.schedule("0 * * * *", "task", payload)

Schedule (interval)

await this.scheduleEvery(30, "poll")

RPC method

@callable() myMethod() { ... }

Streaming RPC

@callable({ streaming: true }) stream(res) { ... }

Start workflow

await this.runWorkflow("ProcessingWorkflow", params)

Durable fiber

await this.runFiber("name", async (ctx) => { ... })

Enqueue work

this.queue("handler", payload)

Retry with backoff

await this.retry(fn, { maxAttempts: 5 })

Broadcast to clients

this.broadcast(message)

Get connections

this.getConnections(tag?)

React Client

Read client-sdk.md for client selection and current connection examples. For chat UI and tools, also read streaming-chat.md.

References

Core

Chat & Streaming

Background Processing

Integrations

Experimental

Install

Install with chainctl
chainctl skill install public/cloudflare/agents-sdk:latest
Get started with chainctl
View source

Harden your own skills

Bring Chainguard's hardening pipeline to your first-party skills — custom rulesets, automated remediation, full audit trail.

Provenance

Upstream sourcehttps://github.com/cloudflare/skills
Upstream commit41e0d19858946d18af9ee2c2feebbe2e11d829ff
OCI reference

skills.cgr.dev/public/github.com/cloudflare/skills/agents-sdk:latest

License

Apache-2.0

Files

HARDENING.md

LICENSE

SKILL.md

references/browse-the-web.md

references/callable.md

references/client-sdk.md

references/codemode.md

references/configuration.md

references/durable-execution.md

references/email.md

references/human-in-the-loop.md

references/mcp.md

references/observability.md

references/queue-retries.md

references/routing.md

references/server-driven-messages.md

references/state-scheduling.md

references/streaming-chat.md

references/think.md

references/voice.md

references/webhooks-push.md

references/workflows.md


The trusted source for open source

Talk to an expert
PrivacyTerms

Product

Chainguard ContainersChainguard LibrariesChainguard VMsChainguard OS PackagesChainguard ActionsChainguard Agent SkillsIntegrationsPricing
© 2026 Chainguard, Inc. All Rights Reserved.
Chainguard® and the Chainguard logo are registered trademarks of Chainguard, Inc. in the United States and/or other countries.
The other respective trademarks mentioned on this page are owned by the respective companies and use of them does not imply any affiliation or endorsement.