Cloudflare 发布 @cloudflare/computer,一个动态在快速隔离环境和完整 Linux 容器间切换的 agent 运行时,解决大规模 agent 并发的资源和性能问题。
能力最强的 Agent 往往有一个简单的共同点:它们都有一台属于自己的计算机来工作。
Coding Agent 正是以这种方式工作的。你为它们提供文件系统、shell、工具、软件包,以及运行代码的能力。它们会检查环境、进行修改、测试自己的工作,然后继续推进。计算机为模型提供了一种熟悉的方式,让它能够对现实世界采取行动。在 Cloudflare,我们正努力提供合适的基础原语,用于构建能力最强的 Agent。
今天,我们发布 @cloudflare/computer 的早期预览版。@cloudflare/computer 软件包提供了一套 Agent runtime,由平台负责处理代码究竟运行在 isolate、容器 sandbox,还是 Web 浏览器中的具体细节与运行机制。每个 Agent 都会获得一台计算机,而 runtime 则会针对效率和可扩展性进行优化。
我们认为,为了满足 Agent 系统日益增长的计算需求,我们需要寻找传统容器化之外的解决方案。
在过去六个月里,我们见证了这条发展路线的一次微妙演进。今年年初,启动一个容器并在其中运行 Agent 还是主流做法。最近几个月,我们看到 Agent harness 迅速转向通过工具提供 sandbox 化的代码执行能力。这种方式将双手——完成工作的 sandbox——与大脑——Agent loop——分离开来。

无论 harness 运行在哪里,为每个 Agent 分配一个容器都会带来一项挑战:纵观所有云平台和超大规模云服务商,全世界的计算资源远远不足以让每家公司都为每位用户的每个 Agent 提供独立的容器化计算环境。这种方式无法扩展到数亿、乃至数十亿个并发 Agent。这也正是整个行业不顾一切、近乎恐慌地争抢 CPU 计算资源,而不仅仅是 GPU 计算资源的原因。
Cloudflare 长期以来一直致力于解决这个问题,并为此打造了一种效率更高的计算原语:isolate。差不多十年前,我们推出 Cloudflare Workers 时,就在行业尚未形成共识的情况下押注了这条路线。将近六年前推出 Durable Objects 时,我们又做出了同样的选择。我们之所以押注 isolate,是因为它们能够近乎无限地水平扩展。它们可以极快地启动和销毁;可以在 Agent 空闲时进入休眠状态;可以保存 Agent 自身的状态;甚至能够启动自己的 isolate 来运行不受信任的代码。isolate 是实现水平扩展的最佳方式,而 Agent 恰恰需要水平扩展。

去年,我们赋予了 isolate 启动自身容器 sandbox 的能力。从第一天起,Cloudflare 的架构设计就是让 Agent harness 运行在 isolate 中——也就是 Durable Object 中——并根据需要将挂载的容器作为工具调用。这样一来,只有在必要时才会使用更重型的计算原语,从而优化性能和成本。Durable Objects 可以近乎无限地水平扩展,而挂载的容器则让它能够通过垂直扩展执行任何任务。我们自己就是这样构建 Agent 的,也看到客户通过这种方式打造出了令人惊叹的产品。

但当我们审视构建 Agent 时必须使用多种底层计算原语——isolate 和容器——以及客户和开发者不得不在用户空间中自行组合它们的现状时,我们认为还可以做得更好。我们相信,可以提供一种更简单的抽象。
因此,我们首先将 @cloudflare/computer 作为开源库发布并启动这项实验,希望与那些不断突破大规模 Agent 运行边界的客户共同探索和学习。
@cloudflare/computer 软件包从一个简单的设想出发:如果我们为 Agent 提供一个预先准备好的文件系统,通过声明式方式定义其中的内容,包含当前任务所需的一切;同时再提供一组可以操作这些文件的执行环境,而每种环境在速度、能力和成本方面各有优劣,结果会怎样?
事实证明,如今的 Agent 在为当前任务选择合适环境方面,能力强得出人意料。只需要操作文件、处理数据或管理 git 仓库的任务,可以在 isolate 内运行。需要 Linux、npm 或原生二进制文件的命令,则可以在容器中运行。两者操作的都是同一批文件,并且这些文件会与源文件系统保持同步。

