← 返回 TONY'S LAB
Edge Agent Research · 2026-08-17

CLOUDFLARE AGENTS

把 Agent 搬上边缘网络:每个会话,都是一个休眠的持久化单元。

Cloudflare 官方 Agents SDK 研究——基于 Durable Objects 的 Agent 运行时:一个 Agent 即一个有状态、可休眠、按需唤醒的执行单元,能跑百万个而空闲零成本。本文梳理其架构、Project Think 基类、52 个示例,以及与 pi-on-cf 的演进脉络。

Repogithub.com/cloudflare/agents · MIT · npm agents
CoreDurable Objects + SQLite + WebSocket + AI Gateway
Pkgs8 个包 · 19 项能力 · 52 个示例
Status官方维护 · 迭代快 · 暂不接受外部 PR
Durable Objects Project Think Agent Runtime Workers
WORKER AI Gateway PiSession Agent-2 Agent-3 Agent-4 Agent-5 Agent-N
fig.01 — 每会话一个 Durable Object:独立地址、独立存储、互不干扰
The Core Thesis

Agent 不是跑在"一台机器"上,而是跑在"一个身份"上。

传统编码 Agent 假设自己在一台开发者笔记本上:有持久文件系统、shell、长驻进程。Workers 没有这些——于是 Cloudflare 的做法是:把 Agent 变成 Durable Object,给它身份、SQLite 存储和 WebSocket,让它在边缘上休眠、唤醒、重生。

这就是「Agent = 有状态的执行环境」:空闲时零成本,被调用时瞬时醒来。

01 / Lineage

三条线:从手工作坊到官方基建

这个研究从一条推文开始——Cloudflare DX 工程师 Harshil 用 Pi 的可移植内核在 Workers 上做了个实验,然后官方把它产品化了。

STEP 01

pi-on-cf手工验证 · harshil1712

把 Earendil 的 Pi 编码 Agent 整体搬上 Workers:每会话一个 DO 存会话树+工作区,AI Gateway 调模型,Worker Bundler 在 Worker 内打包生成的 React 应用。

2026-07 · 14★ · 无鉴权的单用户原型
STEP 02

Project Think官方产品化 · cloudflare/agents

受 Pi 启发的 opinionated 聊天 Agent 基类:agentic loop、流恢复、内置 workspace、客户端工具、子代理,全部基于 DO SQLite,开箱即用。

2026-04 发布 · npm @cloudflare/think
STEP 03

Yukt作者的下一站 · 未开源

Harshil 正在用 Think 构建的新项目。搜索不到公开仓库——大概率和 pi-on-cf 一样,是"用官方基建重做一遍"的进化版。

状态:私人 / 未公开
02 / Core Abstraction

Agent 即 Durable Object

整个 SDK 的基石:一个 Agent 类就是一个 DO 子类,装饰器生成类型安全的 RPC,前端 hook 直连 WebSocket。写一个计数器就 20 行。

server.ts
// 服务端:Agent = Durable Object
import { Agent, routeAgentRequest, callable } from "agents";

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

  @callable()
  increment() {
    this.setState({ count: this.state.count + 1 });
    return this.state.count;
  }
}

状态与协调state & coordination

Agent 的 state 自动同步给所有连接的客户端,方法像本地函数一样远程调用。

  • 持久状态——SQLite 存储,重启/驱逐后仍在
  • @callable() RPC——类型安全,跨网络如本地
  • 休眠唤醒——空闲零成本,百万实例可负担
  • 每会话一个 DO——独立地址与存储边界,天然隔离

WebSocket 实时层realtime

Agents SDK 在 DO 之上封装了 WebSocket 连接、RPC 与浏览器客户端——这是 pi-on-cf 里 Harshil 手搓的部分,现在是内置的。

  • routeAgentRequest——一行接入请求路由
  • useAgent / useAgentChat——React hooks 直连
  • 生命周期钩子——onConnect / onMessage / 调度
  • AgentClient——非 React 环境的原生 JS 客户端
03 / Scheduling

给 Agent 上闹钟

四种模式覆盖「延迟 → 定点 → 周期 → 秒级轮询」,任务持久化到 SQLite——Agent 休眠、被驱逐、重启,一个都不丢。

Delayed
延迟执行
schedule(60, cb) · 60 秒后跑;防抖、购物车提醒、退避重试
Scheduled
定点执行
schedule(Date, cb) · 指定时刻;约会提醒、定时发布、截止触发
Cron
周期执行
schedule("0 8 * * *", cb) · cron 表达式;日报、健康检查、清理任务
Interval
固定间隔
scheduleEvery(30, cb) · 秒级精度;cron 表达不了的 90 秒 / 7 分钟轮询
scheduling · agent 内置
// 四种模式:延迟 / 定点 / cron / 间隔
await this.schedule(60, "sendReminder", { message: "Check your email" });
await this.schedule(new Date("2025-12-31T09:00:00Z"), "yearEndTask");
await this.schedule("0 8 * * *", "dailyDigest", { userId });
await this.scheduleEvery(30, "poll", { source: "api" });

