Cloudflare Computer 是面向 AI Agent 的开源 TypeScript 工作空间,主包为 @cloudflare/computer,采用 MIT 许可。它把 Durable Object 的 SQLite 持久文件系统,与 Container、Worker Shell、Worker JavaScript 执行后端组合起来,让 Agent 在同一目录里保存文件并运行不同类型的任务。

项目仍明确标注 Preview:接口和设计可能变化,目前不适合生产使用。它更适合已经使用 Workers、Durable Objects 的团队验证 Agent 架构。这里重点是包接口和运行条件,不能把仓库中的前瞻设计当成当前全部实现。
文件可以留下,执行环境可以换
Workspace 的权威文件状态保存在 Durable Object 的 SQLite 中,workspace.fs 提供接近 node:fs/promises 的异步读写、目录与搜索接口。它可以不配置任何执行后端,只作为持久工作目录使用。
Worker 后端通过 RPC 操作同一份权威文件,不需要再维护一份同步副本;Container 则由 computerd 提供 FUSE 挂载和同步。写入文件和运行命令是两个接口,持久工作目录也不等于容器进程会一直运行。

三种执行方式,共用入口但能力不同
| 执行后端 | 更适合的任务 | 额外条件 |
|---|---|---|
| Worker Shell | 常见文本命令、Git 和按需导入的轻量功能 | Dynamic Worker、Worker Loader 与 experimental 标志;不是完整 Linux |
| Worker JavaScript | ECMAScript 模块和结构化输入输出 | Dynamic Worker、Worker Loader 与 experimental 标志 |
| Container | 真实 Linux 二进制、Node.js、npm 等任务 | 运行 computerd 的 Cloudflare Container,以及对应绑定和调度配置 |
当前还保留 Container legacy 入口:一种由 Durable Object 调度容器,另一种由平台根据 containers 配置安排。它们都属于 Container 路线,但示例和绑定不能混着抄。
一个 Workspace 可注册多个带稳定 ID 的后端,调用 runtime.exec(source, { backend }) 时选择。对 Shell 而言,source 是命令;对 Worker JavaScript 而言,它是模块源码。相同接口便于编排,不代表同一段字符串在所有后端有相同含义。
起步可以只验证持久文件系统
安装主包后,把 withWorkspace 应用于 Durable Object。完整 Worker 和类型生成流程见包 README;下面是它要求的关键 Wrangler 配置片段,不是一份独立可部署项目:
npm install @cloudflare/computer
{
"compatibility_flags": ["nodejs_compat"],
"durable_objects": {
"bindings": [{ "name": "Agent", "class_name": "Agent" }]
},
"migrations": [
{ "tag": "v1", "new_sqlite_classes": ["Agent"] }
]
}
先写一个文件并在后续请求读回,再增加执行能力。Worker Shell 与 Worker JavaScript 还需 experimental 标志和 Worker Loader;只安装 npm 包,不会自动获得 Container 或完整 Linux 环境。
Worker Shell 的功能按组导入,例如 curl、python、sqlite、jq。没有导入的组不会进入 bundle。这既影响包体积,也决定 Agent 到底能调用什么,配置命令时应按实际任务选择。
接入 Agent 时,分别考虑工具与产物访问范围
- 文件工具:AI SDK 等入口可提供 read、ls、find、grep、write、edit、delete,exec 与 publish 按配置增加。只读任务可以只暴露读取和搜索。
- Git:可选客户端直接操作 SQLite 虚拟文件系统,不必先启动 Shell。
- Assets:把文件上传至 R2,再生成预签名 URL;分享时确认有效期和文件内容。
- Artifacts:传入 session ID 时按会话限定仓库范围;省略它则可以遍历整个命名空间,不能把省略参数当作会话隔离。
工具范围、用户认证和网络出口需要由应用一起安排。目录持久化让 Agent 有地方存文件,不会自动保证模型生成的命令正确,也不会替应用决定谁可以读取这些文件。
原型里的两个实际卡点
大目录与大量读写
包 README 给出的规模是每个 Workspace 约 10 GB,并与 Durable Object 共用存储配额,定位仍是小型 Agent 工作目录。Container 的 computerd 默认使用内存 SQLite 存储;当前性能文档说明可以通过 COMPUTERD_DB 指定磁盘路径,容器侧并非只能使用内存存储。
FUSE 的表现也不能统一说成比磁盘慢。项目基准显示元数据操作和大块顺序 I/O 有不同结果,且测试环境不能直接代表 Cloudflare 容器硬件。准备处理大型依赖、压缩包或仓库时,应使用自己的任务测量启动、执行和同步,而不是套用一组基准倍数。
长会话里的远程对象释放
getWorkspace() 返回的远程 stub,以及 runtime.exec() 返回的执行 handle,需要释放。官方示例使用 using;长会话反复创建而不释放,会在对端累积。读取字符串等纯值结果没有同样的释放要求,子接口随父 Workspace 管理。
先从 examples/worker-shell、examples/worker-javascript 或匹配调度方式的 Container 示例选一条路径。需要修改时,packages/computer 负责上层接口,packages/dofs 负责文件系统,packages/computerd 负责容器侧守护进程;可据此分清问题出在工具编排、存储还是同步。
- 仓库与 Preview 声明:
https://github.com/cloudflare/computer - 主包接口和配置:
https://github.com/cloudflare/computer/blob/main/packages/computer/README.md - 性能与存储说明:
https://github.com/cloudflare/computer/blob/main/docs/19_performance.md














暂无评论内容