Cloudflare 开源 AI 办公系统 Cloudflare OS 深度解析:彻底解决 Agent 可能犯错,幻觉、越权、误操作等问题

Agent 想合并代码,人还没批,系统先骗它说合并好了。整套系统就是按「AI 一定会犯错」设计的
作者:lord.technology08-06 · 12 分钟⚑ 大佬观点 · 个人立场
🎧 听播客版0:00 / --:--
0:00 / --:--
深度 · 小互解读
一分钟速览
  • Cloudflare 把全公司用了三个月的 AI 办公平台开源了,每份文档背后都是一个你能随时改代码的独立小应用。
  • 最反直觉的一招:Agent 要合并代码,人还没批,系统直接回它「合好了」,再编一个分支给它接着干。
  • Jamie Lord 读完全部源码,结论是:这套系统的本质就是彻底不信任 AI。
  • 五道机制拆完还剩一笔账:拴住它、让它安全的那根绳,也正是让它拉不动多远车的那根。
⚑ 主线来自 Jamie Lord 的第三方剖析文章。文中每一处源码引用,本站都回 cloudflare/cloudflare-os 仓库逐条核对过;性能数字与「AI 不可能引入重大安全漏洞」这类话属于 Cloudflare 官方口径,已在出现处标明。
开篇

Cloudflare OS 是什么,为什么它默认 AI 一定会犯错

8 月 5 日,Cloudflare 把自家全公司用了三个月的 AI 办公平台 Cloudflare OS 整个开源了,你可以部署到自己的服务器上。

Cloudflare OS 是什么

每个员工一个 Agent 工作区装好了公司的资料和内部技能,让它查东西、写文档、做表格和幻灯片,也可以不做文档,直接派活给它。
能接上公司的系统干活GitHub、Google Drive、Slack、Notion、Linear、内部数据库,仓库里自带十六个连接器,接上就能读能写。
每份文档都是一个独立的小应用你建的每一份幻灯片、每一个表格,背后都是一份属于你自己的代码和数据库,缺什么功能张嘴让 Agent 加。
不懂技术的人也能放心写应用应用之间互相隔离,一个人写烂了波及不到别人,安全团队不用替他兜底。
模型可换、花销看得见Anthropic、OpenAI、Google、Workers AI 都能接,谁花了多少钱走同一个网关统计。
完全开源,不绑 CloudflareApache 2.0 协议,跑在同样开源的 workerd 运行时上,可以整个搬到自己的服务器。

Cloudflare 内部用了三个月,光最近 30 天就建出四千多个这样的小应用,销售团队估算省下一万多小时。

站内相关
Cloudflare 开源自家内部 AI 办公平台 Cloudflare OS:一个专门给全公司员工用的「AI 办公操作系统」
功能全貌和自己部署的步骤,那篇讲全了。

《Architecting on Cloudflare》的作者、英国 CDS 公司的解决方案架构师 Jamie Lord,对 Cloudflare OS 做了一次源码级的深度剖析。他发现:

核心发现

Cloudflare OS 的本质是「彻底不信任 AI」。它把 AI 可能犯错(幻觉、越权、误操作)当作必然的前提,并从系统底层架构上彻底封死 AI 破坏系统的可能。

传统思维

想办法让 AI 更聪明、更少犯错:写更好的 prompt,给它更多权限。

Cloudflare OS 思路

承认 AI 就是会一本正经地胡说八道和搞砸事情。既然无法保证它 100% 正确,那就把平台做成「金丝雀笼子」,让 AI 在里面以为自己有无限权力并高效干活,但真正的控制权(提交权)始终牢牢握在人类手里。

一句话价值:它示范了在大模型还不可靠的当下,如何通过能力模型(Capabilities)、轻量隔离(Isolates)和异步审批(Simulations),构建一套既能放手让 AI 自动化跑流程、又绝不会给企业带来安全灾难的下一代 Agent 操作系统架构。

这套设计的核心理念,可以拆解成下面五个关键机制。

前提:AI 一定会犯错 01 假装成功 人还没批,系统先告诉 Agent 已经办好了 02 沙箱隔离 每份文档一个单间,代码写烂也只烂自己那间 03 剥夺密钥 钥匙在看门人手里,Agent 只拿到几个能调的方法 04 追踪数据来源 记着它读过什么,分享前先查对方够不够格看 05 连人类贡献者也不信 外部 PR 超过十几行,直接关掉 五道机制拆开是五个安全特性,合起来是同一句话的五个推论。
本站按原文梳理绘制。往下五节,一节一道。
机制一

假装成功:人还没点同意,系统先骗 Agent 说已经办好了