// 回调就是 Agent 的方法;底层 = DO alarms + SQLite,重启不丢
async dailyDigest(payload) { /* 生成并发送 */ }

可靠性机制durable by default

  • SQLite 持久化——任务存 DO 存储、按序执行,休眠 / 驱逐 / 重启不丢
  • 幂等——scheduleEvery 可安全放 onStart(),DO 重复唤醒不产生重复任务
  • 防重叠——上次没跑完自动跳过下次,杜绝资源失控
  • 内置重试——schedule(60, cb, payload, { retry: { maxAttempts: 5 } }) 指数退避
  • 生命周期管理——listSchedules / getScheduleById / cancelSchedule(可做可取消提醒)
  • 防驱逐——长任务用 keepAliveWhile() 保活;AIChatAgent 流式回复已内置

Think 声明式写法getScheduledTasks()

聊天 Agent 不用手动 schedule(),类上直接声明,启动时自动 reconcile:

getScheduledTasks() {
  return { hourlyQueueDigest: {
    schedule: "every 1 hour",
    prompt: "检查积压的后台任务"
  }};
}
  • submitMessages()——调用方等不了响应:立即返回 submissionId 收据,幂等键重试不重复
  • startFiber()——调用方还要处理外部副作用(webhook 只收一次、发可见回复)
  • Workflows——多步 + 人工审批的持久流程(waitForApproval 最长 7 天)
04 / Capability Matrix

19 项能力,四大类

从持久状态到电话语音,从 MCP 到按调用付费——不是每个都要用,但每个都有对应原语。

State
持久状态
同步所有客户端,重启不丢
State
Callable RPC
@callable() 类型安全远程调用
State
调度
一次性 / 循环 / cron 任务
State
WebSockets
实时双向通信 + 生命周期钩子
State
SQL
直接查询 DO 的 SQLite
Agent
子代理
facets 组合、嵌套路由、父级查找
Agent
Agent Tools
聊天子代理当工具,流式子时间线
Agent
AI Chat
消息持久化 + 可恢复流式
Agent
Code Mode
LLM 写可执行 TS 而非逐个调工具
Agent
沙箱执行
隔离 Worker + 虚拟文件系统跑生成代码
Agent
Workflows
持久多步任务 + 人工审批
Agent
浏览器 Agent
agents/browser,标签页内运行
Integrate
MCP
server / client / HTTP / SSE / RPC / elicitation
Integrate
WebMCP
浏览器端工具暴露给 Agent
Integrate
Email
Cloudflare Email Service 收发回复
Integrate
Voice
STT / TTS / VAD / 打断 / SFU
Integrate
x402 支付
按调用付费的 API 与工具
Ops
可观测性
内置 tracing / metrics / 结构化日志
Ops
前端集成
React hooks + 原生 JS 客户端
05 / Packages

八个包,一条职责链

核心 SDK 之外,每个能力独立成包,按需引入。

Package
定位
agents
核心 SDK——Agent 类、路由、状态、调度、MCP、Email、Workflows、x402、浏览器 Agent
@cloudflare/think
Project Think——开箱即用的聊天 Agent 基类:agentic loop、流恢复、客户端工具、workspace 工具 ⭐
@cloudflare/ai-chat
高层 AI 聊天——持久消息、可恢复流、工具执行(旧入口已 deprecated,新项目用 Think)
@cloudflare/codemode
Code Mode——LLM 写可执行代码调用你的工具
@cloudflare/shell
沙箱 JS 执行 + 虚拟文件系统(Workspace)
@cloudflare/voice
语音管线——STT / TTS / VAD / 流式 / SFU
@cloudflare/worker-bundler
运行时打包 Worker——配合 Worker Loader binding
hono-agents
Hono 中间件——给 Hono 应用加 Agent
06 / Project Think Deep-Dive

Think 的五个拳头能力

继承 Think 类 + 实现 getModel() / getSystemPrompt(),就得到一个完整聊天 Agent。以下能力全部内置。

📁

内置 Workspacedurable filesystem

每个 Agent 自带 this.workspace——DO SQLite 上的虚拟文件系统。read/write/edit/list/find/grep/delete/bash 工具自动注入;bash 走 just-bash 沙箱、默认禁网、文件变更自动回写。

🔁

流恢复resumable streaming

对话中断后可从持久化状态恢复——正是 pi-on-cf 里"无法恢复的活动流"痛点。DO 被驱逐、部署更新、断线重连,都能接着聊。

🧩

Agent Skillsagentskills.io

技能目录格式一等支持:模型先看目录,需要时 activate_skill / read_skill_resource。技能是"按需指令"而非常驻提示词,支持本地目录 / R2 / 脚本执行。

📨

Messengerschat ingress

直接声明 Telegram 等入口(getMessengers()),webhook 验证、线程→子代理路由、流式投递全内置。每个聊天线程一个独立子代理,防上下文串味。

🔧

Agent 即工具agentTool()

agentTool(Researcher, ...) 一行把另一个 Think 实例挂成工具:子代理拥有自己的消息、流、工具与存储,父代理广播子时间线实时渲染。

