Loop Engineering:从 Boris 的 /loops 到持久 Agent 工程
调研截至:2026-06-14。公开检索没有找到 Boris Cherny 对 “Loop Engineering” 的完整定义文本;可核实材料集中在他对 Claude Code
/loops和 Routines 的展示与推荐。这里把 “Loop Engineering” 限定为这类持久 Agent 自动化的工程抽象:定时触发、长期运行、多会话并发、可恢复状态、权限边界、验证证据和人工升级路径。
查重结果
本博客已有 Agent Loop、Ralph Loop、Goal、Harness Engineering、Hook 体系等相邻文章,但还没有专门讨论 Loop Engineering 的博文。关键词检索覆盖了:
Loop Engineeringloop engeeringloop engineering循环工程反馈回路Agent LoopRalph Loop
相邻文章有这些:
| 已有文章 | 主要讨论 | 补位关系 |
|---|---|---|
| AI Coding Agent 的 Hook、Loop 与插件体系 | Codex、Claude Code、OpenCode、OMC 的运行时结构 | 已经写到 loop 与 hook,但没有以 Boris 的 /loops 宣传为主线 |
| Goal 模式深度研究 | Goal、Ralph Loop、completion predicate | 提供完成谓词和循环停止条件的基础 |
| Harness Engineering:长程 Agent 的工程化底座 | 长程 Agent 的工具、状态、验证环境 | 为 loop 工程化讨论提供背景 |
| Agentic Coding 深度解析 | 从代码补全到 Agentic Coding | 提供开发范式迁移背景 |
空位很明确:关键不是再泛泛讲 “Agent 会循环”,而是把 Boris 这次宣传里的 /loops、Routines、夜间多 Agent 深度工作,放进一个更硬的工程框架里。
Boris 这次宣传到底新在哪里
Business Insider 在 2026-05-13 报道了 Boris Cherny 于 2026-05-04 在 Sequoia Capital 访谈中的展示。Boris 是 Claude Code 的创建者。报道里的几个信息点很集中:
- 他通过 Claude App 里的 Code 标签页管理多个 Claude Code session。
- 典型状态是 5 到 10 个 session 并行。
- 每个 session 内又包含多个 agent。
- 夜间会有数千个 agent 做更深的工作。
- 他特别提到两个持久自动化特性:
/loops和 Routines。 /loops可以在本地通过 cron 调度。- Routines 在服务器上运行 recurring tasks,笔记本关上以后仍能继续。
这些信息说明,Boris 推广的重点不是 “怎样把 prompt 写得更好”,也不是 “怎样让单个 coding agent 多试几次”。重点是把 coding agent 从一个交互式终端工具,推进到一种持久自动化系统。
这个变化很大。过去的主界面是:
1 | |
Boris 展示的主界面更像:
1 | |
工程师不只是发起一次任务,而是在设计一组会定时启动、持续运行、留下结果、等待审阅的循环。
这就是这里采用的 Loop Engineering 语境。
一个严格定义
Loop Engineering 是围绕持久 Agent 循环设计工程系统的实践。它回答的问题不是 “这一轮怎样提示模型”,而是:
- 循环什么时候触发?
- 每一轮拿到什么任务和上下文?
- Agent 能看见哪些反馈?
- Agent 能调用哪些工具?
- 状态怎样跨 session、跨天、跨设备保存?
- 什么证据能证明一项工作完成?
- 失败以后是重试、修复、改计划、暂停,还是终止?
- 多个 agent 并发产物怎样汇总、去重和验收?
更压缩的定义是:
1 | |
这个定义刻意不把 “模型能力更强” 放在中心。模型能力是前提,循环工程关心的是模型之外的控制结构。
从 Prompt 到 Loop
Prompt Engineering、Context Engineering、Harness Engineering 和 Loop Engineering 的边界可以这样拆:
| 概念 | 核心问题 | 典型产物 |
|---|---|---|
| Prompt Engineering | 一次请求该怎么表达 | prompt 模板、few-shot、指令文本 |
| Context Engineering | 本轮该给模型看什么 | 文件摘录、检索结果、历史压缩、工具输出 |
| Harness Engineering | 模型外部的运行环境是什么 | sandbox、工具、权限、状态、验证脚本 |
| Loop Engineering | 多轮、定时、长期、并发的 Agent 工作怎样推进和停止 | loop spec、调度器、证据账本、恢复阶梯、review queue |
Boris 的 /loops 和 Routines 把注意力从前两层推向第四层。一次 prompt 可以解决一个局部任务;一组可调度的 loop 可以承接持续任务,例如:
- 每晚扫描依赖升级和安全公告。
- 定期把 issue 分解成候选 patch。
- 持续跑失败测试并生成修复分支。
- 每天审查主干上的复杂度增长。
- 在不同 session 中探索同一问题的多个解法。
- 把长文章、长 PR、长迁移拆成可审阅的产物队列。
这些任务的共同点是:它们不适合停留在聊天窗口里,也不应该靠人手每天重复发同一段 prompt。
/loops 和 Routines 为什么是分水岭
/loops 的关键不是 “循环” 二字,而是调度入口。按照 Business Insider 的报道,它可以被本地 cron 调度。这意味着 Claude Code 可以进入 Unix 式自动化生态:时间、脚本、仓库、日志、文件系统和开发工具链都能成为循环的一部分。
Routines 的关键不是 “服务器” 二字,而是设备解耦。任务在服务器上作为 recurring tasks 继续运行,笔记本是否打开不再是边界。移动端只负责发起、查看、分配和验收。
两者放在一起,产生了新的工作形态:
flowchart TD
A["Human intent"] --> B["Loop spec"]
B --> C{"Trigger"}
C -->|cron| D["Local /loops"]
C -->|server schedule| E["Routines"]
D --> F["Claude Code sessions"]
E --> F
F --> G["Agent workers"]
G --> H["Repo / files / tools"]
H --> I["Evidence"]
I --> J{"Gate"}
J -->|pass| K["Review queue"]
J -->|fail| L["Recovery ladder"]
L --> F
J -->|needs judgment| M["Human escalation"]
这个图里最重要的不是 agent 数量,而是 gate。没有证据门,夜间自动化只是把白天的混乱搬到晚上。
四层循环
Boris 展示的是一组循环叠在一起。
| 层级 | 循环对象 | 典型周期 | 主要风险 |
|---|---|---|---|
| Model loop | 模型调用工具,读结果,再调用工具 | 秒到分钟 | 工具误用、上下文漂移 |
| Task loop | 一个任务反复尝试、修复、验证 | 分钟到小时 | 自宣完成、重复失败 |
| Session loop | 一个 session 承接一组相关任务 | 小时到天 | 状态遗失、目标漂移 |
| Fleet loop | 多 session、多 agent 并行工作 | 夜间、每日、每周 | 冲突、成本、质量退化、审阅过载 |
多数讨论只盯着第一层,也就是 “agent 内部怎样 while-loop”。Boris 的宣传把视角拉到了第三层和第四层。真正的新鲜感来自 fleet loop:工程师需要管理一组 agent 的工作流,而不是盯着一个 agent 的输出。
这也解释了为什么 “a few thousand agents overnight” 听起来惊人。数字本身不是方法论,背后的方法论是把深度工作拆成可调度、可并行、可验收的循环。
官方运行时的共同方向
这个趋势不是 Claude Code 独有。多个系统正在把 loop 周围的工程结构做厚。
OpenAI 在 “Unrolling the Codex agent loop” 中把 coding agent 的内循环拆成输入、推理、工具调用、工具结果回填、再次推理、最终停止。文章也强调,Agent 的输出不只是最终文本回复,很多时候真正的产物是写入本地工作区的代码。因此,停止条件不能只看模型是否回复,而要看文件系统、命令结果和验证证据。
Anthropic 的 “Building effective agents” 提醒了另一条边界:工作流适合路径明确的问题,Agent 适合开放问题;开放性带来成本和复合错误风险。因此检查点、阻塞点、停止条件、沙箱和人工审阅不是装饰,而是让 Agent 进入真实工程流程的约束。
Claude Code Hooks 把生命周期事件开放给用户。Hook 可以在特定事件上接收 JSON context,执行命令或返回决策。它的工程意义在于:确定性控制点被插入不确定的 Agent 行动链。
OpenCode 的 permissions 文档把 doom_loop 变成权限项:同样工具调用、同样输入重复三次后触发询问。这个设计直接说明,循环失控不是抽象风险,而是应该进入权限系统的运行时状态。
Google ADK 的 LoopAgent 把循环作为 workflow agent 暴露,并通过 exit_loop 工具设置退出语义。LangGraph 则把 durable execution、persistence、interrupt 和 thread 恢复作为长程 Agent 的底座。
这些设计都指向同一件事:可靠的 Agent 系统不会把 “继续试试” 交给模型直觉,而是把继续、停止、暂停、升级、恢复做成运行时语义。
Loop Spec:持久循环的最小单元
一个可运行的 loop 不应该只有 prompt。它至少需要一个 spec。
1 | |
这个 spec 的价值不在格式,而在边界。它把 Agent 的夜间活动限制在可审计范围内。
完成谓词比目标描述更重要
持久 loop 最容易犯的错误,是把目标写成愿望:
1 | |
这类目标无法停止,也无法验收。更可用的写法是:
1 | |
完成谓词至少包含:
| 维度 | 问题 | 示例 |
|---|---|---|
| 行为证据 | 什么现象算完成 | 失败测试变绿,目标页面可点击,构建通过 |
| 变更边界 | 哪些文件、接口、环境不能动 | 不改公开 API,不碰生产配置 |
| 验证入口 | 用什么命令或观察面判定 | npm run build、E2E 截图、性能阈值 |
| 审阅产物 | 人类看到什么 | diff、报告、候选分支、风险列表 |
| 停止条件 | 什么时候不再继续 | 三次同类失败、权限不足、证据冲突 |
没有完成谓词的 loop,会把 “完成” 交给模型自述。长程 Agent 最不该依赖的就是自述。
观察面:Agent 只能修它看得见的失败
Loop Engineering 的第二个核心是 observation surface。测试、日志、截图、trace、diff、指标和错误报告都属于观察面。
坏观察面会把 Agent 推向猜测:
- “页面不对。”
- “接口偶尔失败。”
- “代码有点乱。”
- “性能变差了。”
好观察面会把信号、上下文和下一步放在一起:
| 原始信号 | 任务上下文 | 失败标签 | 下一步 |
|---|---|---|---|
| 单测断言差异 | 当前任务影响订单金额计算 | contract mismatch | 定位 failing case 和金额计算分支 |
| E2E 截图 | 登录后进入支付页 | route mismatch | 检查跳转条件和 auth state |
| 构建日志 | 只允许改前端组件 | type error | 定位文件行号和类型来源 |
| 权限拦截 | 不允许读 .env |
unauthorized action | 生成需要的非敏感替代输入 |
| 连续同参调用 | 三次同样工具输入 | doom loop | 停止重试,改计划 |
观察面不是把更多日志塞给模型。观察面是把世界压成 Agent 能行动的反馈。
权限:循环越长,边界越硬
一次人工监督下的改动,风险可以靠人在旁边盯住。夜间自动化不能这样做。循环越长,越需要显式权限。
最小权限模型可以拆成五层:
| 层 | 允许 | 拒绝 |
|---|---|---|
| Read | 仓库、文档、公开依赖信息 | secret、私有凭证、生产数据 |
| Write | 指定报告、候选分支、临时文件 | 主干直推、生产配置、共享状态文件 |
| Execute | 测试、构建、静态分析 | 部署、账单操作、破坏性清理 |
| Network | 官方文档、包元数据、安全公告 | 未授权外发、未知上传 |
| Human gate | 需要判断时暂停 | 伪造 approval、绕过审阅 |
OpenCode 的 doom_loop 权限项给了一个很好的提示:权限系统不只管 “能不能访问文件”,还可以管 “当前循环状态是否危险”。重复、越权、成本异常、质量退化都应该成为权限信号。
状态:不要把长期任务寄存在聊天上下文里
Boris 的多 session 工作流天然要求状态持久化。一个夜间任务启动时,需要知道:
- 当前目标是什么。
- 上一轮改了哪些文件。
- 哪些验证已经跑过。
- 哪些失败已经分类。
- 哪些分支或报告等着审阅。
- 哪些事情需要人类判断。
聊天记录能保留过程,但不一定能保留恢复点。Loop Engineering 需要的是恢复状态。
1 | |
Ralph Loop 的朴素价值就在这里。Geoffrey Huntley 的 “Everything is a Ralph Loop” 和 open-ralph-wiggum 都强调,下一轮可以通过文件系统、Git 历史和代码变化继续,而不是靠一段无限膨胀的对话记忆继续。Claude Code、Codex、OpenCode 这类本地 coding agent 天然适合这种模式,因为代码库本身就是状态载体。
LangGraph 的 persistence 和 interrupt 则展示了更平台化的做法:图运行可以暂停,状态由 checkpointer 保存,再用同一个 thread 恢复。具体框架不同,原则一致:长期循环需要可恢复状态,不能只依赖模型记忆。
恢复阶梯:失败以后不只有 retry
自动循环最常见的失败动作是 “再跑一次”。这在临时网络错误上有效,在设计错误、权限不足、需求冲突上只会浪费预算。
持久 loop 应该内置恢复阶梯:
| 分类 | 条件 | 动作 |
|---|---|---|
| Retry | 临时失败,重试可能恢复 | 限次重跑,记录原因 |
| Repair | 失败原因明确,权限足够 | 修改实现、测试夹具或配置 |
| Replan | 同一路径多次失败 | 缩小目标,换方案 |
| Pause | 缺少权限、凭证、业务判断 | 保存状态,等待人类输入 |
| Abort | 目标冲突、风险超限、证据不足 | 停止并报告已知事实 |
这个阶梯看似普通,却是 /loops 和 Routines 进入生产工作流的门槛。没有恢复阶梯,持久自动化只是在持续消耗上下文、token 和审阅注意力。
多 Agent 并发的真正瓶颈
Boris 说夜间有数千个 agent 做 deeper work,最容易被误读成 “agent 越多越好”。工程问题恰好相反:并发越多,整合越难。
多 Agent loop 至少要处理这些问题:
| 问题 | 表现 | 工程处理 |
|---|---|---|
| 重复劳动 | 多个 agent 修同一个点 | task shard、claim lock、去重报告 |
| 冲突编辑 | 多个分支改同一文件 | worktree 隔离、merge gate、ownership map |
| 局部最优 | 每个 agent 都通过自己的测试 | 集成测试、主干回放、端到端验证 |
| 审阅过载 | 夜间生成大量 diff | 优先级排序、批量摘要、风险标签 |
| 成本失控 | 低价值任务持续运行 | budget、quota、价值评分 |
| 风格漂移 | 代码越来越像临时拼接 | simplification pass、架构边界检查 |
CAID 论文讨论异步软件工程 Agent 时也触及了类似问题:多 Agent 协作需要中心化任务委派、隔离 workspace、结构化集成和可执行验证。并发不是答案,受控并发才是答案。
质量控制:loop 会放大好习惯,也会放大坏习惯
迭代式 coding agent 的风险已有研究信号。
METR 在 2025 年的实验中,让 16 位有经验的开源开发者在熟悉项目上完成 246 个任务。开发者事前和事后都认为 AI 会节省时间,但实测在早期 2025 工具条件下反而增加了完成时间。这个结论不能推广成 “AI 编程无效”,但足以提醒:提示、等待、审查、修补 AI 输出本身会形成成本。
SlopCodeBench 更贴近 loop 问题。它关注 Agent 在多轮规格变化中持续扩展前序代码的能力。论文报告称,Agent 可以通过部分 checkpoint,但代码会逐步变得更冗长、更受结构侵蚀;质量指导能改善初始质量,却不能阻止后续退化率。
AI Workflow Store 论文从工作流硬化角度提出批评:即时生成的 on-the-fly agent loop 可能绕过传统软件工程里的设计、测试、对抗评估、阶段发布和监控,最终产出更像临时原型,而不是经过硬化的工作流。
这些研究共同指向一条规则:loop 不是质量保证。loop 只是放大器。工程纪律足够时,它放大产出;工程纪律不足时,它放大混乱。
Claude Code 本身也是一个 Loop 系统
2026 年的 “Dive into Claude Code” 论文基于公开 TypeScript 源码分析了 Claude Code 的设计空间。论文把 Claude Code 的核心描述为一个简单的 while-loop:调用模型、运行工具、重复。但更重要的部分在 loop 外围:权限系统、上下文压缩、MCP、插件、skills、hooks、subagent delegation、worktree isolation、append-oriented session storage。
这恰好说明 Loop Engineering 的重点不在 while,而在 while 周围的工程系统。
一个裸循环很便宜:
1 | |
一个能进入真实工程环境的循环很厚:
1 | |
Boris 的 /loops 和 Routines 把第二种循环的价值显性化了。
个人开发者的最小实践
个人不需要一开始就跑几千个 agent。更稳的做法是从少量低风险 loop 开始。
| Loop | 触发 | 写权限 | 产物 | 验收 |
|---|---|---|---|---|
| Daily repo scout | 每天早上 | 只写报告 | 风险、 TODO、过期依赖 | 人工挑选 |
| Failing test repair | CI 失败后 | 候选分支 | 最小修复 diff | 测试通过后审阅 |
| Writing polish | 草稿更新后 | 草稿文件 | 引用核对、坏味道清单 | 构建和人工审稿 |
| Issue triage | 新 issue 到达 | issue comment 草稿 | 复现路径、标签建议 | 人工发布 |
最小原则:
- 不让 loop 直接合并主干。
- 不让 loop 直接部署生产。
- 不让 loop 读取 secret。
- 不让 loop 自己批准自己。
- 不让 loop 在没有新观察的情况下无限重试。
这比追求 agent 数量更重要。
团队版本的 Loop Engineering
团队里,Loop Engineering 应该沉淀成平台能力,而不是每个工程师各写一堆 cron。
| 能力 | 个人版 | 团队版 |
|---|---|---|
| 调度 | 本地 cron、手动触发 | 统一 scheduler、队列、优先级 |
| 状态 | 文件、Git、thread | durable store、evidence ledger |
| 权限 | shell 约定、目录限制 | policy engine、approval workflow |
| 验证 | 本地测试、构建 | CI、E2E、preview、security checks |
| 审阅 | 人工看 diff | review queue、risk tags、owner routing |
| 成本 | 自己控制 | budget、quota、ROI dashboard |
| 学习 | 个人笔记 | workflow registry、postmortem、template |
这也是为什么 /loops 和 Routines 的宣传值得关注。它暗示 coding agent 的竞争不只在模型能力,也在持久执行、调度、权限、协作和审阅系统。
反模式
Loop Engineering 不是把所有事情都自动化。这些做法会把 loop 变成风险源:
| 反模式 | 问题 |
|---|---|
| 无限 prompt 重放 | 没有新观察,重复只是在消耗预算 |
| 完成条件靠模型自述 | 模型说完成,不等于行为完成 |
| 夜间自动改主干 | 审阅和回滚压力被推迟到白天爆发 |
| 多 Agent 抢同一文件 | 并发提升被冲突抵消 |
| 没有权限分层 | 小任务获得了过大的破坏半径 |
| 没有摘要和优先级 | 人类审阅队列被产物淹没 |
| 没有熵减步骤 | 代码通过测试,但长期可维护性下降 |
一个实用判断是:如果第二天早上面对的是一堆无法排序、无法验证、无法解释来源的 diff,那么夜间 loop 不是生产力系统,而是延迟爆炸的任务生成器。
最终框架
可以把 Boris 这次宣传压缩成一句工程判断:
coding agent 的主战场正在从单次对话,转向持久循环。
这句话背后的工程框架如下:
1 | |
/loops 提供本地调度入口,Routines 提供服务器侧 recurring tasks。它们让 Claude Code 从 “一次会话里的 agent” 接近 “持续工作的 agent fleet”。这不是简单的功能升级,而是软件工程对象的变化:工程师需要设计的东西从 prompt 变成 loop,从单次产出变成持续产出系统,从手动监督变成证据驱动的审阅管线。
在这个语境里,Loop Engineering 不是口号。它是 Prompt Engineering 之后更接近软件工程本体的一层:把 Agent 的重复行动变成可控、可审计、可恢复、可停止的工程资产。
参考资料
- Business Insider: Claude Code’s creator says his setup involves thousands of AI sub-agents doing ‘deeper work’ overnight
- OpenAI: Unrolling the Codex agent loop
- Anthropic: Building effective agents
- Claude Code Docs: Hooks
- OpenCode Docs: Permissions
- Google ADK: Loop agents
- LangGraph Docs: Overview
- LangGraph Docs: Interrupts
- Geoffrey Huntley: Everything is a Ralph Loop
- open-ralph-wiggum
- arXiv: Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity
- arXiv: SlopCodeBench
- arXiv: AI Workflow Store
- arXiv: CAID
- arXiv: Dive into Claude Code