做法
Agent 想干一件有后果的事,合并 PR、发邮件、往正式系统里写一行数据,必须走一个叫 Gatekeeper(看门人)的小服务。在人工审批通过之前,看门人会「说谎」,给 Agent 捏造一个「操作已成功」的虚拟环境。Agent 回头去读那个分支想确认,拿到的是一个「已经合并了」的假分支。
效果
Agent 以为搞定了,就着这个假状态继续往下算,把依赖这一步的后面三步都排上队。真实动作一件没发生,全排在队列里。人过一会儿来看这一批,一次性批准,或者一键废弃,废弃的话,Agent 在那个假前提上盖的所有东西一起没。
好处
解决了 AI 动不动就停下来等人点「允许」的卡顿感,又不会让它在未授权时真的动到外面的世界。Agent 拿到了自动批准的吞吐量,人保住了逐条审查的否决权。

这套做法写在给 Gatekeeper 开发者看的接口说明里:

建议看门人对尚未批准的动作做「模拟」,也就是说,Session 这个接口应该表现得就像所有动作都已经执行过了一样。

It is suggested that the gatekeeper "simulate" actions that have not been approved yet, that is, the Session interface should reflect the state of the resource as if all actions had been applied.
cloudflare/cloudflare-os · gatekeeper.ts
Agent 以为的世界(虚线)与真实发生的(实线) Agent 写代码、干活 合并这个 PR Gatekeeper 看门人 (钥匙在它这儿) 已合并 ✓(编的) 审批队列 · 真实动作押在这里 人 回来一次性放行或一次性扔掉 Agent 全程不停;真正写进世界的那一笔,握在人手里。
本站按源码接口说明绘制。虚线是 Agent 以为的世界,实线是真实发生的。

有一个细节值得说清楚:模拟并不是强制要求,做不做由各个 Gatekeeper 的作者自己决定。真正不能碰的红线是另外三条,每个操作都必须进审批队列、读取必须先过授权、有副作用的动作在批准之前绝不能真的执行。「假装成功」只是让 Agent 别卡住的一个可选优化。

这招数据库里早就有

它相当于把数据库的乐观并发(optimistic concurrency)搬到了现实世界的动作上:先假设不会出问题,让所有人一路往前干,最后提交时统一检查,冲突了整批作废。代价也一样:Agent 有相当一段时间是活在假状态里的,它以为办成的事,可能永远不会真的发生。但这不影响什么,它信什么不重要,最后真正写进系统的那一笔,握在人手里。

机制二

沙箱隔离:每份文档关在自己的单间里,代码写烂了也波及不到别人

做法
在 Cloudflare OS 里做一份幻灯片,系统会单独给你开一份实例,叫一个 gadget(小工具):自己的运行环境、自己的数据库、出网默认关闭。每一份文档,都是一个独立的沙箱(sandbox)进程,靠的是 V8 引擎的轻量隔离技术。
效果
安全边界从代码挪到了平台。过去二十五年,多租户软件的边界画在应用代码里:一个共用服务装着所有人的数据,WHERE 条件里少写一个 tenant_id,B 客户的数据就漏给了 A 客户。也就是说,安不安全全看代码写没写对。一个初级工程师状态不好的那一天,就是一次数据泄露。
好处
就算 AI 写的代码漏洞百出,也只能伤到它自己的主人,因为那个沙箱里根本没有第二个人可以泄露给。
过去二十五年:边界画在代码里 一个共用服务 A 的数据 B 的数据 C 的数据 D 的数据 少写一个 tenant_id,数据串到隔壁 Cloudflare OS:边界在平台上 A 的单间 B 的单间 C 的单间 D 的单间 同样的裂缝,撞在墙上停住 左边那道红线是同一个 bug,右边它没地方可去,因为那个盒子里没有第二个人。
本站按原文与官方 README 梳理绘制。

Cloudflare OS 的主导者、Cloudflare Workers 的作者 Kenton Varda,在发布当天的原话是:沙箱安全到你可以随便折腾,AI 不可能引入重大的安全漏洞;一家公司的安全团队可以放心让不懂技术的同事去 vibe coding,然后晚上睡得着觉。

他们放弃了让 AI 写对代码

他们没打算让 AI 写的代码变可信,而是干脆放弃了这个目标。安全从此不靠代码写得对:Agent 写成什么样,压根不再是个安全问题。

这个「每份文档一个隔离实例」的思路,来自 Kenton 十年前的创业公司 Sandstorm,当年没做成。为什么没做成,有两个说法。一是太贵:那时候只能拿容器做隔离,开一个实例的开销远比现在大。二是 Kenton 自己给的原因:世界还没准备好,没有足够多的人有本事或者有耐心去改自己的软件。两个原因凑一起才说得通,技术上终于便宜了,同时也终于有人会用了。