⚙️

配置钩子override points

getModel / getSystemPrompt / getTools / getScheduledTasks / maxSteps / sendReasoning / configureSession / getSkills…… 一个类即一个完整 Agent,可组合可覆盖。

07 / Examples

52 个示例,九个分类

examples/ 目录是可运行的自包含 demo。标 ⭐ 的是含金量最高的四个。

💬 聊天与助手12
assistant · 通用助手 + 执行 + GitHub 登录 ai-chat · AIChatAgent 基础聊天 multi-ai-chat · 多模型对比 structured-input · zod 结构化输入 dynamic-tools · 运行时动态工具 context-overflow-recovery · 上下文溢出恢复 resumable-stream-chat · 断线续传 workspace-chat · 带文件工作区聊天 vue-chat · Vue 前端示例 think-chat-sdk · Think + Telegram chat-sdk-messenger · 自定义 messenger playground · 全家桶展示
🧩 Agent 编排3
agents-as-tools · 子 Agent 当工具(无容器版) ⭐ sandbox-coding-agent · Think 编排 + Claude Code 跑容器沙箱,每任务一容器、并行扇出、零 token 方案 a2a · Google A2A 协议互通
⚙️ Code Mode 与沙箱5
codemode · LLM 写可执行 TS codemode-browser · + 浏览器工具 codemode-mcp · + MCP codemode-mcp-openapi · + OpenAPI ⭐ codemode-connectors · 服务封装成沙箱内全局对象 + 审批门控 + snippet 复用
🚀 动态 Workers3
dynamic-workers · Worker Loader 动态创建 dynamic-workers-playground · 玩票版 worker-bundler-playground · 运行时打包(pi-on-cf 同款)
🔌 MCP 系列9
mcp · 基础 mcp-client · 当客户端 mcp-server · 当服务端 mcp-worker · Worker 上跑 mcp-worker-authenticated · 加鉴权 mcp-rpc-transport · RPC 传输 mcp-elicitation · 引导式追问 mcp-elicitation-mrtr · elicitation + MRTR webmcp · 浏览器端工具
🌐 浏览器自动化2
⭐ browser-live-view · 真 Chrome + 遇到登录/CAPTCHA 交真人处理(Live View 交接) browser-quick-actions · 无状态一次性任务:转 MD / 提取 / 截图 / Ask AI
🎙️ 语音5
voice-agent · 统一语音管线 voice-input · 听写 telnyx-voice-agent · 电话语音 plivo-voice-agent · 电话语音(全 Workers AI 零第三方 key) elevenlabs-starter · ElevenLabs 媒体 API
📋 工作流 / 认证 / 支付 / 通信10
workflows · 多步持久任务 think-workflows · Think + Workflows auth-agent · 认证 cross-domain · 跨域 x402 · 按调用付费 x402-mcp · x402 + MCP email-agent · 收发回复邮件 github-webhook · GitHub 事件触发 push-notifications · Web Push think-submissions · 持久化程序化提交
🎮 杂项3
tictactoe · 井字棋多人实时对战 ⭐ deploy-churn · 长对话中连发真实部署,压测 chat recovery,输出毫秒级故障判定 think-chat-sdk ·(见聊天类)
08 / Resources & Verdict

值得读的,和值得记住的

Docs

官方文档

developers.cloudflare.com/agents——快速上手、API 参考、指南

developers.cloudflare.com/agents →
Design

设计 RFC 目录

仓库 design/ 下 30+ 份决策记录:sub-agents、workspace、chat recovery、voice……"为什么"都在这里

github.com/cloudflare/agents/tree/main/design →
Origin

起点的实验

pi-on-cf——Harshil 的手工原型,Think 的灵感来源;同思路的"上一代"实现

github.com/harshil1712/pi-on-cf →

"Pi 的可移植抽象不需要它的终端宿主——它们需要一组能力:持久身份、协调状态、文件、模型访问、流式、以及一种受约束的执行生成代码的方式。Cloudflare 提供了这些运行时。"

— HARSHIL AGRAWAL · CLOUDFLARE DX · 关于为什么 Think 能成立

值得记住的三件事

  • 身份即基础设施——把"每用户一个 Agent"当默认架构,休眠零成本,是边缘 Agent 与云端 Agent 的分水岭
  • 官方验证了 Pi 路线——Cloudflare 用 Pi 的哲学(可移植 agent loop + 存储接口)做了 Think,等于背书了"harness 与宿主解耦"的设计
  • 先读 design/ 再读代码——30+ 份 RFC 把每个权衡讲得比代码清楚

局限与观察

  • 不接受外部 PR,生态围绕官方演进,社区参与仅限 issue/discussion
  • Think 仍标 experimental,API 可能演进
  • 容器沙箱的磁盘是易失的——跨休眠的编码会话状态仍是已知缺口(deploy-churn 与 sandbox-coding-agent 都在围绕它做功课)
  • 52 个示例里 playground + sandbox-coding-agent + browser-live-view + deploy-churn 四个最值得跑