Agent跑完就失忆?Cloudflare这个开源项目给它装了块硬盘

上周我在做一个Agent小工具------帮我把每天的Hacker News热帖自动整理成周报。逻辑很简单:抓内容、做摘要、排Markdown、导出PDF。跑了一下午终于通了,满心欢喜关电脑。 第二天打开,中间产物全没了。临时目录被清掉,草稿、缓存、依赖,全部蒸发。 我盯着终端发了会儿呆,然后去翻Agent框架的文档------翻了一圈,发现压根没人讨论"文件存哪"这个问题。 正当我准备自己写个持久化方案的时候,我刷到了Cloudflare Computer。

给Agent一台不会丢文件的"电脑"

Cloudflare Computer是Cloudflare在8月初开源的项目,到今天(8月7日)GitHub已经快5000星了,连续两天挂在Trending第一。 一句话概括:它是一个住在Durable Object里的虚拟文件系统,让Agent像用一台真正的电脑一样读写文件、跑代码------而且关了再开,文件还在。 说实话,刚看到这个项目的时候我有点懵。Cloudflare不是做CDN的吗?怎么做Agent基础设施了?但仔细看完它的README和示例代码之后,我觉得这个方向确实戳到了痛点。

我们给Agent派活的时候,默认它"有一台机器"------能存文件、能跑命令、能积累进度。但实际上呢?大多数Agent跑在临时上下文里,状态散落在各种临时目录和会话历史中。你让Agent写一份报告,它在临时环境里跑完交付;你想改个版式,发现中间稿没了,只能从头来。 Cloudflare Computer的思路很直接:把"状态"和"算力"拆开。 权威状态统一放在Durable Object的SQLite里,这是唯一的事实来源。执行后端可以是容器、可以是Worker里的shell,也可以是纯JavaScript------按需选择,不用的时候不花那份钱。

这个设计哲学我觉得是对的。不是每个任务都需要一个完整的Linux容器。文件读写、数据处理、Git操作这些轻量活儿,用个Isolate就够了,只有需要npm install、跑原生二进制的时候才升级到容器。按官方说法,容器只承担不到10%的工作。

三种后端,按需选择

Cloudflare Computer提供了三种执行后端,这也是整个项目里最有意思的部分:

Container(容器模式) ------完整Linux用户空间,真实文件系统通过FUSE挂载,能跑任意二进制。这是最重的模式,冷启动几百毫秒,但功能最全。适合需要npm install、跑编译、或者需要完整网络访问的场景。

Isolate Shell(隔离Shell模式) ------在Dynamic Worker里跑一个just-bash,通过Workers RPC直接和文件系统通信,没有第二个存储、没有同步往返。适合跑简单的shell命令,比如catgrepwc -l这种。

Isolate JavaScript(隔离JS模式) ------直接在Dynamic Worker里执行一个ES模块,有结构化的输入输出,能访问node:fs/promises。这是最轻量的模式,适合纯数据处理。

三种后端共享同一个Workspace------你在Container里写了一个文件,Isolate Shell里立刻能看到,反过来也一样。不需要手动同步。 我花了一下午把三个示例都跑了一遍。说说踩坑的地方。

跑起来没那么丝滑

先说环境。Cloudflare Computer目前是个monorepo,用npm管理,核心包是@cloudflare/computer。安装倒是顺畅:

bash 复制代码
npm install @cloudflare/computer

但第一次跑Container模式就给我上了一课。 Container模式需要computerd------一个跑在沙箱容器里的守护进程,负责FUSE挂载和RPC通信。官方提供了一个预构建的Docker镜像@cloudflare/computer-computerd-linux-x64。我照着example里的步骤配好,一跑:

javascript 复制代码
Error: FUSE mount failed: operation not permitted

折腾了半小时才反应过来------我本地的Docker环境没开--privileged。FUSE需要内核级别的权限,不开特权模式根本挂不上。加上--privileged之后才跑通。

yaml 复制代码
# docker-compose.yml 关键配置
services:
  computerd:
    image: cloudflare/computerd:latest
    privileged: true  # 不加这行FUSE直接挂
    volumes:
      - workspace-data:/workspace

这个问题在README里没有明确提,至少在文档里我没找到醒目的提示。对于第一次接触的人,这个坑大概率会踩。 Isolate Shell模式倒是顺畅。just-bash是个纯JS实现的bash子集,不需要容器,直接在Worker里跑。我试了几个基本命令,响应速度比Container快不少------毕竟少了容器启动和FUSE同步的开销。

javascript 复制代码
// 一开始我直接 exec 拿 stdout 就往 Response 里塞
// 结果返回的是 "18\n" 带换行符,Response 直接炸了
// 后来加了个 trim 才搞定------这种小坑文档里根本不会写
import { Workspace } from '@cloudflare/computer';

export default {
  async fetch(request, env) {
    const ws = new Workspace(env.WORKSPACE);
    await ws.fs.writeFile('/hello.txt', 'Hello from Agent!');

    const result = await ws.runtime.exec('cat /hello.txt | wc -c', {
      backend: 'worker-shell'
    });
    const count = result.stdout.trim(); // 别忘 trim

    return new Response(`字节数: ${count}`);
  }
}