便宜了多少,官方给的数字是这样:

几百毫秒典型容器启动,吃几百 MB 内存
几毫秒一个 V8 isolate 启动,吃几 MB 内存
约 100 倍速度差距,内存效率差 10-100 倍

isolate 是 V8 引擎(Chrome 跑网页用的那个)开出来的轻量执行环境。剖析文章里说容器「冷启动要好几秒」,比官方口径夸大了一个数量级,本站按官方数字。

机制三

剥夺密钥:Agent 永远拿不到密钥,只能调几个规定好的方法

做法
给 Agent 开 GitHub 权限的常规做法,是塞给它一个 GitHub token,而 prompt 里的 token,最后可能出现在这个 prompt 的输出能到达的任何地方。Cloudflare OS 压根不把凭据给 Agent,钥匙留在看门人手里。Agent 拿到的是一个能调方法的对象,在代码里就写成 env.PROJECT 这样一行。
效果
给 GitHub 看门人配一个仓库,它能让 Agent 读 issue 但读不到源码,能把某些字段打码,能拒绝在没批准的情况下合并。Agent 可以调 listIssues(),但它看不见 token,没法自己把权限放宽,也没法越过手上这几个口子去碰网络。
好处
防的是 Agent 被 prompt 注入、或者写代码时不小心,把密钥漏出去。钥匙这东西,谁捡到谁就能开门。而这里给出去的更像一根牵狗绳:只够它干一件事,随时能收回,绳头始终在你手上。
常规做法:token 直接交给 Agent Agent 🔑 token 写进日志 跟着输出跑出去 留在下游某处 交出去就收不回来了。 Cloudflare OS:只给一根绳 Agent listIssues() 随时能剪断 看门人 🔑 钥匙在这 Agent 从头到尾没摸到过钥匙。
本站按原文绘制。左边那三条红线,是每个接过 MCP 服务器的人都担心过的事。

这套「只给方法不给钥匙」的做法有个正经名字,叫对象能力模型(object-capability),是个在安全圈子里研究了几十年的老思路。

机制四

追踪数据来源:系统记着 Agent 读过什么,分享前先查对方有没有资格看

做法
系统会记录 Agent 读过的每一条数据。当 Alice 把一个 gadget 分享给 Bob,系统挨个去问这个 gadget 碰过的每一个看门人:这个 gadget 从你这儿读走过的所有东西,Bob 自己有没有权限看?有一个说不行,Bob 就进不来。此后这个 gadget 每发起一次 Bob 没资格看的新读取,都会当场被拦掉。
效果
堵住的是这种泄露:Agent 读了一张敏感的营收表,做出一个实时看板。看板是个新东西,自己没有权限名单,一分享出去,就等于把那张表交给了所有能看见看板的人。这中间没有任何一个环节出错,但数据就是漏出去了。
好处
分享安不安全,不再取决于分享的人还记不记得这个看板背后是什么数据。
Alice 的 gadget 它读过下面三处 GitHub 仓库 Bob 能直接读 ✓ 共享日历 Bob 能直接读 ✓ 财务营收表 Bob 无权 ✕ Bob 想打开它 一个说不行,整扇门关上 系统查的是:他能不能直接读到这个 gadget 已经读走的每一样东西。
本站按仓库 docs/observers.md 描述绘制。Bob 每次打开都会重新校验一遍。

极速兜底(锁定模式):有些数据太敏感,现有的规则还没法精细描述该怎么管,那就干脆给它挂一个「禁止一切分享」的标志。gadget 只要读了一次这种数据,立刻掉进锁定模式,还能继续读,但从此不能通过任何一个看门人做任何一个动作,彻底封死泄密通路。代码注释里也承认这是个临时办法,以后要换成更精细的规则。

顺带一提,prompt 注入在这套架构里仍然没有解决。源码的待办清单里还写着两条想做没做的事:判断一次读取里有没有可能藏着注入攻击的自由文本,以及判断哪些人往这些内容里写过东西。

机制五

连人类贡献者也不信任:外部提交的代码超过十几行,直接关掉

做法
项目的贡献指南开门见山:现阶段不接受外部贡献。连改错别字这种 PR 都明说不要,超过十几行的也不要,会直接关掉并附上这条规则。
理由
在 AI 时代,写代码的成本极低,但审查代码、保证质量、维持产品连贯的成本极高。一份外部贡献等于捐赠了容易的那部分,同时制造了更多困难的那部分。
意味着
软件里稀缺的东西调转了:生产代码不再是瓶颈,为代码背书才是。

一份没人审过的贡献就是不可信输入,至于它是一个马虎的人写的还是一个自信的模型写的,几乎不重要。系统对 AI 的不信任,就这样延伸到了对人类贡献者的不信任。

