循环工程:在验证成本低廉处,循环才能取胜
打造 Claude Code 的工程师 Boris Cherny,白天会同时开着五到十个会话、跑着几百个代理,而每天夜里则有几千个代理在运行。2上周,一段他说”我不再给 Claude 写提示词了……我的工作是写循环”的视频片段在 X 上传开,大多数评论都把这句话当成了关于自主软件开发的预言。没过几天,Addy Osmani 就以此为名提出了一门学问:循环工程(loop engineering)。7我把那段片段背后三场演讲的完整文字记录都翻了出来。这些记录讲的是一个更平静的故事,而恰恰是这个平静的版本才值得在其上构建:Cherny 真正点名的每一个循环,都有一个机器可以免费检验的成功条件。决定你能自动化什么的,是验证成本,而非循环本身的搭建。我从 2 月起就在生产环境中运行循环,我的日志与这些文字记录所言一致——其中还包括两次让我以惨痛方式学到这一课的事故。
太长不看 / 要点速览
- 这句病毒式传播的话出自 Cherny 在 Acquired Unplugged 的访谈,他把循环描述为一条连续谱上的下一步:从打孔卡到汇编,到高级语言,再到提示词。1他给这一过渡设定了很短的保质期:”接下来这几个月,也许会持续到今年年底。”1
- 其机制刻意做得平淡无奇。在 Sequoia 的演讲中,Cherny 把
/loop描述为 Claude 用 cron 来调度一个重复执行的任务。2他点名的几个循环负责照看拉取请求、维持 CI 健康,并每 30 分钟对 Twitter 上的反馈做一次聚类。2 - 这些循环无一例外都是”打扫卫生”式的。每一个都有一个机器可检验的终止状态:CI 变绿、PR 完成 rebase、反馈完成聚类。他点名的例子里,没有一个是在无人值守下构建新功能。
- 写循环这份活计本身,已经在溶解进模型之中。Cherny 称,更新的模型会主动发起循环,他还把用户侧的循环搭建称为”一个产品设计问题”,意味着”我没把这件事做好”。5
- 这个迷因之下真正持久的技能:判断什么可以安全地无人值守自动化。这个判断关乎可验证性,而且在循环语法消失之后,它依然属于你。
他究竟说了什么
人人转发的那段片段来自一场 Acquired 的现场访谈。Cherny 用家族史为这句话作了铺垫:他的祖父在苏联用打孔卡编程,他的父亲写汇编,”要是看到我写 Python,准会笑话我”。接下来才是传开的那部分:
“这某种程度上就是编程的本质:抽象层级总是在不断上升……一年前我写代码的方式,是在 IDE 里借助某种自动补全来敲代码。到了 11 月,我卸载了 IDE,因为我根本没在用它……那时候,我大概同时跑着五到十个 Claude,而我所谓的写代码,就是给 Claude 写提示词让它写代码。现在又升了一级……我已经不给 Claude 写提示词了。我有一些正在运行的循环。是它们在给 Claude 写提示词,自己琢磨该做什么。我的工作就是写循环。”1
完整的 Acquired Unplugged 访谈;关于循环的那段从 11:14 开始。
完整记录中有两个细节始终没出现在那些片段里。其一,Cherny 自己为这一过渡标注了时间:循环是”我们接下来这几个月、也许会持续到今年年底”会看到的东西。1他描述的是一个阶段,而非一个终点。其二,为所有想梳理这场讨论脉络的人附一条出处上的提醒:不少病毒式传播的帖子把循环这部分内容归到了他长达一小时的 Y Combinator 播客那一期。我查了那一期的完整记录,里面对循环只字未提;那期讲的是产品的起源故事和子代理。6真正的实质内容在 Acquired 访谈和一场 24 分钟的 Sequoia 演讲里。
一个循环就是一个 cron 任务
Sequoia 的演讲提供了机制层面的细节,而这些细节是刻意做得乏味的:
“它无非就是让 Claude 用 cron 调度一个将来某个时刻执行的任务,而且是个重复任务。它可以每分钟跑一次、每五分钟跑一次,或者每天跑一次。”2
Sequoia 演讲补全了病毒式片段略去的每一处机制细节;循环那一段从 7:56 开始。
Cherny 跑着几十个这样的循环。他点名的有:一个照看他 PR 的循环(修复 CI、自动 rebase)、一个维持 CI 健康的循环(它会修复不稳定的测试),以及一个每 30 分钟从 Twitter 拉取反馈并聚类的循环。2Routines 在 5 月 Anthropic 的 Code with Claude 活动上发布,它把同样的模式搬到服务器端,让循环在合上笔记本后仍能存活。2为这场主题演讲做实时记录的 Simon Willison,记下了 Anthropic 自己采用的措辞:Routines 是”高阶提示词”。12几个月来,Cherny 一直在告诉别人,/loop 和 /schedule 是这款产品里最强大的两个功能;他那个经典的入门示例,是一个每五分钟照看 PR 的循环。11
这种模式有一个更粗糙的”祖先”。Geoffrey Huntley 的 Ralph Wiggum 技法,用他自己的话说,就是”Ralph 是一个 Bash 循环”:一个 while true,永远把同一个提示词文件喂给代理,迭代之间的进度则保存在文件和 git 历史里。9如今 Anthropic 已把 Ralph 作为官方插件发布,它会拦截代理试图退出的动作,并不断重新喂入提示词,直到出现某个完成字符串、或触及迭代次数上限。9The Register 证实 Cherny 本人也在用 Ralph,并援引了 Huntley 关于这套经济账走向何方的警告:创业公司会用这套技法去克隆现有的 SaaS 业务并以低价抢食,因为代理式编程的成本大约是每小时 10 美元。10这条脉络之所以重要,是因为它揭示了这个想法真正的”年纪”:循环是计算领域里最古老的控制结构,这个构造本身毫无新意可言。15
他点名的每一个循环都是打扫卫生
这里有一个被这场讨论略过的观察。把 Cherny 的循环再列一遍,看看它们各自的终止状态:
| 循环 | 成功条件 | 由谁来检验 |
|---|---|---|
| 照看 PR | CI 变绿、分支完成 rebase | CI、git |
| 维持 CI 健康 | 测试套件通过 | 测试套件本身 |
| 聚类 Twitter 反馈 | 报告按时交付 | 无需任何人;它只提供信息,不采取行动 |
它们每一个,要么有一个机器可检验的成功条件,要么产出的是出错也无关痛痒的结果。他点名的例子里,没有一个是”趁我睡觉时把功能建出来”。这位每晚运行着几千个代理的人,把他个人的自动化描述为修 CI、做 rebase 和反馈分流。
那个看似的反例,恰恰印证了规律。Anthropic 自家的工程团队让 16 个代理在无限循环里跑了两周,产出了一个 10 万行的 Rust 写的 C 编译器,算力成本约为 2 万美元。8编译器是软件中最可验证的产物:一套庞大的程序测试集,要么能正确编译运行,要么不能。团队挑的正是一个验证几乎免费的目标,而即便如此,主持这项实验的 Nicholas Carlini 仍写道,程序员部署自己从未亲自验证过的软件,是”一个真切的隐忧”。8
Addy Osmani 为这门学问命名为”循环工程”的那篇文章,从设计这一侧落到了同一个约束上:”一个无人值守运行的循环,也是一个无人值守地犯错的循环。”7他提出的架构(用单独的验证代理,这样制作方永远不会给自己的活打分)正是一种尝试:在验证不会天然便宜的地方,人为地制造出廉价的验证。7
我自己的循环教会了我什么
我在 2 月写过我那套通宵运行的代理系统,那时候,对这套技法还客气地用一个《辛普森一家》的梗来称呼。16从那以后,我这套设置里活下来的循环,无一例外都收敛到了同一种形态,而那些失败的循环,教给我的比成功的还要多。
幸存者都是”检查”形态的。一个夜间循环会读取当天的提交,把改动过的文件映射到线上 URL,加载每一个受影响的页面,然后连同加载时间一起报告通过或失败。一个安全循环整夜盯着各个端点,并在清晨写出一份简报。一个抓取循环会读取 Googlebot 和 Bingbot 在我各个站点上的活动,并报告索引收录的漂移。这些循环都不创造任何东西。每一个都只是观察、与预期状态比对,然后报告。当某个循环出岔子时,代价不过是一份过期的报告,而非一个坏掉的产品。早上读这些报告只需几分钟,因为每一项的输出都是二元的:通过、失败、看这里。
失败的,都是那些会”动手”的循环。有一个隔离功能,会为并行代理自动创建 git worktree,它两次删掉了它擅自判定为可丢弃的临时目录;这套自动化的杀伤半径,波及了它既没创建、也不理解的文件。有一次,一个定时缓存清除任务相对于部署以错误的顺序执行,搜索爬虫在 11 小时里一直为本就存在的页面收到 404,因为这次清除在源站交付替换内容之前,就把正确的缓存响应给驱逐了。16这两次失败都不是模型的错。两次都源于我把写权限授予了一个我尚未把前置条件钉死的循环。如今它们各自都加了一道护栏:worktree 自动化被直接封禁,而清除任务只在部署验证通过之后才运行。我从中提炼出的通则是:一个只读的循环需要一张时间表;一个会写入的循环,在配得上一张时间表之前,需要一份顺序证明和一个杀伤半径上限。
这条通则也解释了 Cherny 那套设置里人们最难以置信的那部分。”现在其实我大部分工作都在手机上完成,”他说,他通过 Claude app 里的 code 标签页来运行会话。2手机是个糟糕透顶的看代码的地方,却是个不错的读”通过/失败”报告的地方。这个”用手机”的说法,实则是一个伪装过的验证主张:他的循环所发出的输出,清晰到足以一眼就接受或否决——而这只有在循环开跑之前就设计好成功条件时才有可能。
验证成本的阶梯
如果这个论点成立,那么选择自动化什么就归结为一个问题:由谁来验证结果,以及这次验证的成本是多少?下面是我在让任何一项任务上时间表之前所用的阶梯。
| 任务 | 验证者 | 验证成本 | 可否无人值守运行? |
|---|---|---|---|
| 监控与报告生成 | 无需;输出只供参考,无人据此采取行动 | 免费 | 可以,今晚就行 |
| 给已通过的 PR 做 rebase | CI 重跑套件 | 免费 | 可以,今晚就行 |
| 修复一个不稳定的测试 | 测试套件本身 | 免费 | 可以,今晚就行 |
| 依赖版本升级 | CI 加上读一遍 changelog | 低 | 可以,配一个检查代理 |
| 带复现用例的 bug 修复 | 那个先写好的复现测试 | 低 | 可以,采用制作—检查分离 |
| 新功能 | 由人来读 diff | 高 | 不行;循环把活排队等待评审 |
| 架构变更 | 由人来,跨越数月 | 高到难以承受 | 永远不行 |
起决定作用的是第二列,而任务难度从未在其中现身。一个有免费验证者的难活(那个不稳定的测试),会比一个验证成本高昂的易活(一行需要人来批准的文案改动)先被自动化。Cherny 的循环、Anthropic 的编译器,以及我那些幸存者,统统坐落在阶梯的上半部分;而病毒式的评论假定的却是下半部分。
无论规模大小,能熬过这道阶梯的形态,看起来都像同一种监督者模式:
一个配得上时间表的循环的解剖。验证者画得更粗,因为它是那个承重的方框:把它移走,循环照样运行,但没人知道它干了什么。
最小的、值得一跑的循环是只读、自验证、且一眼可读的——这让它今天就能放心地写出来,明天看起来又乏味到不必盯着:
# Nightly site check: observes and reports, never edits.
# Run it under a permission mode that blocks writes outside reports/.
while true; do
claude -p "Read today's commits. For each changed file that maps to a live
page, fetch the staging URL and confirm it returns 200 and renders its
headline. Append PASS or FAIL per page, with the reason, to
reports/site-check-$(date +%F).md. Write nothing outside reports/."
sleep 86400
done
在 Claude Code 内部,同样的循环只需一行:/loop 24h,后面跟上指令。晋级是后话。等这份报告乏味地运行了一个月之后,这个循环才赢得了被纳入阶梯下一级考量的资格——绝不能更早。
剩下的那份工作
Sequoia 演讲里最离奇的一段,反倒拆穿了它催生出的那个迷因。Cherny 说,更新的模型开始未经要求就主动发起循环:他请它做一次数据查询,模型注意到这些数据会随时间变化,便提议每 30 分钟生成一次周期性报告,还自己动手把报告接进了 Slack。5他的结论是:”该怎么把工具用得更顺手,这不该是用户的负担……这其实是个产品设计问题,而我没把它做好。”5怀疑者在 X 上提出的那个无穷回退论证(如果今天是人写循环,那明天就是模型写循环)结果竟是 Anthropic 的路线图,还由这个迷因所指向的当事人亲口承认了。
他更进一步:”随着模型越来越好,执行环境某种程度上变得越来越不重要,”他预言,随着对齐的改善,权限模式、提示词注入防御以及人在回路的检查点都会淡出。3这笔交易的另一半,我要站到对立面去。安全脚手架或许会收缩。但按他自己的说法,编排脚手架正在变成全部的工作:Anthropic 工程师的代理们会在各自的主人工作时通过 Slack 相互协调,而且”我们公司任何地方都不再有手写的代码了。所有的 SQL 都是模型写的。”4总得有人来决定这些代理可以碰什么、什么才算完成、以及当两个代理意见相左时该怎么办。那个做决定的层,才是真正的代理接口,而 cron 不过是其中容易的那部分。
所以,持久的技能不是循环语法——模型已经在吸收它了;也不是写提示词——循环早就把它吸收掉了。持久的技能,是垫在这两者之下的那个判断:判断什么可以安全地无人值守自动化。 这个判断永远是一个关于验证成本的问题。修 CI 之所以最先被自动化,是因为测试套件本就是那个验证者。反馈聚类之所以被自动化,是因为出错毫无代价。功能开发之所以顽抗,是因为验证仍要付出一个人读 diff 的代价;Hacker News 上一位资深工程师把由此而来的陷阱说得明明白白:这个工具需要娴熟的判断力来驾驭,而使用这个工具,恰恰会侵蚀的正是那份判断力。14
Casey Newton 在 Platformer 对 Cherny 的访谈,标题是”Claude Code 的缔造者谈软件工程师的终结”。访谈中,Cherny 预言,到年底”软件工程师”这个头衔会溶解成类似”构建者”的某种称谓,与此同时,通过代理写代码的人数会增长百倍。13在那个预测里,构建者就是那些挑选循环的人。挑得好,意味着在任何东西开跑之前,就已经知道你将如何确认它成功了。
要点速览
对于运行编程代理的工程师: - 按验证成本、而非按兴奋程度来审视你那些自动化的候选项。修 CI、做 rebase、监控和报告生成,今天就有免费的验证者;先自动化这些。 - 套用读/写之分:一个只读循环需要一张时间表,而一个带写权限的循环,在无人值守运行之前,需要一条明确的顺序约束和一个杀伤半径上限。 - 先设计报告,再写循环。如果你没法在 10 秒内从手机上否决掉循环的输出,那这个循环就还没准备好在夜里运行。
对于团队负责人: - 决定有效并行规模上限的,是你的评审带宽,而非你的代理数量。在那个上限之上再添代理,产出的是无人评审的合并,而不是吞吐量。 - 把制作者和检查者分开。一个代理验证自己的活,是在自说自话地声称正确;而一个视角不同的独立验证者,至少有机会逮住这个声称。
对于工具构建者: - Cherny 把用户侧的循环搭建称作一次产品设计的失败,而模型自己已经在主动发起循环了。5去构建写循环的 UX,等于是在为一个模型厂商打算自己吞掉的层做开发。寿命更长的那个界面是验证:证据、追踪,以及接受/否决的人机工效。
常见问题
什么是循环工程?
循环工程是这样一种做法:编写一些小型的定时程序,由它们给编程代理写提示词、检查结果,并决定是否再跑一次,以此取代手动给代理写提示词。Addy Osmani 在 2026 年 6 月、于 Boris Cherny 那场"我的工作是写循环"的访谈之后,为这门学问命了名。难的地方不在循环本身:而在于挑选那些结果可被机器验证的任务。
Boris Cherny 真的说过工程师应该停止写提示词吗?
他说的是他个人不再写提示词了,因为循环代他给 Claude 写提示词;而且他把这一转变描述为一个历经数月才到来的过渡,而非一种永久状态。他点名的每一个循环,自动化的都是带有机器可检验结果的维护工作(修 CI、做 rebase、反馈聚类),而非开放式的功能开发。
循环和代理有什么区别?
代理是干活的那个:一个带工具、正在尝试完成某项任务的模型。循环是那个监督者:一个小型的定时程序,它启动代理,拿结果对照某个条件来检查,然后要么停下,要么再来一次。Cherny 的版本用 cron 当调度器,用 Claude 当干活的。
该从哪里开始上手代理循环?
从一个不会弄坏任何东西的循环开始:一个定时检查,把你所拥有的某样东西的线上状态与你的预期作比对,然后报告差异。只有在一个循环的各种失败模式都有了名字、它有了一条顺序约束、并且它的杀伤半径有了上限之后,才把它晋级到拥有写权限。
参考资料
-
Acquired, “Boris Cherny: Claude Code & the Future of Engineering | Acquired Unplugged presented by WorkOS,” YouTube. “我的工作是写循环”这句话(≈11:14)、11 月卸载 IDE、打孔卡到汇编的连续谱框架,以及”接下来这几个月、也许会持续到今年年底”这一时间线的出处。引文已对照作者用 Whisper(large-v3-turbo)对源音频所作的转写核验。 ↩↩↩↩
-
Sequoia Capital, “Anthropic’s Boris Cherny: Why Coding Is Solved, and What Comes Next,” YouTube. 手机优先的工作流与 Claude app code 标签页(≈7:20)、会话与代理数量(≈7:34)、
/loop作为 cron 调度的重复任务(≈7:56)、点名的照看 PR、维持 CI 健康与 Twitter 聚类循环(≈8:16),以及作为服务器端版本的 Routines(≈8:42)的出处。引文已对照作者用 Whisper(large-v3-turbo)对源音频所作的转写核验。 ↩↩↩↩↩↩↩ -
Sequoia Capital, “Anthropic’s Boris Cherny: Why Coding Is Solved, and What Comes Next,” YouTube, ≈14:14. “随着模型越来越好,执行环境某种程度上变得越来越不重要”,以及权限模式与人在回路机制会随对齐改善而淡出这一预测的出处。引文已对照作者用 Whisper 对源音频所作的转写核验。 ↩
-
Sequoia Capital, “Anthropic’s Boris Cherny: Why Coding Is Solved, and What Comes Next,” YouTube, ≈18:17. 代理通过 Slack 相互协调,以及”我们公司任何地方都不再有手写的代码了。所有的 SQL 都是模型写的”的出处。引文已逐字对照作者用 Whisper 对源音频所作的转写核验。 ↩
-
Sequoia Capital, “Anthropic’s Boris Cherny: Why Coding Is Solved, and What Comes Next,” YouTube, ≈19:59. 模型自己发起一份周期性数据报告、通过 MCP 把它接入 Slack,以及”这其实是个产品设计问题,而我没把它做好”的出处。引文已对照作者用 Whisper 对源音频所作的转写核验。 ↩↩↩↩
-
Y Combinator, “Inside Claude Code With Its Creator Boris Cherny,” YouTube. 作者于 2026 年 6 月 9 日审阅了完整的自动生成文字记录;该期对循环只字未提。引此作为对那些将循环内容归到这次露面的病毒式帖子的更正。 ↩
-
Addy Osmani, “Loop Engineering,” addyosmani.com, June 8, 2026. “一个无人值守运行的循环,也是一个无人值守地犯错的循环”这句引文(已对照已发表文本核验),以及独立验证者架构的出处。 ↩↩↩
-
Nicholas Carlini, “Building a C compiler with a team of parallel Claudes,” Anthropic Engineering, February 2026. 16 个代理的无限循环设置、约 2 万美元的成本、10 万行 Rust 编译器的成果,以及 Carlini 对部署未经验证软件的隐忧的出处。 ↩↩
-
Anthropic, “Ralph Wiggum Plugin README,” anthropics/claude-code, GitHub. Huntley 的”Ralph 是一个 Bash 循环”的描述、Stop-hook 机制,以及完成承诺与最大迭代次数这两种终止选项的出处。已对照 README 文本核验。 ↩↩
-
The Register, “‘Ralph Wiggum’ loop prompts Claude to vibe-clone software,” January 27, 2026. “Claude Code 的缔造者 Boris Cherny 表示他在用 Ralph”,以及 Huntley 预期创业公司会以约每小时 10 美元的代理式编程成本克隆 SaaS 业务的出处。各项说法已对照已发表文本核验。 ↩
-
Boris Cherny (@bcherny), “Two of the most powerful features in Claude Code: /loop and /schedule,” X, March 30, 2026. 每五分钟照看 PR 的入门循环(
/loop 5m /babysit)的出处。帖子文本与日期已对照实时讨论串核验。 ↩ -
Simon Willison, “Code w/ Claude 2026,” simonwillison.net, May 6, 2026. 主题演讲中将 Routines 描述为”高阶提示词”的出处。 ↩
-
Casey Newton, “Claude Code’s creator on the end of the software engineer,” Platformer, May 2026. “构建者”头衔预测、”工程师人数增长百倍”的预测、完整的”对于我所做的那类编程而言,编程已经被解决了”这句引文,以及”每天夜里我都有几百个、有时几千个代理运行 5、10、20 个小时”的出处。引文已对照已发表文本核验。 ↩
-
Hacker News, “Ask HN: How are you preserving your skills while using AI?” June 9, 2026. 一位资深工程师提出的技能侵蚀反馈陷阱,及随后讨论的出处。 ↩
-
LinearB, “Inventing the Ralph Wiggum Loop, with Geoffrey Huntley,” Dev Interrupted podcast. Ralph 技法的起源与初衷的出处。 ↩
-
作者的生产日志与事故记录,2026 年 2 月至 6 月,在不涉及基础设施具体细节的前提下作了归纳。2 月那套系统记录于Ralph 循环:我如何让自主 AI 代理通宵运行;worktree 删除与清除顺序这两起事故来自作者的会话记录与 Cloudflare 抓取日志。 ↩↩