Isolate JavaScript模式我用来做了一个简单的文本处理------把一段Markdown转成纯文本。ES模块直接在Worker里执行,通过node:fs/promises读写文件,全程没有shell开销。

javascript 复制代码
// worker-javascript 模式执行的任务模块
import { readFile, writeFile } from 'node:fs/promises';

export async function main(input) {
  const content = await readFile(input.file, 'utf-8');
  const plain = content
    .replace(/#{1,6}\s/g, '')
    .replace(/[([^]]+)]([^)]+)/g, '$1')
    .replace(/[*_~`]/g, '');

  await writeFile(input.file + '.txt', plain);
  return { lines: plain.split('\n').length };
}

这套"同一个文件系统、三种执行方式"的设计确实灵活。想象一下:Agent先用Isolate JS做数据处理(快且便宜),遇到需要pandoc转PDF的步骤切到Container(功能全),中间的文件完全不用搬运。

先说清楚:这玩意儿还没法上生产

Cloudflare Computer目前还是PREVIEW状态,README开头就写得很明确:

PREVIEW ONLY --- APIs are unstable and the design is subject to change. Suitable for experiments, exploration and prototypes. It is NOT suitable for production use at this time.

我跑example的过程中也确实碰到了一些粗糙的地方。比如examples/think是一个基于@cloudflare/think的聊天Agent示例,我照着README配置好之后,第一次启动等了将近10秒才有响应------后来发现是Durable Object冷启动的问题,第二次就快了。 另外,整个项目的文档目前是"forward-looking"的------它描述的是设计意图,而不是当前代码的实际状态。有些API在文档里有,代码里还没实现;有些代码里有的功能,文档里没写。对于想深入使用的人,直接看源码比看文档靠谱。

这东西到底适合谁

说说我的判断。 如果你是做Agent产品的,尤其是需要Agent长时间运行、积累中间产物的场景(比如代码生成、文档处理、数据分析流水线),Cloudflare Computer值得关注。它解决的不是"Agent聪不聪明"的问题,而是"Agent有没有一个稳定的工作环境"的问题。 这个区分很重要。我们讨论Agent的时候,总在想模型能力、推理策略、工具调用------但很少有人关注"Agent在哪干活"。就像你招了一个很聪明的实习生,但没给他分配工位、没开电脑账户,他只能在大厅地板上写代码,每天下班东西就全清了。

Cloudflare Computer本质上就是给Agent分配了一个云端工位:有文件柜(SQLite)、有电脑(三种执行后端)、有门禁(权限控制)。而且这个工位是在Cloudflare的边缘网络上,全球可用、延迟低。 但它现在还不适合生产。API不稳定、文档不完善、预览状态------这些都是事实。我的建议是:现在开始关注、开始试玩、开始理解它的设计思路,但别急着往生产环境里塞。

为什么我觉得这事值得关注

Cloudflare做这个项目,让我意识到一件事:Agent基础设施的竞争,可能比模型能力的竞争更值得关注。 现在大家都在卷模型------参数量、推理能力、Benchmark分数。但当Agent开始真正干活的时候,它需要的不只是一个聪明的大脑,还需要:文件系统、执行环境、持久化存储、权限管理、资源调度......这些东西目前还很原始。

Cloudflare Computer不是唯一一个试图解决这些问题的项目。TencentDB刚开源了Agent-Memory做Agent记忆管理,Addy Osmani的agent-skills在做可复用的Agent技能库。这些项目加起来,正在构建一个Agent的"操作系统层"。 这个层面目前还没有赢家。Cloudflare Computer开了一个好头,但它要走的路还很长。

如果你也在做Agent相关的东西,建议现在就去翻翻它的源码,设计思路值得参考。等正式版出来,我再写一篇实测。现在这个状态,玩玩可以,别当真。

相关推荐
404NotFOund1 小时前
小白本地部署微调耍起
机器学习·开源
Goodbye2 小时前
React + TypeScript 企业级开发实战:从类型约束到组件架构演进
typescript
烬羽2 小时前
组件拆了,逻辑没拆——自定义 Hook 才是 React 业务逻辑的正当归属
react.js·架构·typescript
今日无bug2 小时前
Bun 入门:零配置 JS/TS 运行时 + 包管理器
typescript·bun
戒了,最后一次2 小时前
WorkBuddy 切换账号后一键恢复对话记录:开源迁移工具 workbuddy-account-migrate 实战
开源
TunerT_TQ3 小时前
Valhalla 静态工程审阅 |OpenClaw 源码证据驱动评测【开源基础设施特辑】
开源
TunerT_TQ3 小时前
Valhalla 静态工程审阅 |PilotDeck 源码证据驱动评测【开源基础设施特辑】
开源
AI产品库3 小时前
2026年8月双响:ChatGPT免费版文本不限量,Qwen3.8-Max开启开源旗舰时代
chatgpt·开源
开源推荐官3 小时前
2026多商户B2B2C开源商城系统对比:Tigshop/CRMEB/NiuShop不止看开店功能
开源