代价

这套设计的代价:管得越死,它能帮你干的活越少

前面五道机制都很聪明。但它们有一个共同的代价:你把 AI 管得越死,它能帮你干的活就越少。具体是两件事。

第一,Agent 永远拿不到密钥,就永远干不了必须拿密钥才能干的活。比如让它自己去续费一个服务、去调一个没人提前给它开过口子的接口,它做不到。系统设计上就不给它这个能力,它只能在你提前圈好的范围里活动。范围之外的事,还是得人来。

第二,写操作永远要人批,等于人永远离不开这个流程。这套设计确实让你不用每一步都盯着,但那一批挂起的动作,最后还是得你来看、你来点。而 Agent 本来要解决的就是「不用人一直盯着」这件事。绕了一圈,人还在流程里,只是从「每一步都在」变成了「最后一步一定在」。

同一个 Agent,同一根绳,栓在同一个桩子上 好的那一面:它想往前冲,绳子把它拉住了 平台的约束 Agent 悬崖 冲不下去 坏的那一面:它想多干一点,同样被拽在原地 同一个桩子 Agent 要干的活 也拉不动 绳子短一分,安全多一分,能干的活少一分。这是同一个旋钮的两头。
本站按原文那句判断绘制的示意图。

一句话概括这个取舍:拴住它、让它不闯祸的那根绳,也正是让它拉不动多远车的那根。你不可能同时要最大的自主和最大的安全。Cloudflare 选了安全,而且选得很硬。他们赌的是:一个被拴着、但你敢放进公司用的 Agent,比一个自由、但你不敢部署的 Agent 更值钱。

还有一个矛盾:它谁都不信,唯独信自己

这套系统的逻辑是「谁都不能信」:AI 不能信,用户写的代码不能信,外面来的程序员也不能信。

但有一方例外,就是 Cloudflare 自己。

因为用来做隔离、做审批、做记录的那些技术(Workers、Durable Objects 这些),全是 Cloudflare 自家的东西,有几样甚至是专门为这个项目才做出来的,别处根本没有。于是这套「谁都不信」的系统,它自己的地基恰恰是「你必须信 Cloudflare」。

好在它整个开源,跑在同样开源的 workerd 运行时上,理论上你可以搬到自己的服务器,这一点已经比大多数同类产品强。但只要你用它,就得先接受这个前提。

最后:连造它的人都还没想好该怎么定义 Agent

仓库里有一张表,把 Cloudflare OS 的每个部件对应到传统操作系统上:内核对应什么、驱动对应什么、进程对应什么。前面几行都对得上,只有最后一行空着,写着三个问号。

传统操作系统Cloudflare OS
内核workshop-backend
设备驱动各个 Gatekeeper
shell(命令行外壳)workshop-frontend
进程gadget
可执行文件blueprint(蓝图)
用户用户
权限清单分享权限
???Agent

问号那一行的意思是:传统操作系统里,压根没有「AI Agent」这个东西。

它算不上普通用户:用户的权限是提前定好的,而 Agent 得对某个具体的人负责,权限还要随时收放。它也算不上普通程序:程序的代码是提前写死的,而 Agent 是现写现跑。

Cloudflare 给的答案是,这种东西最合适的管法是「你只能干我准许你干的这几件事」(也就是前面说的能力模型),而不是传统那种「你属于哪个组、有哪些权限」的清单。

但他们也没把这一行填上。这是一个新物种,连造它的人都还没想好该怎么定义它。

能带走的是那个模式,不是那套代码:读操作直接放行,写操作一律先挂起、给它一个模拟结果让它接着跑,真实动作攒成一批等你有空一次盖章。这个改法在任何自建 Agent 管线上都能做,专治「要么停下来等审批、要么关掉安全闸」的两难。
来源
Cloudflare OS is an architecture of distrustJamie Lord·lord.technology·2026-08-05
本站说明
原文没有配图,全部图示由本站按原文与源码绘制。文中源码引用均回 cloudflare/cloudflare-os 仓库逐条核对:模拟条款出自 packages/workshop-shared/src/gatekeeper.ts,读取追踪出自 docs/observers.md,锁定模式与注入待办出自 gatekeeper.ts,贡献政策出自 CONTRIBUTING.md。容器与 isolate 的性能数字采用 Cloudflare 官方口径(剖析文章中的「好几秒」与官方差一个数量级,未采用)。Kenton Varda 的表述引自其 2026-08-05 的发布帖。
↑ 正文结束
✓ 本篇全文免费开放

会员可复制、下载全文 Markdown,还能让你的 AI 订阅和提问。

阅读原文 ↗
📮 新解读第一时间进邮箱

读完觉得有用?留个邮箱,每篇新解读发布就送达,随时退订。