大白话讲解Addy Osmani 的循环工程Loop Engineering 工作流
Addy Osmani 提到的一个很实用的思路:循环工程(Loop Engineering)。简单说,循环工程不是教你写一条"神级提示词",而是教你搭一个闭环:先定目标,再让 AI 产出,再验证结果,再把反馈喂回去,持续迭代。真正的效率,不在第一轮,而在第n轮之后还能稳定收敛。他把每天要处理的PR做了一个Loop,然后让Loop和goal结合完成轻松搞定。

这篇文章来自 Addy Osmani,Google 的工程师,也是知名技术作者。他写过很多讲设计模式和前端工程的书,维护着一个八万多 star 的开源项目。
他平时的习惯,是同时让五到十个 AI agent 并行工作。有些任务他敢完全放手,有些任务他会盯得紧紧的。这中间的判断依据,就藏在他最近写的一篇博客里,讲的是 loop engineering(循环工程)。
一、先搞清楚,loop 到底是个什么
这个词直译过来是「循环」,但别被名字唬住。它说的其实是一件很简单的事。
一个 loop,是一个能自己纠错的循环。AI agent 反复做动作、检查结果、调整方法,直到撞上某个具体的终点。
把一个 loop 拆开看,就四个步骤。

第一步,定一个目标,也就是「做完」长什么样,而且这个目标得是机器能判断的。
第二步,动手。agent 去改代码、执行构建、再改。
第三步,评估。拿编译器的报错、测试的结果、lint 的检查,去对照那个目标,看有没有达到。
第四步,反馈。没达到,就把错误塞回去当下一轮的输入,再走一遍。
Addy 反复强调一句话,这句也是整篇的题眼。
评估这一步,才是整个 loop 的命门。一个 loop 有多好,取决于那个判断它「有没有做完」的检查有多好。
二、两个核心构建块,goal 和 loop
在 Claude Code 里,这套循环被封装成了两个构建块,也就是两个最基础的命令。
goal,负责驱动一件有边界的事,一路推进,直到撞上设定的终点线。
loop,负责按时间反复运行,像个定时器,到点就触发一次。

一句话记下来。goal 是「把一件事做到做完」,loop 是「每隔一阵子来查一次」。两者可以单独用,也可以拼起来。
在更早的时候,这些构建块还没被工具内置,Addy 是靠手写 bash 循环来做这件事的。现在 Claude Code 和 Codex 都把它做成了现成命令,省掉了自己拼的功夫。
三、Claude Code 团队怎么给 loop 分类
Claude Code 官方团队发过一篇文章,把 loop 分成了四种。Addy 说这和他的实际用法对得上。

第一种,基于轮次(turn-based)。 每发一条 prompt,就是一轮。Claude 读代码、做修改、执行测试、把结果交回来,随后由人检查,再写下一条。这是最普通的手动模式,每个人都用过。
第二种,基于目标(goal-based)。 就是前面说的 goal。用命令把「做完」定义清楚,让 Claude 自己迭代,不用每轮都停下来问人。
第三种,基于时间(time-based)。 就是 loop。按固定间隔反复触发,适合那些任务不变、只有输入在变的事,比如每天早上总结消息。
第四种,主动式(proactive)。 最高的一层。由事件或计划触发,全程不用人参与,适合 bug 报告、issue 分诊、依赖升级这类定义清晰的周期性工作。
官方给的建议也值得记住。不是所有任务都需要复杂 loop,从最简单的方案开始,有选择地用这些模式。
四、goal 怎么用,语法就三块
goal 写起来不复杂,就三块内容拼成一条命令。

第一块是命令 本身,第二块是一个机器能检查的条件 ,第三块是一个边界,也就是最多试几次就停。
/goal 让 test/auth 里的测试全过、lint 也干净,或者最多试 20 轮就停
这里的门道在第二块,条件必须是机器能验的。Addy 给了两组对照。
能检查的条件,可以放心 loop。
所有测试通过
lint 干净
p95 延迟低于 300 毫秒
Lighthouse 分数 90 以上
没有类型报错
不能检查的条件,得自己动手。
把代码写得更干净
提升用户体验
让它感觉更快
把这个重构一下
「让代码更干净」这种话,机器没法判断做没做完,就别塞给 goal。反过来,「测试全过」是硬指标,机器一眼就能验。
条件越确定,goal 越好用。因为每做完一轮,会有一个独立的小模型去读这个条件,回答「过了」还是「没过」,没过就把 agent 打回去接着做。
五、loop 怎么用,像装了个定时闹钟
goal 是把事推到终点,loop 则是盯着某件事,按节奏反复查。
可以把它当成 cron,就是那个定时任务的工具。最适合轮询日志、监控外部状态、做「查岗」式的检查。

