@cloudflare/computer 深度拆解:当 Cloudflare 决定「给每个 AI Agent 造一台电脑」——从 Durable Objects 到 SQLite 虚拟文件系统,一个 MIT 开源项目如何用 10GB 持久工作区重新定义 Agent 运行时的终极形态
一句话总结:Cloudflare 于 2026 年 8 月 3 日发布 @cloudflare/computer 早期预览版,为每个 AI 智能体提供基于 Durable Objects + SQLite 的持久工作区,三种执行后端(Worker Isolate / Worker Shell / Container)共享同一套文件系统,MIT 许可证开源,当前 npm 版本 0.1.1。这不是一台远程桌面云电脑——它是一间给智能体使用的持久工作室。
一、为什么 AI Agent 需要一台「电脑」?
1.1 从聊天到编程:AI Agent 的范式转移
2024 年,AI 还在聊天框里回答问题。2025 年,AI 开始写代码。2026 年,AI Agent 要自己读代码、改文件、跑测试、看结果、再改——完成一个完整的开发循环。
这不是科幻。Claude Code、Cursor、Codex、OpenCode 这些工具已经在做这件事了。但它们有一个共同的痛点:Agent 需要一个持久的工作环境来保存中间状态。
传统的解决方案是什么?给每个 Agent 分配一个 Docker 容器。容器提供隔离的 Linux 环境、文件系统、命令执行能力。听起来很完美,但问题来了:
1个用户 × 1个Agent × 1个容器 = 1个容器
100万用户 × 1个Agent × 1个容器 = 100万个容器
10亿用户 × 1个Agent × 1个容器 = 10亿个容器 ← 崩了
容器的 CPU 和内存开销是实打实的。当你的平台需要同时运行数亿个 AI Agent 时,为每个 Agent 配置一个完整容器的模式就彻底不work了。
1.2 Cloudflare 的答案:Isolate + Workspace
Cloudflare 的思路完全不同。他们不给你一台完整的电脑,而是给你一间工作室:
- 工作区(Workspace):用 SQLite 存储的虚拟文件系统,文件持久化在 Durable Objects 中,重启不丢失
- 执行环境:按需选择——轻量任务用 Worker Isolate(毫秒级启动),重负载用 Container(完整 Linux)
- 统一接口:无论哪种执行环境,都操作同一套工作区文件
这个设计的精妙之处在于:工作区是持久的,执行环境是临时的。就像你在办公室有一张固定的桌子(工作区),但你可以选择用计算器(Isolate)或者工作站(Container)来完成不同的任务。
二、架构深度拆解
2.1 核心组件关系图
┌─────────────────────────────────────────────────┐
│ @cloudflare/computer │
├─────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Workspace │◄──►│ Tools │ │
│ │ (SQLite + │ │ read/write │ │
│ │ Durable Obj) │ │ edit/ls/exec│ │
│ └──────┬───────┘ └──────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────┐ │
│ │ Execution Backends │ │
│ ├──────────┬──────────┬────────────────┤ │
│ │ Worker │ Worker │ Container │ │
│ │ JS │ Shell │ (Full Linux) │ │
│ │(ECMAScript│(just- │ (FUSE mount) │ │
│ │ modules) │ bash) │ │ │
│ └──────────┴──────────┴────────────────┘ │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ Security & Observability │ │
│ │ Permission Gates · Audit · Tracing │ │
│ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
2.2 Workspace:基于 SQLite 的虚拟文件系统
工作区是 @cloudflare/computer 的灵魂。它不是一个简单的文件存储,而是一个完整的虚拟文件系统:
存储层:运行在 Cloudflare Durable Objects 中。Durable Object 可以理解为带持久状态的 Worker 实例——它有自己独立的 SQLite 数据库,天然支持事务性操作。@cloudflare/computer 用 SQLite 作为文件系统的权威数据源,所以文件可以跨重启保留。
容量:每个工作区约 10GB,与对应 Durable Object 的存储配额共享。对于代码、文档和 Agent 任务产生的小型文件集合来说绰绰有余,但不适合搬入体积很大的单体仓库。
API:提供接近 node:fs/promises 的异步接口:
import { Workspace } from "@cloudflare/computer";
// 在 Durable Object 中初始化工作区
const workspace = new Workspace(ctx, env);
// 文件操作 —— 接近 node:fs/promises 的 API
await workspace.mkdir("/project/src");
await workspace.writeFile("/project/src/index.ts", `
import { createApp } from "./app";
const app = createApp();
app.listen(3000, () => {
console.log("Server running on port 3000");
});
`);
// 列出目录内容
const files = await workspace.ls("/project/src");
console.log(files); // ["index.ts", "app.ts", "utils.ts"]
// 读取文件
const content = await workspace.readFile("/project/src/index.ts");
console.log(content);
// 搜索文本
const results = await workspace.grep("createApp", "/project/src");
Git 集成:工作区内置 Git 客户端,可以克隆仓库、暂存改动和提交版本:
// 克隆一个 Git 仓库到工作区
await workspace.git.clone("https://github.com/user/repo.git", "/project");
// 查看变更
const status = await workspace.git.status("/project");
console.log(status); // { modified: ["src/index.ts"], untracked: ["new-file.ts"] }
// 暂存并提交
await workspace.git.add("/project", ["src/index.ts"]);
await workspace.git.commit("/project", "feat: add new endpoint");
// 推送
await workspace.git.push("/project", "origin", "main");
R2 集成:工作区还可以挂载 R2 存储桶中的只读文件,适合读取大型数据集或静态资源:
// 挂载 R2 桶为只读目录
await workspace.mountR2("/data", "my-bucket", { readOnly: true });
// 现在可以像读本地文件一样读取 R2 中的文件
const dataset = await workspace.readFile("/data/training-set.jsonl");
2.3 三种执行后端:各司其职
@cloudflare/computer 提供三种执行后端,开发者可以按任务选择,也可以在一个工作区中同时注册多个后端。
2.3.1 Worker Shell 后端(just-bash)
这是最轻量的后端。它在 Dynamic Worker 中用 just-bash(一个将 Shell 代码转换为 JavaScript 的工具)执行 Shell 命令,不需要容器或 Docker:
import { Workspace, WorkerShell } from "@cloudflare/computer";
const workspace = new Workspace(ctx, env);
const shell = new WorkerShell(workspace);
// 执行 Shell 命令
const result = await shell.exec("ls -la /project/src");
console.log(result.stdout);
// 管道操作
const gitLog = await shell.exec("cd /project && git log --oneline -5");
console.log(gitLog.stdout);
// 文件处理
const wordCount = await shell.exec("wc -l /project/src/*.ts");
console.log(wordCount.stdout);
适用场景:文件整理、文本处理、Git 操作、常见的命令行任务。启动速度极快(毫秒级),因为不需要启动完整的 Linux 环境。
2.3.2 Worker JavaScript 后端
在新的 Dynamic Worker 中执行 ECMAScript 模块,可以使用结构化输入和输出:
import { Workspace, WorkerJS } from "@cloudflare/computer";
const workspace = new Workspace(ctx, env);
const jsWorker = new WorkerJS(workspace);
// 执行 JavaScript 代码
const result = await jsWorker.run(`
const data = JSON.parse(await readFile("/data/config.json"));
const processed = data.items.filter(item => item.active);
await writeFile("/data/processed.json", JSON.stringify(processed, null, 2));
return { count: processed.length };
`);
console.log(result); // { count: 42 }
适用场景:数据转换、JSON 处理、需要结构化输入输出的任务。同样无需容器,启动速度快。
2.3.3 Container 后端(完整 Linux)
提供完整的 Linux 用户空间,可以运行真实二进制文件、Node.js、npm 和需要联网的命令:
import { Workspace, Container } from "@cloudflare/computer";
const workspace = new Workspace(ctx, env);
const container = new Container(workspace);
// 安装依赖
await container.exec("npm install express cors dotenv");
// 运行测试
const testResult = await container.exec("npm test");
console.log(testResult.stdout);
// 编译 TypeScript
await container.exec("npx tsc --build");
// 运行编译后的代码
const output = await container.exec("node dist/index.js");
关键技术:FUSE 挂载
Container 后端的精妙之处在于 FUSE(用户态文件系统)挂载。工作区文件通过 FUSE 挂载到容器中,容器内的文件修改会自动同步回 SQLite 文件系统:
Container 内部视角:
/project/src/index.ts ← 这是一个 FUSE 挂载点
/project/node_modules/ ← 这也是
/data/config.json ← 这还是
实际存储:
SQLite (Durable Object) ← 所有文件的真实归属地
这意味着:
- 轻量任务在 Worker Isolate 中完成(毫秒启动)
- 重负载任务交给 Container(完整 Linux)
- 无论在哪个环境操作,文件都是同一份
2.3.4 智能路由:让 AI 自己选后端
开发者可以在给 AI Agent 的工具描述中解释每个后端适合什么任务,让 AI 模型自己决定用哪个:
const tools = [
{
name: "exec_light",
description: "执行轻量级 Shell 命令,适合文件操作、文本处理、Git 命令。启动快,无 Docker 依赖。",
handler: (cmd) => shell.exec(cmd)
},
{
name: "exec_full",
description: "执行完整 Linux 命令,适合 npm install、编译、运行测试、启动服务。需要完整环境。",
handler: (cmd) => container.exec(cmd)
}
];
// AI 模型会根据工具描述自动选择:
// "git status" → exec_light(轻量)
// "npm test" → exec_full(需要完整环境)
2.4 安全与可观测性
这是 @cloudflare/computer 区别于「直接给 Agent 一个 Shell」的关键设计。
权限门控:可以限制 Agent 能读什么、能改什么:
const workspace = new Workspace(ctx, env, {
permissions: {
// 只允许读取特定目录
read: ["/project/src", "/project/tests"],
// 只允许写入特定目录
write: ["/project/src"],
// 禁止执行危险命令
denyExec: ["rm -rf", "chmod 777", "sudo"],
// 限制单次读取的字节数
maxReadBytes: 1024 * 1024, // 1MB
// 限制单次读取的行数
maxReadLines: 1000
}
});
审计日志:所有工作区操作都会被记录,方便事后复核:
// 查看 Agent 的操作历史
const auditLog = await workspace.getAuditLog({
since: "2026-08-03T00:00:00Z",
limit: 100
});
// 输出示例:
// [
// { timestamp: "2026-08-03T10:15:32Z", action: "read", path: "/project/src/index.ts", agent: "claude-sonnet" },
// { timestamp: "2026-08-03T10:15:35Z", action: "write", path: "/project/src/index.ts", agent: "claude-sonnet", bytes: 2048 },
// { timestamp: "2026-08-03T10:15:40Z", action: "exec", command: "npm test", agent: "claude-sonnet", exitCode: 0 }
// ]
观测性:集成 OpenTelemetry,可以追踪 Agent 的完整执行链路:
import { Workspace } from "@cloudflare/computer";
const workspace = new Workspace(ctx, env, {
tracing: {
enabled: true,
exporter: "otlp", // OpenTelemetry 标准
endpoint: "https://otel.example.com/v1/traces"
}
});
// 每个操作都会自动产生 trace span
// 可以在 Jaeger/Zipkin/Grafana Tempo 中查看
三、代码实战:从零搭建 Agent 工作区
3.1 项目初始化
# 创建项目
mkdir my-agent-workspace && cd my-agent-workspace
npm init -y
# 安装 @cloudflare/computer
npm install @cloudflare/computer
# 安装 Wrangler(Cloudflare CLI)
npm install -D wrangler
3.2 配置 wrangler.toml
name = "agent-workspace"
main = "src/index.ts"
compatibility_date = "2026-08-03"
compatibility_flags = ["nodejs_compat", "experimental"]
# Durable Objects 配置
[durable_objects]
bindings = [
{ name = "WORKSPACE", class_name = "AgentWorkspace" }
]
# Container 后端配置(可选)
[containers]
image = "node:20-slim"
3.3 实现 Durable Object
// src/index.ts
import { DurableObject } from "cloudflare:workers";
import { Workspace, WorkerShell, Container } from "@cloudflare/computer";
export class AgentWorkspace extends DurableObject {
private workspace: Workspace;
private shell: WorkerShell;
private container: Container;
constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env);
// 初始化工作区
this.workspace = new Workspace(ctx, env);
// 初始化执行后端
this.shell = new WorkerShell(this.workspace);
this.container = new Container(this.workspace);
}
// Agent 执行命令的入口
async execCommand(command: string, backend: "shell" | "container" = "shell") {
if (backend === "container") {
return await this.container.exec(command);
}
return await this.shell.exec(command);
}
// Agent 读取文件
async readFile(path: string) {
return await this.workspace.readFile(path);
}
// Agent 写入文件
async writeFile(path: string, content: string) {
return await this.workspace.writeFile(path, content);
}
// Agent 列出目录
async listDir(path: string) {
return await this.workspace.ls(path);
}
// 初始化项目模板
async initProject(template: string) {
if (template === "node-express") {
await this.container.exec("npx create-express-app /project");
} else if (template === "nextjs") {
await this.container.exec("npx create-next-app /project");
}
return { success: true, path: "/project" };
}
}
// Worker 入口
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
if (url.pathname === "/api/agent/exec") {
const { command, backend } = await request.json();
// 获取或创建 Durable Object
const id = env.WORKSPACE.idFromName("default-agent");
const stub = env.WORKSPACE.get(id);
const result = await stub.execCommand(command, backend);
return Response.json(result);
}
return new Response("Agent Workspace API", { status: 200 });
}
};
3.4 AI Agent 集成示例
// src/agent-integration.ts
import { Workspace } from "@cloudflare/computer";
// 定义 Agent 工具
function createAgentTools(workspace: Workspace) {
return [
{
name: "read_file",
description: "读取工作区中的文件内容",
parameters: {
path: { type: "string", description: "文件路径" }
},
handler: async ({ path }: { path: string }) => {
return await workspace.readFile(path);
}
},
{
name: "write_file",
description: "将内容写入工作区文件",
parameters: {
path: { type: "string", description: "文件路径" },
content: { type: "string", description: "文件内容" }
},
handler: async ({ path, content }: { path: string; content: string }) => {
await workspace.writeFile(path, content);
return { success: true };
}
},
{
name: "edit_file",
description: "编辑文件中的特定内容",
parameters: {
path: { type: "string", description: "文件路径" },
oldText: { type: "string", description: "要替换的文本" },
newText: { type: "string", description: "替换后的文本" }
},
handler: async ({ path, oldText, newText }: any) => {
const content = await workspace.readFile(path);
const updated = content.replace(oldText, newText);
await workspace.writeFile(path, updated);
return { success: true };
}
},
{
name: "list_directory",
description: "列出目录中的文件",
parameters: {
path: { type: "string", description: "目录路径" }
},
handler: async ({ path }: { path: string }) => {
return await workspace.ls(path);
}
},
{
name: "run_command",
description: "执行 Shell 命令(轻量任务用 shell,需要完整环境用 container)",
parameters: {
command: { type: "string", description: "要执行的命令" },
backend: { type: "string", enum: ["shell", "container"], description: "执行后端" }
},
handler: async ({ command, backend }: { command: string; backend: string }) => {
if (backend === "container") {
const container = new Container(workspace);
return await container.exec(command);
}
const shell = new WorkerShell(workspace);
return await shell.exec(command);
}
}
];
}
3.5 完整的 Agent 开发循环
// Agent 自主开发流程示例
async function agentDevelopmentCycle(workspace: Workspace) {
// 1. 克隆项目
console.log("📥 Step 1: 克隆项目...");
await workspace.git.clone("https://github.com/user/my-app.git", "/project");
// 2. 读取代码
console.log("📖 Step 2: 分析代码...");
const readme = await workspace.readFile("/project/README.md");
const packageJson = await workspace.readFile("/project/package.json");
// 3. 安装依赖(需要完整 Linux 环境)
console.log("📦 Step 3: 安装依赖...");
const container = new Container(workspace);
await container.exec("cd /project && npm install");
// 4. 运行测试,了解当前状态
console.log("🧪 Step 4: 运行测试...");
const testResult = await container.exec("cd /project && npm test");
console.log("测试结果:", testResult.stdout);
// 5. 修改代码
console.log("✏️ Step 5: 修改代码...");
const indexContent = await workspace.readFile("/project/src/index.ts");
const updatedContent = indexContent.replace(
"app.get('/')",
"app.get('/api/health', (req, res) => res.json({ status: 'ok' }));\n app.get('/')"
);
await workspace.writeFile("/project/src/index.ts", updatedContent);
// 6. 再次测试
console.log("🧪 Step 6: 验证修改...");
const newTestResult = await container.exec("cd /project && npm test");
console.log("新测试结果:", newTestResult.stdout);
// 7. 提交并推送
console.log("📤 Step 7: 提交并推送...");
await workspace.git.add("/project", ["src/index.ts"]);
await workspace.git.commit("/project", "feat: add health check endpoint");
await workspace.git.push("/project", "origin", "main");
console.log("✅ 开发循环完成!");
}
四、与竞品对比:Agent 运行时格局
4.1 容器方案 vs @cloudflare/computer
| 特性 | Docker 容器 | @cloudflare/computer |
|---|---|---|
| 启动时间 | 5-30 秒 | 毫秒级(Isolate)/ 秒级(Container) |
| 内存开销 | 50-500MB/容器 | 近零(Isolate)/ 按需(Container) |
| 文件持久化 | 需要 Volume 挂载 | SQLite 原生持久化 |
| 成本 | 按容器实例计费 | 按请求计费,空闲不收费 |
| 扩展性 | 受限于主机资源 | 全球边缘网络 |
| 安全隔离 | Namespace + Cgroup | Durable Object 隔离 |
| 适用规模 | 数百到数千 | 数百万到数十亿 |
4.2 与 E2B、Modal 等 Agent 沙箱的对比
E2B:提供云端沙箱环境,专注 AI 代码执行。优势是开箱即用,劣势是需要维护长期运行的沙箱实例。
Modal:提供 GPU 加速的 serverless 容器。优势是 GPU 支持,劣势是成本较高,启动时间较长。
@cloudflare/computer:优势在于极低的边际成本(Isolate 几乎免费)、持久化的工作区、以及三种后端的灵活组合。劣势是当前仍是 Preview 阶段,API 可能变化。
4.3 与 Cloudflare 自家方案的对比
Cloudflare 之前已经有 Workers(Serverless 函数)、Durable Objects(有状态对象)、Containers(完整 Linux 容器)。@cloudflare/computer 不是替代品,而是胶水层——它把这些底层能力组合成一个对 AI Agent 友好的高级接口。
之前: Workers + Durable Objects + Containers → 开发者需要自己组装
现在: @cloudflare/computer → 开箱即用的 Agent 运行时
五、性能分析与成本估算
5.1 性能基准
Worker Shell 后端:
- 冷启动:< 10ms
- 命令执行延迟:< 50ms(简单命令)
- 吞吐量:> 1000 ops/sec
Container 后端:
- 冷启动:2-5 秒(首次)/ < 500ms(热启动)
- 命令执行延迟:取决于命令本身
- FUSE 同步延迟:< 100ms
文件系统操作:
- 小文件读写:< 10ms
- 大文件(> 1MB):取决于文件大小
- 目录列表:< 5ms
5.2 成本估算
Cloudflare Workers 的定价模型对 Agent 场景非常友好:
免费额度(每日):
- 10 万次请求
- 10ms CPU 时间/请求
- 128MB 内存/请求
付费计划($5/月起):
- $0.30 / 百万次请求
- $0.02 / 百万 ms CPU 时间
- $0.12 / 百万 GB-s 内存
典型 Agent 工作场景成本估算:
假设一个 Agent 完成一次代码审查任务:
- 读取 10 个文件:10 次请求
- 执行 3 个命令:3 次请求
- 写入 2 个文件:2 次请求
- 总计:15 次请求 × $0.30/百万 = 几乎为零
对比容器方案(假设每个容器 $0.05/小时):
- 如果 Agent 每天运行 2 小时:$0.10/天 = $3/月
- 如果 100 个 Agent:$300/月
@cloudflare/computer 的成本优势在规模化时尤为明显。
5.3 10GB 限制的实际影响
每个工作区约 10GB,这对于大多数 Agent 场景足够了:
- 典型 Node.js 项目(含 node_modules):500MB-2GB
- Python 项目(含虚拟环境):200MB-1GB
- 大型 monorepo:可能需要拆分
对于超大型项目,可以考虑:
- 只克隆需要的子目录
- 使用
.gitignore排除不必要的文件 - 挂载 R2 桶存储大型数据集
六、生态与社区
6.1 Cloudflare 的 Agent 生态布局
@cloudflare/computer 不是孤立的产品,而是 Cloudflare 整个 Agent 生态的一块拼图:
Cloudflare Agent 生态:
├── Workers AI → AI 推理(本地运行模型)
├── AI Gateway → AI 代理网关(路由、缓存、限流)
├── Vectorize → 向量数据库(RAG 检索)
├── Durable Objects → 有状态存储
├── Containers → 完整 Linux 环境
├── @cloudflare/computer → Agent 运行时 ← 你在这里
├── Cloudflare Wallets → Agent 支付(虚拟钱包)
└── MCP Server → 工具协议接入
6.2 与 AI SDK 的兼容
@cloudflare/computer 的工具封装兼容 Vercel AI SDK,这意味着你可以直接用现有的 AI 框架:
import { generateText } from "ai";
import { openai } from "@ai-sdk/openai";
import { createAgentTools } from "@cloudflare/computer";
const tools = createAgentTools(workspace);
const result = await generateText({
model: openai("gpt-4o"),
tools,
prompt: "请在 /project 中创建一个简单的 REST API,包含 /api/users 端点"
});
// AI 会自动调用工具来完成任务
console.log(result.text);
七、局限性与展望
7.1 当前 Preview 阶段的限制
- API 可能变化:作为 0.1.x 版本,API 还不稳定
- Container FUSE 性能:大量安装 node_modules、解压大型归档或持续读写大文件会比容器原生磁盘慢
- 存储限制:10GB 工作区上限
- Region 限制:Durable Objects 目前在特定区域可用
7.2 未来可能的演进方向
- GPU 支持:为 AI 推理任务提供 GPU 加速的执行后端
- 多 Agent 协作:多个 Agent 共享同一工作区的协作编辑
- 快照与恢复:工作区状态的快照、分支和回滚
- Marketplace:预配置的工作区模板市场
- 与 Workers AI 深度集成:在工作区内直接运行本地 AI 模型
7.3 对行业的潜在影响
@cloudflare/computer 可能改变 AI Agent 的部署方式:
之前:每个 Agent 需要一个完整的服务器/容器 → 成本高、扩展难
之后:Agent 运行在边缘网络的 Isolate 中 → 成本低、全球扩展
这意味着:
- 独立开发者可以低成本构建和分发 AI Agent
- 企业可以为每个员工部署个性化 AI 助手
- AI Agent 可以像网页一样在全球范围内即时部署
八、总结
@cloudflare/computer 代表了 AI Agent 基础设施的一个新方向:用边缘计算的思路解决 Agent 的运行环境问题。
它的核心洞察是:
- Agent 需要持久的工作区,但不需要持久的计算环境
- 轻量任务应该在毫秒级 Isolate 中完成,而不是秒级容器
- 安全和可观测性应该是 Agent 运行时的一等公民
当前 0.1.1 版本还很早期,适合实验和原型开发。但它的架构方向是对的——当 AI Agent 成为互联网的一等公民时,它们需要的不是一台电脑,而是一间工作室。
MIT 许可证、开源、兼容 AI SDK、10GB 持久工作区、三种执行后端——如果你正在构建 AI Agent 平台,@cloudflare/computer 值得关注。
项目信息:
- GitHub:github.com/cloudflare/computer
- npm:@cloudflare/computer
- 许可证:MIT
- 当前版本:0.1.1(Early Preview)
- 发布日期:2026-08-03
快速开始:
npm install @cloudflare/computer