从 "写提示词" 到 "写循环"——AI 编程范式的第三次跃迁
2026 年 6 月,Meta 的 @Scale 大会上,一位听众问台上的 Boris Cherny(Claude Code 的创建者):"Loops 是下一个炒作周期,还是真的?" Cherny 的回答只有四个词:"Yes, they're for real." 这个回答在随后几周内引爆了整个 AI 编程圈。
Boris Cherny 用一句话概括了他所在领域的演变:
"两年前,我们手写源代码。然后我们开始过渡到 agent 写代码。现在,agent 在 prompt 其他 agent,那些 agent 再写代码。从源代码到 agent 的那一步有多大,loop 这一步就有多大,同样重要。"
— Boris Cherny, Meta @Scale Conference, 2026 年 6 月
这三次跃迁可以清晰地表示为:
Boris Cherny 是 Anthropic 公司 Claude Code 的产品负责人和创建者。在 Anthropic 之前,他是一位资深的 TypeScript 工程师,写过 TypeScript 编程书籍,曾在 Meta 担任 Principal Engineer,也参与过 YC 创业。但他的真正"出圈",源于 2026 年初的一句宣言:
"我不再给 Claude 写提示词了。是循环在跑,它们提示 Claude、自己琢磨该干什么。我的工作就是写循环。"
— Boris Cherny
这句话之所以引起轰动,是因为它不只是一种个人工作方式的描述,而是宣告了一个新范式的诞生——「循环工程」(Loop Engineering)。
在转向 loop 工作方式后,Boris 的个人产出数据令人震撼:
更宏观的佐证来自 SemiAnalysis 的数据:Claude Code 贡献了全球公开 GitHub 提交量的约 4%。Anthropic 内部工程师的人均代码产出自年初增长了 8 倍,AI 代码生成率达到 70–90%,部分团队已达 100%。
Boris 所说的 "loop" 不是编程语言里的 while 语句。二者有着本质区别:
| 维度 | 传统 while 循环 | Boris 的 Loop |
|---|---|---|
| 循环体 | 固定的指令序列 | 一个 AI agent,每轮自己决定做什么 |
| 终止条件 | 布尔表达式(如 i < 10) |
另一个 AI agent(evaluator)判断:目标达成了吗? |
| 控制流 | 确定性——程序员写死 | 自主性——agent 根据上下文动态决策 |
| 状态 | 无状态或显式维护 | 有记忆——通过文件系统/CLAUDE.md 沉淀 |
| 运行时 | 调用完就结束 | 持续运行,像守护进程一样"永不停止" |
TechCrunch 的现场报道精确描述了这一区别:
"递归循环(函数调用自身加停止条件)是基础的计算机科学概念。这里的区别在于:是一个子 agent 来选择何时停止循环,而不是一个明确的条件。"
— TechCrunch, "The AI world is getting 'loopy'", 2026-06-22
这是 Boris loop 系统中最根本的设计原则:干活的人不能给自己打分。
Claude Code 的 /goal 命令(v2.1.139,2026 年 5 月发布)原生实现了这一机制——每轮迭代后,由一个独立的小模型(fast model)来评估目标是否达成,而非干活的那个模型自己判断。
这是 loop 区别于传统 agent 工作流的最关键特征。传统的 agent 工作流中,任务完成判断由硬编码条件或人工判断完成;在 Boris 的 loop 中,终止决策本身也是 agent 的工作。
最简实现是所谓的 "Ralph Loop"(以《辛普森一家》的 Ralph Wiggum 命名):
# Ralph Loop 的简化伪代码
while True:
result = agent("做完所有能做的事")
evaluation = agent("评估以上所有工作,目标达成了吗?")
if evaluation == "达成":
break
# 否则继续循环
这个模式的精华在于:终止条件不是 dryRuns < 2 这样的硬编码数字,而是另一个 AI 的智能判断。这也意味着 loop 可以在目标真正达成时精确停止,不会在还有工作可做时提前退出,也不会在已无新发现时徒劳空转。
Boris 的 loop 不是"跑一次就结束"的脚本。TechCrunch 报道:
"授权一群 agent 在后台持续地、无休止地工作。"
他的实际系统中有数十个持续运行的 loop:
这些 loop 之所以能持续运行,是因为它们不需要人每轮确认——写查分离 + 递归终止 这两个机制保证了它们可以自主地发现工作、执行工作、判断完成,然后进入下一轮等待。
Boris 的系统不是一层,而是三层互锁的飞轮架构。这被 @Av1dlive 在公开重建中命名为 "The Hive(蜂巢)"。
/loop — 本地会话级循环/goal 条件/loop <interval> <prompt> + /goal <condition>每个 /loop 会话的内部工作方式是:
/schedule <cron>Routines 是 Layer 1 和 Layer 3 之间的粘合剂:
/batch + 动态 Workflow — 大规模并行集群/batch + agent() + parallel() + pipeline()用一个真实场景来展示三层如何协同工作:
Boris 将自己的实践提炼为 5 条规则。这 5 条规则构成了从"理解概念"到"真正能跑起来"的桥梁。
"自动权限模式是一个能够彻夜运行的 agent 和一个从凌晨 2 点就在等点击的 agent 之间的区别。"
要让 loop 能在无人值守时自主工作,必须启用 Claude Code 的 auto 权限模式。否则 loop 会在每一次需要执行命令时卡住等待人工确认,无法实现"无人值守"。
"停止写 prompt。描述任务。让 Claude 自己写编排。"
这是动态 Workflow(Dynamic Workflows)的核心思想——你不再写"做 A 然后做 B 然后做 C"的固定脚本,而是描述目标("让代码架构更健康"),让 AI 自己决定怎么做。
"没有这个,agent 做到 60% 就宣布胜利。"
/goal 是条件驱动的——"一直运行直到条件为真";/loop 是时间驱动的——"每隔 N 分钟运行一次"。两者择一使用,或组合使用。
"合上电脑。工作继续。这就是 Routines 的用途。"
本地 loop 依赖会话存活。要让 loop 真正"永不停止",需要把关键任务部署到 Anthropic 云端(Routines)。
"如果 Claude 不能针对真实环境验证自己的输出,每一个彻夜运行都是一场赌博。"
Boris 强调:验证必须在真实环境中进行——跑测试、启动浏览器检查渲染、在模拟器中检查 UI、运行 lint 等。模型自己的"我觉得没问题"不算验证。这是把他的质量从"还可以"提升到"可直接合并"的关键。
| 资源 | 说明 | 备注 |
|---|---|---|
| Claude Code CLI | Anthropic 官方的 AI 编程命令行工具 | v2.1.139+(支持 /goal) |
| Anthropic API Key | 用于 Claude Code 的鉴权和计费 | 推荐 Opus 4.5/4.7 模型 |
| 云基础设施 | Routines 需要 Anthropic 云端服务(2026 年 4 月上线) | 关电脑也能运行 |
| Token 预算 | Boris 个人消耗 800 亿 token,普通用户需要设预算上限 | 重要!详见下方"风险" |
| Git worktree 支持 | Layer 3 大规模并行时需要隔离的代码检出 | git worktree 命令 |
CLAUDE.md — 这是整个系统的记忆核心。每次 loop 发现的问题、学到的经验,最终都会沉淀到这里。Boris 的做法是:每个错误被捕获后,立即作为规则添加到 CLAUDE.md——这样 agent 每次启动时自动读取,"每周都比上周更聪明"。
SKILL.md — 编码项目不可妥协的标准和流程。让每个新启动的 agent 不用从零开始理解项目规则。
| 组件 | 层级 | 本质 | 说明 |
|---|---|---|---|
/loop | L1 | 时间驱动本地循环 | 最小 1 分钟,关电脑停 |
/goal | L1 | 条件驱动智能循环 | 独立 evaluator 每轮检查 |
/schedule | L2 | 云端持久循环 | cron 驱动,关电脑不停 |
/batch | L3 | 集群扇出 | 数百 worktree agent 并行 |
agent() | L3 | 子智能体 | 最小执行单元 |
parallel() | L3 | 并发原语 | 无屏障并行 |
pipeline() | L3 | 流水线原语 | 多阶段,无屏障 |
其他已知风险:
| 维度 | 传统 Agentic Workflow | Boris Loop |
|---|---|---|
| 生命周期 | 单次会话,执行完即止 | 持续运行,守护进程式 |
| 终止判断 | 人判断 / 硬编码条件 | 独立 evaluator agent 判断 |
| 任务自主性 | 人指定每步做什么 | agent 自己决定每轮做什么 |
| 记忆 | 当前会话上下文 | 文件系统 + CLAUDE.md 持久化 |
| 层级 | 单层 | 三层互锁飞轮 |
| 验证方式 | 人审查输出 | 真实环境自验证(test/browser/CI) |
| 伸缩性 | 单 agent 或少量并行 | 数百到数千 agent 并行 |
| 维度 | 动态 Workflow | Boris Loop |
|---|---|---|
| 层级位置 | Layer 3 的单次脚本 | Layer 1 + 2 + 3 完整系统 |
| 调度 | 无调度,手动触发 | /loop(时间)+ /schedule(cron)+ 按需 |
| 持久化 | 单次执行 | 云端持久化关电脑不停 |
| 终止判断 | 硬编码条件(如 dryRuns < 2) | 子 agent 自主判断 |
| 记忆更新 | return 结果 | 写文件 + 蒸馏进 CLAUDE.md |
| 关系 | — | 动态 Workflow 是 Boris Loop 的 Layer 3 |
Ralph Loop(以《辛普森一家》的 Ralph Wiggum 命名)是 Boris Loop 理念的最简可运行实现。它不是 Boris 本人发明的,而是社区在 2025 年流行起来的一种模式:
# Ralph Loop(最简版) while :; do cat PROMPT.md | claude-code; done
它的关键创新是 每次用固定锚点文件重置上下文——防止长对话中的上下文膨胀和漂移。据说有人用这个模式花了 $297 构建了一门编程语言。
| 维度 | Ralph Loop | Boris Loop |
|---|---|---|
| 复杂度 | 一行 shell 脚本 | 三层架构,数十个 loop 并行 |
| 上下文管理 | 每次从固定文件重置(防漂移) | 文件系统 + CLAUDE.md 持久化 |
| Evaluator | 无——每次重新执行 | 有——独立 evaluator 判断完成 |
| 关系 | Boris Loop 的最简前身 | Ralph Loop 的工程化进化版 |
Google 工程师 Addy Osmani 在 2026 年 6 月系统化地提出了 「Loop Engineering」 框架,将 Boris 的实践提炼为 6 个可复用的构建模块:
| 模块 | 功能 | 对应 Boris 系统中的实现 |
|---|---|---|
| Automations | 定时触发器(时间/git/CI) | /loop, Routines (cron) |
| Worktrees | Git 隔离避免并行冲突 | Layer 3 的隔离执行 |
| Skills | 冻结项目知识(SKILL.md / CLAUDE.md) | CLAUDE.md 记忆系统 |
| Connectors | MCP 插件接入外部工具(GitHub/Slack/Linear) | PR 监护、Slack 反馈抓取 |
| Sub-agents | 制造者与检查者分离 | /goal 的独立 evaluator |
| Memory | 外部持久化状态 | 文件 + CLAUDE.md 蒸馏 |
Osmani 和 Boris 的关系类似于 Christopher Alexander 和建筑设计师——前者把实践提炼为模式语言,后者在实际建造。二者并非竞争关系,而是实践与理论的互补。
| 维度 | 传统 Agent | Ralph Loop | 动态 Workflow | Boris Loop |
|---|---|---|---|---|
| 提出者 | 行业通用 | 社区 | Anthropic | Boris Cherny |
| 层次 | 单次 | 单次 | L3 单次 | L1+L2+L3 |
| 持久性 | ❌ 一次性 | ❌ 一次性但可 while | ❌ 一次性 | ✅ 守护进程 |
| 自主决策 | ❌ 人指定步骤 | ❌ 人写 prompt | 🟡 固定 prompt | ✅ 自主规划 |
| 写查分离 | ❌ | ❌ | ❌ | ✅ |
| 记忆进化 | ❌ | ❌ 每次重置 | ❌ | ✅ 蒸馏到 CLAUDE.md |
| 终止判断 | 人 | 无 / 无限 | 硬编码 | 子 agent |
| 规模化 | 单 agent | 单 agent | ~1000 agent | 数千 agent |
不可回避的事实是:Boris 和 Peter Steinberger(OpenAI / PSPDFKit 创始人)有几乎无限的 token 预算。Boris 个人消耗了 800 亿 token。对于个人开发者或小型团队,这意味着需要非常谨慎地设计预算控制:
budget.remaining() 做 guardmax_turns 上限Loop 并没有消除验证工作——它只是把验证从"审查每一行代码"变成了"审查 loop 产出的模式"。如果 loop 跑了一晚上提交了 50 个 PR,你早上需要看的不是 0 个,而是 50 个。Peter Steinberger 的补充很重要:
"Loop 需要一个反馈机制——测试、类型检查、真实世界的错误——否则 agent 只是在自我确认的圈子里空转。"
— Peter Steinberger, OpenAI
有怀疑者指出,Loop 本质上不过是 ReAct(推理-行动循环)+ AutoGPT + cron 的重新包装。这个批评有一定道理——循环本身不是新概念。Boris 的创新在于:
真正新的不是"循环"这个概念,而是它成为了一种被主流工具原生支持的工作范式。
回到实际落地层面。笔者开发了两个互补的 Claude Code skill 来实践循环工程理念:dynamic-workflow-automation(动态工作流生成)和 loop-engine(流水线编排引擎)。二者的定位差异和与 Boris Loop 的对比,恰好能揭示从"设计模式"到"完整系统"之间的鸿沟。
| 维度 | dynamic-workflow-automation | loop-engine |
|---|---|---|
| 定位 | 执行层——自然语言 → 自动生成 Workflow JS 脚本并运行 | 设计层——模糊需求 → 结构化 YAML 管线配置 + 门禁 + 循环 |
| 触发方式 | 用户描述任务,自动分析并匹配模板,无确认环节直接执行 | 结构化对话引导用户填写管线配置,需用户确认后再执行 |
| 运行环境 | Claude Code 专属(依赖 Workflow 运行时) | 任何 agent 环境(是 prompt 模板,不依赖特定运行时) |
| 核心组件 | 7 种执行模板(Fan-Out/Pipeline/Loop/Verify/Judge) | Phase/Gate/Loop/Merge/Generate + 数据模式 + 执行模式 |
| 模板数量 | 7 种固定的编排模板 | 3 种执行模式 × 5 种 Phase 类型 = 可组合的构件 |
| 设计哲学 | "别让我想"——自动分析、自动选模板、自动执行 | "先想清楚再做"——结构化设计、门禁校验、可追溯 |
二者可以互补使用:loop-engine 做设计和门禁,dynamic-workflow-automation 做大并行执行。
| 维度 | dynamic-workflow -automation |
loop-engine | 两者结合 | Boris Loop |
|---|---|---|---|---|
| 层级 | Layer 3 执行 | Layer 0 设计 | 设计 + 执行(仍缺调度) | Layer 1+2+3 完整 |
| 调度/持久化 | ❌ 单次执行 | ❌ 单次执行 | ❌ | ✅ /loop + Routines |
| 写查分离 | 🟡 T6 有对抗验证但非原生 | ✅ Gate 组件强制独立子 agent 评估 | ✅ | ✅ 原生 /goal evaluator |
| 循环终止 | ❌ 硬编码 dryRuns | 🟡 外循环带失败反馈,但仍由条件控制 | 🟡 | ✅ 子 agent 判断 |
| 循环反馈机制 | ❌ 无 | ✅ 外循环携带"做了什么/失败了什么"反馈回前序阶段 | ✅ | ✅ evaluator 反馈 |
| 记忆进化 | ❌ 无 | 🟡 best_of 收敛但不蒸馏 | 🟡 | ✅ 蒸馏到 CLAUDE.md |
| 最佳结果收敛 | ❌ 只取最后一轮 | ✅ best_of 模式保持最佳轮次 | ✅ | 🟡 无显式 best_of |
| 跨环境 | ❌ Claude Code 专属 | ✅ 任何 agent 通用 | 🟡 取决于组合方式 | ✅ Claude Code 原生 |
loop-engine 中的 Gate(门禁)组件有一个硬约束:"门禁必须通过独立的子 agent 执行,不能由干活的 agent 自己评判。" 这与 Boris 的写查分离原则不谋而合——而且 loop-engine 在概念层面走得更早。Boris 的 /goal 是在产品层面内置了这个机制,loop-engine 是在 prompt 层面通过纪律来保证。
另一个亮点是 loop-engine 的 best_of 收敛模式——不是默认取最后一轮的结果,而是始终保持一个"最佳轮次"指针。这解决了循环工程中一个真实痛点:最后一轮往往不是最好的(agent 可能在后期跑偏),而人类直觉会默认"最后的 = 最好的"。
两个 skill 的组合已经覆盖了 Boris Loop 中 Layer 3(执行层)的大部分,并在设计理念上部分触及 写查分离(loop-engine 的 Gate)和 循环反馈(loop-engine 的外循环)。但核心差距依然存在:
这也反过来印证了 Boris Loop 的真正价值:不是提出了某一种新算法,而是把已有的原语(agent、parallel、pipeline)和已有的概念(写查分离、循环反馈、文件记忆)有机地组织成了一个完整的三层系统。 两个 skill 各自实现了其中的一部分,但要达到 Boris 那种"数百 agent 昼夜运行、每周自我进化"的效果,还需要基础设施层面的补齐。
Boris Cherny 的一句话最能概括整个 Loop 工程范式的本质:
"工作并没有消失。它只是改变了海拔——从写代码变成了写那个写代码的东西。"
— Boris Cherny
从手写代码到提示 AI,从提示 AI 到设计 loop——人的角色从"生产者"变成了"系统设计师",从"操作机床"变成了"设计整条产线"。Boris 能卸载 IDE、从手机管理数百个 agent、一个月提交 259 个 PR,不是因为他写了更好的 prompt,而是因为他不再写 prompt 了。
对于还在"回合制"地和 AI 对话的开发者来说,Loop 工程不仅是一个新工具,更是一种新的思维方式:你不是在写代码,你是在设计那个写代码的系统。
而那个系统的核心,不是什么新技术,而是三个原则的有机组合:让 AI 来决定做什么(自主规划)、让另一个 AI 来检查做完了没(写查分离)、把学到的东西沉淀下来让明天的自己更聪明(记忆进化)。
— END —
📂 开源项目
本文涉及的 Claude Code 技能已开源,欢迎 star / fork / PR:
🔗 github.com/qscq2026/dynamic-workflow-automation — 动态工作流自动生成引擎
🔗 github.com/qscq2026/loop-engine — 流水线编排引擎