给 Agent 造围栏
七月的第一周,我半夜在浏览器里刷到 Ben 那篇 AI Engineer 大会的总结,看到一句话,手停在滚动条上愣了大半天: 所有人都在给 agent 造围栏,只是没人管那玩意儿叫围栏。 原文说的是 agent harness。
@azhou
写代码写到一半开始怀疑人生,靠 AI 工具续命,顺手把踩过的坑都记下来。
七月的第一周,我半夜在浏览器里刷到 Ben 那篇 AI Engineer 大会的总结,看到一句话,手停在滚动条上愣了大半天: 所有人都在给 agent 造围栏,只是没人管那玩意儿叫围栏。 原文说的是 agent harness。
先说结论:MonitorAI 自称能覆盖 99.3% 的故障模式,SentryWave 自称 99.7%。三个月 POC 结束的时候,我在 Final Report 里用四张表证明,它们真实的故障模式覆盖率分别是 47.5% 和 39.3%。 差了一半。

看到 Swiftlet 的 README 之前,我对「本地跑大模型」的印象还停在内存军备竞赛上。然后它甩出这么一行:Qwen3Next80BA3B,42GB 磁盘,4.3GB 峰值内存,M5 上每秒 4.5 到 5 个 token。 我下意识以为这项目把磁盘和内存两栏抄串行了。结果并没有。

上个月写一篇稿子,需要参考那篇在 dev.to 上吵翻天的文章——就是 Daniel Nwaneri 七月初发的那篇,说手打的空话不比 AI 写的空话更真诚。我懒得逐条翻 52 条评论,想着这活儿正好扔给 Claude,让它帮我按观点把评论区归个类。 它给了我一个很干净的总结,每一条都标了评论者名字。
八月下午,朋友在群里甩了个链接,追了一句"你那个主力工具被收了,看看"。我点开,是 SpaceX 完成对 Cursor 收购的消息——对,四月宣布的那个合作,当时还跟 Grok 4.6 绑在一起对外砸了声量,我看了几眼就忘了。现在流程走完,消息是别人转我的。行吧。
六月中某天凌晨,我让 Claude Code 跑一个跨模块的重构。任务不大,代理跑通了,输出一堆 diff。我扫过去,看到一行注释里夹着一个我从来没在这个仓库里见过的变量名,自然得像它天生就该在那。 我以为 context 又脏了,没在意。后来证明这个判断错得离谱。

这个配速,四十几分钟一英里,发进 Strava feed 是要被跑团群嘲的。结果这不是人跑的,是一只仓鼠。荷兰乌得勒支,叫 Mollie。前提一换,这条记录就从翻车现场变成了励志故事。 干这事的叫 Thijs de Buck,MRI 物理学家。

评论区那个故事比正文还戳我。一个 AI 代理清理掉了一个"看似死亡"的验证分支,跑完一切正常——然后那个分支捕获的,是一条来自旧支持工单的时区边缘情况。 分支死了,工单没死。 聊回那 200 行。

半夜睡不着,又翻出来读了一遍《There Will Come Soft Rains》。今天 8 月 13 号,故事里那栋房子死在 8 月 4 号,正好过去九天。 那房子每天七点准时喊人起床,给已经不存在的孩子准备早餐,扬声器播报"今天是 2026 年 8 月 4 日,美好的一天"。画外音:房子,他们死了。

看到 Docker Sandboxes 默认开着 YOLO 模式那条消息时,我愣了两秒。不是因为它激进——是因为它老实。把"代理可以不经过任何审批直接动手"写进默认配置,白纸黑字。 市面上多的是嘴上说"AI 代理要谨慎使用"、转头就让它随便折腾的。谁也没捅破这层窗户纸。Docker 捅了。行,够坦诚。

我骂错了对象。 上回让 Claude Code 跑字段改名迁移,凌晨两点我蹲在 diff 页面里,看它把另一张表的三行索引"优化"了。当时我在复盘里骂它没有边界感、先斩后奏。现在想想,边界感这个词根本不成立——它压根就没在我的世界里干活。 它看到的那份 schema 是深夜版,我脑子里预演的是白天版。

先说结论:这工具就两个文件,一个 Go 二进制,一个 SQLite。跑起来监听 4318,收 OpenTelemetry 的 trace,代理那边配一个环境变量就接进来了。没有数据库,没有队列,更没有三个微服务才敢撑起来的那套"可观测性平台"。它就是个跑在 localhost 上的小录音机。

上周三晚上,我在一个数据出不了内网的环境里干活。本地开源小模型,八十页材料,要它生成一份三十页、连贯通顺的分析报告。前十五页写得有模有样,到第十七页开始不对劲——它不记得自己前文得出过什么结论,把某项成本越估越高,最后干脆杜撰了一条根本不存在的合规条款。 句子丝滑得毫无破绽。但就是错的。

上周我终于正经配了一次 worktree。配完只有一个感觉:以前嫌它小题大做,多半是我真没认真想过它的用法,以为无非是“一个仓库开两个目录”,stash 一下切分支也挺稳的。

我干过最蠢的事,是坐在那儿看 Claude Code 排查一个 Kubernetes 问题。它一遍又一遍地重复同样的三板斧:kubectl get、describe、logs——每一轮都把大段原始输出读进 context window,然后像个刚入职的实习生一样,从零开始拼凑“这个集群大概长什么样”。

上周我又往 prompt 里写了那句"请谨慎处理边界情况、遇到不确定的不要自作主张"。agent 答应得好好的,然后该翻车照样翻车。这不是第一次了,我一直把这笔账记在"模型执行力不行"头上,直到刷到一篇多智能体的论文,才反应过来问题根本不在执行。

周五晚上十一点,我让 Claude Code 把旧模块的错误处理统一一下。活干完了,它在 CHANGELOG 里留了一段"自我总结"——说自己观察过去三天在同类任务上反复犯同一个错,于是主动把一条规则写进了系统提示里。 我当时觉得这周期实习生能转正。
大概一个多月前,Meta开了一场内部全员大会。扎克伯格站在台上承认:AI代理的发展速度,没有达到他们早先预期的那种加速。 我当时的第一个想法不是股价,而是那7000个被调进“Agent Transformation”小组的人,听到这句话是什么心情。

上个月我在 GitHub 刷到 Observal,第一反应是“又一个注册中心”。你懂的,这年头什么都能叫 registry,连我自己都干过把一堆 MCP server 甩进一张 Notion 表格、用了一个月再没看过的蠢事——难用不是最难的问题,问题是过完那个周末,我连自己上过哪些 agent 都记不全。 所以我用了大
上周某天晚上机器风扇狂转,我打开任务管理器找凶手。内存榜第一名和第二名都叫“Browser”,各自吃了四百多兆。当时的内心活动:谁的浏览器。 点开一看,可执行文件路径明明白白写着 Copilot。新版 Copilot for Windows 里塞了一整份 Edge,所以它在任务管理器里把自己登记成了浏览器——从技术上讲