返回 FEED
AGENT2026-06-09

Loop Engineering:你不再 prompt Agent,你设计让 Agent 自己跑的循环

过去两年,用 Coding Agent 的姿势一直是你说一句、看它答一句、再说一句。Agent 是工具,你是手柄,一轮接一轮地握。Addy Osmani 在这条 thread 里说:这一段基本结束了。你现在不是 prompt 它的人,你是为它写循环的人。

这不是抽象口号。OpenAI 的 Steve Steinberger 最近在多个场合说过一句话被反复引用:「你不应该再 prompt coding agent 了,你应该设计让 agent 跑起来的 loop。」Anthropic Claude Code 负责人 Cat Wu 也说过类似意思:「我已经不 prompt Claude 了,我有 loop 在跑、自己决定下一步做什么。我的工作是写 loop。」

Addy 把这种工作方式叫 Loop Engineering——它比 Harness 概念再高一层:Harness 是单个 agent 跑的环境,Loop 是给多个 agent 装上定时器、spawn 小帮手、自我喂养的整套系统。

一个能跑的 Loop 需要五件东西 + 一处外部记忆

Addy 列出的清单,Codex 和 Claude Code 都已经集齐了,只是叫法略有不同。

1. Automations——按时间表自动触发 discovery 和 triage 的能力。Codex 的 Automations tab 让你定项目、prompt、周期、本地还是后台 worktree 运行;没发现东西的 run 自己归档,发现东西的进 Triage inbox。Claude Code 同位置的能力叫 /loop、cron、hooks,也可以丢到 GitHub Actions 让笔记本合上之后还在跑。两者都允许把 skill 当作可复用的子任务调用,schedule 里贴一大坨 prompt 早晚要腐烂。

值得单独提的是 /goal——它和 /loop 不是同一类原语。/loop 是按周期重跑;/goal 是反复跑直到你写下的可验证条件为真,每轮有一个独立小模型检查「做完没」,写代码的 agent 不是给自己打分的那个。Codex 也有 /goal,同名同语义,是这篇文章反复出现的一个 pattern:两个产品的关键原语正在趋同

2. Worktrees——两个 agent 一起改文件早晚要撞车。Codex 内置了 worktree 支持,多线程同时打同一个 repo 互不踩;Claude Code 用 git worktree + --worktree flag + isolation: worktree 的 subagent 配置,效果一样。Addy 提醒:worktree 解决的是机械层面的碰撞,但 review 带宽决定你能并跑多少个 agent——天花板还是人

3. Skills——别再每个 session 给 agent 重新解释一遍项目背景。Codex 和 Claude Code 共用同一套 SKILL.md 目录格式(含 instructions、metadata、可选 scripts/references/assets),用 $/skills 显式调用,或者任务描述命中时自动触发。Addy 特意点了一句:写一个又紧又无聊的描述,比写一个聪明的描述有用——自动匹配靠的是关键词命中,不是审美。

Skills 真正的价值是把「intent」固化下来,避免 agent 每次冷启动都用「自信的猜测」填你的漏洞。Convention、build 步骤、「我们不这么干因为上次出过事」——写一次,agent 每次跑都读。没 skills 的 loop 每轮从零推演整个项目,有 skills 的 loop 是在 compounding

4. Plugins 和 Connectors——Skill 是写给自己的「作者格式」,Plugin 是打包分发的形态——跨 repo 共享、把一组 skill 打包装一次就到位的形态。Connectors 基于 MCP,让 agent 读 issue tracker、查数据库、调 staging API、往 Slack 推消息。Codex 和 Claude Code 都原生支持 MCP,所以为一边写的 connector 在另一边基本能直接跑

这就是关键差异:一个普通 agent 会说「这是修复」然后停手;一个 loop 能自己开 PR、关联 Linear ticket、等 CI 绿了在频道里 ping 一下。Connectors 是 loop 能动在你真实环境里、而不只是说「如果我能动的话会怎么动」的根本原因。

5. Sub-agents——Loop 里最有用的结构性能力是「写的人」和「查的人」分开。写代码的模型给自己的作业打分永远是「nice」。第二个 agent 换一份 prompt、可能换一个模型,能抓住第一个把自己说服过去的东西。Codex 在 .codex/agents/ 用 TOML 定义(名称、描述、instructions、可选 model 和 reasoning effort),所以安全审查可以是强模型高 effort,explorer 可以是快速只读模型。Claude Code 的 .claude/agents/ 和 agent teams 是同一套语义。

常规拆分是 explore / implement / verify against spec。Sub-agent 多烧 token,因为每个都跑独立的模型和工具调用,所以花得起钱的地方才上两个意见。值得玩味的是,Claude Code 的 /goal 本质上也是这个模式在「停止条件」上的应用:判定「loop 完没完」的是一个新模型,不是干活的模型。Maker-checker 拆解被推到了循环终止判定这一层。

一处外部记忆:让 Loop 跨 Run 持续

第六样东西——一个 Markdown 文件、Linear board、或者任何活在单次对话之外、记录「做过什么、下一步是什么」的状态文件。听起来太土,但每个 long-running agent 都靠这个。模型在 run 之间会忘干净,记忆必须落盘,不能藏在 context 里。Agent 会忘,repo 不会。

真实形态:早间三十分钟

Addy 描述他常用的一个工作流:

早间一个 automation 跑起来,调用 triage skill 读昨天的 CI 失败、open issues、最近 commits,把发现写到 Markdown 或 Linear board。每个值得处理的发现,loop 开一个隔离 worktree,派一个 sub-agent 起草修复,第二个 sub-agent 拿 project skills 和现有测试对照审查。Connectors 让 loop 自己开 PR、更新 ticket;loop 搞不定的进 Triage inbox 等人。状态文件是整套的脊椎——明天早上的 run 从今天停下的地方接上。

你设计了一次,没有 prompt 其中任何一步。 这条 loop 在 Codex 和 Claude Code 里都能跑,因为零件是同一批零件。

三件 Loop 没解决、反而更尖锐的事

Loop 改变了工作,没把人从工作里删掉。三件事随着 loop 变好而变尖锐,不是变容易。

验证还是你的责任。 一个无人值守的 loop 也是一个无人值守的、正在犯错的 loop。把 verifier sub-agent 和 maker 拆开的全部意义,就是让 loop 的「做完了」三个字有份量——但「做完了」终究是声明,不是证明。Addy 反复说同一句话:你的工作是交付你确认过能跑的代码

理解会腐化。 Loop 越快地产出你没写的代码,「存在的东西」和你「实际掌握的东西」之间的 gap 就越大。loop 让这个 gap 长得更快,除非你读 loop 写的东西

最舒服的姿势往往最危险。 Loop 自跑之后,最容易掉进「不再持有判断、原样收下它给的」的状态。Addy 称之为 agentic design debt设计 loop 是药,但只在有判断的时候是药;用来逃避思考的时候是催化剂。同一个动作,方向相反

两个人搭出完全一样的 loop,能拿到完全相反的结果。一个用来在「自己已经懂」的工作上加速;另一个用来避开「弄懂工作」本身这件事。Loop 不知道这个差别,你知道。

Loop 设计为什么比 Prompt 难

这是 Addy 整条 thread 的收束:loop 设计比 prompt 难,不是更容易。杠杆点迁移了,但工作没变容易。你交付代码,你确认过它能跑,你读过它、知道它为什么这么跑——这三件事 loop 替你做不了,sub-agent 也替你做不了。

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