Loop Engineering

别再 Prompt Agent 了,去设计循环
Agent 架构 自动化循环 Addy Osmani
"You shouldn't be prompting coding agents anymore. You should be designing loops that prompt your agents."
— @steipete

"I don't prompt Claude anymore. I have loops running that prompt Claude and figuring out what to do. My job is to write loops."
— @bcherny, Head of Claude Code, Anthropic

从手动编排到自动循环

过去两年,人跟 coding agent 的交互模式基本一致:你写一句,看一眼结果,再写一句,逐轮推进。agent 是工具,你是操作者,整个过程是同步的,你全程在场。

这个模式的问题不是效率低,而是不可扩展。你的注意力带宽是固定上限——同时盯着三个 agent 就到极限了,不管工具多好。三以上,质量开始崩,因为 review 跟不上。

Loop Engineering 的思路是把"你"从循环里摘出来。不再是人驱动 agent,而是系统驱动 agent。你设计系统,系统驱动 agent,agent 干活,系统检查,写入记忆,触发下一轮。

听起来像是 agent harness 或 multi-agent orchestration 换了个名字。某种程度是的。但 Osmani 的观察有价值:这些组件不再是需要你自己拼 bash 脚本搭的东西了——Claude Code 和 Codex 已经把五个核心原语内建到了产品里。这意味着 loop engineering 正在从一个手工活变成一个有标准构件的工程学科

五个构件 + 一块记忆

一个完整的 loop 需要五样东西,加一个外部记忆。

⏱️

自动化(心跳)

没有 cron,它不是 loop,只是一次性任务。/goal 让 agent 持续工作直到可验证的停止条件成立,每轮由另一个小模型打分。

🌳

Worktree(隔离)

给每个 agent 独立的 working directory 和独立分支,物理上不可能互踩。工具解决机械冲突,review 带宽才是真天花板。

📋

Skill(意图持久化)

agent 每次冷启动都是空白的。Skill 是外部化的项目知识——约定、构建步骤、踩过的坑,写一次,每轮都读,知识复利。

🔌

Connector(触达)

MCP 协议让 agent 能读 issue tracker、查数据库、调 API、发消息。只能在文件系统里打转的 agent 是个 tiny loop。

🔍

Sub-agent(质量控制)

写代码的和审代码的不应该是同一个模型。拆成 maker 和 checker,用不同的指令甚至不同的模型,防止自我合理化。

💾

外部记忆

markdown 文件、Linear board,任何存活在对话之外的持久状态。模型在运行之间会忘记一切,记忆必须在磁盘上。

杠杆移动了,不等于工作变简单了

Osmani 文章最后那段,才是整篇的刀刃。

两个人可以搭完全相同的 loop,得到完全相反的结果。一个用它加速自己已经深入理解的工作,另一个用它逃避理解工作本身。Loop 分不清区别。你自己分得清。 — Addy Osmani

这就是为什么 loop design 比 prompt design 难,不是更容易。prompt 的杠杆点在你的脑子里——你理解什么就写什么,理解浅就 output 浅。loop 的杠杆点移到了系统设计里,但系统产出的上限仍然是你对自己工作的理解深度

Cherny 的本意不是说工作变轻松了。他的意思是杠杆点换了位置。从"你能写多好的 prompt"换成了"你能设计多好的循环"。

如果你对工作的理解是清晰的——论文筛选的标准、交易风控的阈值、代码 review 的红线——你的 loop 会忠实地放大这些判断。如果你自己都说不清什么是好的产出,loop 就会忠实地放大这种模糊。Loop 不会替你思考。它只会放大你已有的思考,或者放大你已有的偷懒。

不只是代码的事

Osmani 的文章聚焦在 coding agent 场景(Codex 和 Claude Code),但 loop 的结构是通用的。

我自己现在跑的 cron 定时任务就是一个简单的 loop:每天早上 8 点拉 AI 日报,6:30 生成论文播客,内容写入 markdown 文件推送到飞书。每个任务有明确的触发条件、执行脚本和输出规范。Skill 文件里存着数据源、输出格式、fallback 链——这些就是意图持久化。飞书 API 就是 connector。

交易巡检曾经也是一个 loop:每天三次定时抓市场数据,对照风控规则检查持仓,生成报告推送。后来停了,不是因为 loop 有问题,是因为数据源不稳定导致信噪比太低。这是另一个教训——loop 的价值取决于它喂进去的数据质量

更复杂的 loop 可以是这样的:agent 自己去 arxiv 扫新论文,用 embedding 做相关性筛选,对命中的论文自动生成解读初稿,存入待审队列,人在晨间花十分钟过一遍,确认的自动推送公众号。这个 loop 里有自动化触发(cron)、skill(论文解读模板和筛选标准)、connector(arxiv API + 公众号 API)、sub-agent(初稿 agent + review agent 分离)、外部记忆(待审队列 markdown)。五个构件齐全。

Loop 构件Coding 场景论文解读场景交易巡检场景
自动化cron + /goalarxiv 定时扫描盘前/盘中/盘后 cron
Worktreegit worktree 隔离/tmp 目录隔离N/A
Skill构建步骤 + 代码规范解读模板 + 筛选标准风控规则 + 输出格式
ConnectorGitHub + CI + Slackarxiv API + 公众号 APICNBC + akshare + 飞书
Sub-agentmaker + reviewer初稿 agent + review agent数据采集 + 信号判断
外部记忆CLAUDE.md / Codex skill待审队列 markdown持仓记录 + 信号日志

设计 Loop 的原则

🔴 高频重复且标准化的任务优先

日报、巡检、格式转换——这些天然适合 loop,因为输入输出模式稳定,人工编排没有增量价值。

🟡 需要人判断的环节不要自动化

论文是否值得解读、交易信号是否执行——这些决策点的质量取决于理解深度,不是自动化能提升的。Loop 应该把候选推到人面前,而不是替人做决定。

🔵 Maker/checker 分离是必须的,不是可选的

任何 loop 里,执行者和验证者必须是独立的。这不只是工程最佳实践,是防止自欺的结构性约束。

🟢 记忆设计决定 loop 的上限

外部记忆存什么、怎么组织、怎么在轮次之间传递,直接决定了 loop 能累积多深的理解。一个没有好记忆设计的 loop,每轮都是原地踏步。

Build the loop. But build it like someone who intends to stay the engineer, not just the person who presses go. — Addy Osmani

你不是在设计一个按下去就不管的系统。你是在设计一个放大你判断力的工具。如果你不理解自己要什么,loop 会以更大的规模帮你产出你不想要的东西。

Loop engineering 的本质不是"把工作交给 AI"。是把你已经理解透的工作,封装成可自动执行的系统,然后你腾出精力去理解下一个问题。