写一条 loop,语法是「间隔 + 要干的事」。
/loop 30m "检查 CI,把挂掉的修好"
/loop "整理新 issue" every 2 hours
间隔单位支持秒(s)、分(m)、时(h)、天(d)。最小间隔是一分钟。
有几个生命周期细节得记住。loop 是会话作用域的,关掉当前对话它就停了。周期性的 loop 创建七天之后会自动过期,第七天触发最后一次,随后删掉自己。
Addy 特意纠正了一个他之前记错的点。他以前跟人说是三天,实际上是七天。
六、该委托什么,该盯什么,这才是重点
命令本身容易上手,费心思的地方在于判断哪些任务能放心交出去。
Addy 每天同时跑五到十个 agent,最多五个并发。像「功能做完了,把文档补一下」「查一下测试覆盖够不够」,这种相对安全,他可以放手。
但有两种情况他会盯得很紧。一种是复杂问题,哪怕给了不错的停止条件,agent 仍可能做不对。另一种是任务碰到敏感地带,认证、安全、财务,哪怕只沾一点,他都会亲自盯着。

他还强调一个习惯。别让做这件事的 agent 自己来判定这件事做得好不好。让一个子 agent 去起草改动,再让另一个独立的 agent 去验证。
因为一个 agent 可能对某个维度很自信,却漏掉另一个维度。比如它觉得性能没问题,可它只测了桌面端,要命的是移动端。
这个亏 Addy 是亲身吃过的。有一次他让 agent 去研究竞品、整理清单、在本地做几个 PR 试试。他读了那份调研,却没仔细看实现,差点就把改动 push 出去了。等他回头仔细看,才发现这些改动会给用户带来大量额外的复杂度,收益却没那么大。
委托了任务,差点连判断也一起委托了出去。
他给的提醒是,时不时要问自己一句,有没有把品味和判断一起交给了 agent。任务可以交出去,但标准得自己回来核。
七、他每天跑的那个工作流
有一个例子能把上面这些串起来。Addy 维护的开源项目每天能收到八十到九十个待处理的 pull request。现在有了 loop,他这么干。
/loop every 1h "检查 GitHub 仓库有没有新的 open issue,给一份按紧急程度排序的总结"
每隔一小时,让 agent 去查一次,把新冒出来的 issue 整理好。这就是一个典型的 loop,任务是固定的,变的只有输入。

多个这样的 agent 并行跑的时候,各自待在相互隔离的 git worktree 里,互不干扰。
八、把 loop 和 goal 拼起来用
这两者还能组合。用 loop 去定时触发检查,再用 goal 去解决问题。
/loop every 24h "检查 GitHub 上标记为 bug 的 issue。如果有,用 /goal 去实现修复,直到本地测试全过,然后 push 分支"
Addy 给这个组合配了个比喻。
loop 提供心跳,goal 提供解决问题的双手。

一句话讲透。loop 负责「有没有新任务」,goal 负责「把任务做完」。
在 PR 分诊这个场景里,loop 和 goal 一起工作,最后得到的是一个能持续接纳 PR 和 issue 的系统。哪些明显不合规的直接关掉,哪些要推进的继续跟进,整套东西每天自己转。
九、loop 带不来什么,边界要清楚
loop 不是万能的。Addy 说,如果对「完成」意味着什么没有清晰概念,那这个模式就不适合。
一个经典的不适合的例子,是「一直做,直到这个 UI 变好看」。好看对谁来说好看,怎么评估,都不清楚。
需要人类品味、主观设计、开放式创意探索的任务,都不太适合交给 loop。反过来,当对目标有相当清晰的想法,loop 才是一个值得考虑的选项。

一个实用的判断标尺。能不能把「做完」写成一个机器能跑的检查,能,就可以 loop,不能,就自己上手。
十、几个细枝末节,别踩坑
最后是几个容易忽略的小地方。
一个经典迹象说明 loop 在原地打转,同一条命令被反复试来试去,结果没任何变化。同一条命令第三次给出的结果和第二次一样,就该停了。
周期性 loop 创建七天后过期,前面已经说过。会话关了它也会停,用 resume 或 continue 恢复会话,能把还在七天窗口内的周期任务带回来。要一个能活过会话的东西,就上 /schedule,它在云端跑。

另有几句很有用的话。如果每天早上已经有一个手动做的检查,那它就是第一个 loop。Addy 的第一个 loop,就是那一堆 pull request。
小结

loop engineering 这套东西,本质是把「重复盯着」这件苦差事,从人手里挪给机器。
核心就三句话。goal 把一件事做到做完,loop 到点来查一次,验收交给独立的 checker,别让做事的自己打分。
决定一个 loop 好不好用的,是那个判断它「做完没有」的检查,写得好不好。
如果正在维护一个活跃的仓库,每天被 issue 和 PR 淹没,值得先拿一个小检查试起来。挑一件每天手动在做的事,把它写成一条 loop,让 agent 到点自己去查。跑顺了,再考虑把 goal 接进来,让查出来的任务也能自动做完。这套流程值得收藏,动手前翻出来对一遍。
#AI编程 #循环工程 #loop #ClaudeCode #AgentSkills #自动化 #效率工具 #开发者 #开源 #技术入门