@cloudflare/computer 软件包提供了一个持久化文件系统,可用于 git 仓库、存储桶或你选择的任何文件。它提供了一组工具,让你能够通过 Code Mode 或 bash 命令读取、写入和编辑文件。所有操作都会受到权限控制,并接受审计和观测,让你既能精细控制允许 Agent 执行哪些更改,也能获得一条清晰的操作记录,了解 Agent 做过什么。
你可以在任意 Durable Object 上实例化一个 @cloudflare/computer workspace,为其提供虚拟文件系统和执行 runtime。
通过 npm 安装:
npm install @cloudflare/computer
它的主要使用场景,是将这套文件系统和工具提供给 Agent。例如,下面展示了如何在由 @cloudflare/think 驱动、用于分类处理 bug 报告的 Agent 上实例化 workspace。
import { Think } from "@cloudflare/think";
import { Workspace, type DurableObjectStorageLike } from "@cloudflare/computer";
import { createWorkersAI } from "workers-ai-provider";
export class Agent extends Think {
override workspaceBash = false;
override workspace = new Workspace({
storage: this.ctx.storage,
useThink: true, // soon will not be needed
});
override getModel() {
return createWorkersAI({ binding: this.env.AI })("@cf/zai-org/glm-5.2");
}
override getSystemPrompt() {
return `
You are a bug triage agent.
Use the project in /workspace/repo to reproduce the bug, inspect the
code, make a focused fix when it is safe, and run verification. In your
final answer, include what you changed, which commands you ran, and
whether verification passed.`;
}
}
@cloudflare/computer 软件包内置了多种执行 backend,你也可以编写自己的 backend。下面的示例接入了一个 Cloudflare Container。
import { Think } from "@cloudflare/think";
import { Workspace, WorkspaceProxy } from "@cloudflare/computer";
import {
CloudflareContainerBackend,
withWorkspaceContainer,
} from "@cloudflare/computer/backends/container";
export { WorkspaceProxy };
export class Agent extends withWorkspaceContainer(Think) {
override workspaceBash = false;
override workspace = new Workspace({
storage: this.ctx.storage,
useThink: true, // soon will not be needed
backends: [
new CloudflareContainerBackend({
container: () => this,
workspace: {
binding: "Agent",
id: this.ctx.id.toString(),
},
}),
],
});
/* Example code truncated for readability... */
}
将文件、git 和 shell 工具与产品专用工具一同暴露出来,以便回复已报告的 issue。
import { createAITools } from "@cloudflare/computer/tools";
import type { ToolSet } from "ai";
import { replyToIssue } from "./tools/github";
export class Agent extends withWorkspaceContainer(Think) {
override workspaceBash = false;
/* Example code truncated for readability... */
override getTools(): ToolSet {
return {
...createAITools({
workspace: this.workspace,
shell: {
defaultBackend: "container",
backends: {
container: {
description:
"Cloudflare Container with a full Linux userland: " +
"npm, node, package managers, test runners, and real " +
"binaries on $PATH. Use it when a task needs more than " +
"file manipulation.",
},
},
},
}),
replyToIssue,
};
}
}
模型可以在 Agent loop 中使用工具,但你也可以直接使用 workspace API,例如在向 Agent 提交 prompt 之前准备好运行环境。
export class Agent extends withWorkspaceContainer(Think) {
override workspaceBash = false;
/* Example code truncated for readability... */
async startTriage(report: { title: string; body: string; repoUrl: string }) {
await this.workspace.fs.mkdir("/workspace", { recursive: true });
await this.workspace.fs.writeFile(
"/workspace/BUG_REPORT.md",
`# ${report.title}\n\n${report.body}\n`,
);
await this.workspace.git.clone({
url: report.repoUrl,
dir: "/workspace/repo",
});
return this.submitMessages([
{
id: crypto.randomUUID(),
role: "user",
parts: [
{
type: "text",
text: [
`Triage this bug: ${report.title}`,
"The bug report is in /workspace/BUG_REPORT.md.",
"The repository is checked out at /workspace/repo.",
].join("\n"),
},
],
},
]);
}
}
你可以查看 workspace 仓库,了解如何使用不同 backend 和工具的更多示例,其中还包括一份从零开始构建 Agent 的分步教程。
@cloudflare/computer 的核心组件是 workspace。它是一个以 SQLite 为底层支撑的虚拟文件系统,可以从云存储、版本控制系统等多种来源填充内容。

workspace 支持可选的执行 runtime,允许代码针对该文件系统运行。所有 runtime 都支持同一个 exec(string, options) 接口。目前开箱即用地提供了两种 runtime,你也可以编写自己的实现:
基于 isolate 的 runtime 环境,使用 just-bash 将 shell 代码转换成 JavaScript,并在 dynamic worker 中运行。在这里,文件系统可以直接通过 worker bindings 访问。
容器 runtime,使用 Cloudflare Containers 提供完整的 Linux 环境。在这里,文件系统通过用户空间文件系统(Filesystem in Userspace,FUSE)进行挂载,确保文件可供容器访问,同时将更改同步回去。
Workspace 类提供了直接操作文件系统的 API 接口,同时还提供了与 node:fs 兼容的封装,因此可以轻松地与第三方 JavaScript 库配合使用。

为了与 Agent 配合使用,我们提供了一套兼容 AI SDK 的工具集,其中包含最常用的工具:read、write、edit、ls 和 exec。exec 工具有些特殊,因为它可以跨多个 runtime 工作,并接受一个 backend 参数。工具描述会引导 Agent 为当前任务选择正确的 runtime:要么使用快速、低成本的 worker backend,要么使用功能完整的容器。在我们的测试中,frontier model 非常擅长做出正确选择,并且只在确有必要时才回退到使用容器。
在 Cloudflare,我们已经看到 Agent 完全依靠 isolate,使用现代工具构建、测试和部署 JavaScript 应用;为每一位客户生成量身定制的文档;以及使用 Web 浏览器执行复杂任务。
我们对 @cloudflare/computer 的目标,是为 Agent 提供这样一套 runtime:容器只需要承担不到 10% 的工作,而编码任务、音视频处理和文档创建都可以由 isolate 完成。
现在就来试用早期预览版吧——我们迫不及待想听到你的反馈。