§09今天就动手:搭你的第一个Loop

Build Your First Loop Today

从一行/loop 起步,一层层加上分诊、状态文件、评判器、worktree和云端调度,最后给一张检查清单。

别想着一步到位

很多人一听loop engineering,脑子里立刻浮现Stripe那种每周1,300多个PR的流水线,然后觉得离自己太远,放弃了。

Stripe那套是终点。第一个loop小到几乎不像个系统就行,一个会定时帮你看一眼的小东西。

我的建议是,从一个/loop 定时任务开始。它是Claude Code自带的命令,门槛最低,跑起来就知道是怎么回事。

第一步:跑一个/loop

/loop 是2026年3月的2.1.71版加进Claude Code的,作用就一个:按时间间隔,把同一件事重跑一遍。它有三种形态,你按需要挑。

三种形态:

/loop 5m check the deploy:固定5分钟一次

/loop check the deploy:Claude自己决定节奏(1分钟到1小时之间),每轮结束会告诉你下一轮隔多久、为什么/loop:裸跑,执行项目里.claude/loop.md的内容;没有的话找~/.claude/loop.md;都没有就跑内置的维护任务时间单位是s/m/h/d,最小1分钟。它是会话级的,跑在你本机,会话关了它就停。

我10月在一个练手的小仓库里跑了一遍。仓库里有一个TODO.md ,写着一条待办「给clamp补一个下界测试」。

我输入:

/loop 1m 读 TODO.md:如果有没打勾的待办,挑第一条做掉、跑一遍测试、在 TODO.md 里打勾;如果全部打勾了,只回复一句「没有待办」

它先当场跑了一轮,把那条待办做掉、打了勾,然后每分钟醒一次。待办清空之后,每一轮就只回一句「没有待办」,三四秒结束:

Claude Code 2.1.287。每一轮开头那行Monitor event: AGENT_LOOP_TICK_todo就是闹钟,后面跟着它重读TODO.md、回复「没有待办」。

然后我在另一个终端里往TODO.md 追加了一条「给is_even补一个负数测试」,什么也没跟它说。下一分钟,它自己读到了这条,补了两条断言,跑测试,打勾:

我没在对话里说一个字,新待办是从文件里进来的。

我这一次看到的实现是Monitor起的后台脚本,30分钟到期,跟文档写的7天cron不一样(§06有截图),到期了想续就再起一次。停掉它,跟它说「把这个循环停掉」就行;固定间隔的cron任务也可以问「what scheduled tasks do I have?」看列表再取消。空转的那些轮次,每轮只花几秒钟。

第二步:让它读CI和issue,先做triage

光重跑一句话不算loop,得让它读点东西、做点判断。最朴素的起点是一个triage(分诊)任务。

你给它一个prompt,让它每天早上去看三样东西:昨天的CI有没有失败、有哪些新开的issue、最近的commit改了什么。看完,挑出值得处理的,列个清单。

到这一步,你已经有了loop最核心的两个零件:一个定时触发的发现机制,加一个会替你过一遍信息的分诊脑子。Addy把定时触发这一块叫automation(§04零件一)。

第三步:加一个状态文件,让它有记忆

分诊跑完,结果存哪?别让它留在对话窗口里,关掉就没了。开一个markdown文件,把每次的发现、处理到哪一步都写进去。

这个文件就是loop的记忆,它得落在磁盘上,不能只活在上下文里,提不提交进git都行(§03)。有了它,今天没处理完的事,明天这个loop醒来还能接着干。

不想用裸markdown的话,换成Linear看板、issue列表也行,道理一样:状态要活在单次对话之外。

第四步:加一个evaluator

Claude Code里现成的工具是/goal (2.1.139起):它跑到某个条件满足为止,判断条件成立的,是另一个没参与干活的模型。写条件记三条(实跑的命令和截图见§05):

写成对话里能被证明的样子。测试全部通过可以,代码质量好不行。

把你不想让它碰的东西写进去。我写了不改测试文件,它就主动跑了git status证明自己没碰测试。

带一个停止条款。结尾加上or stop after 6 turns ,跑不出来也会停。

Codex也有/goal ,命令名一样,还多了edit、pause、resume。

第五步:加worktree,让它并行

前面四步搭完,你已经有一个能自己跑的单线loop了。下一步,是让它能同时干好几件事。

办法是git worktree,同一个仓库开出几份互相独立的工作目录。Claude Code里有三个入口,别混了:

入口给谁开开在哪
claude --worktree 名字(或-w)你自己新开的这.claude/worktrees/名字/,分支
个会话worktree-名字
claude --bg "任务",或在claude后台会话改文件之前自动进自己的worktree
agents里派任务
子agent定义里写isolation: worktree子agent每个子agent一个临时worktree,没改动就自
动删

claude agents 是一屏看所有后台会话的视图,哪个在跑、哪个等你、哪个做完了,目前还是研究预览。记得把.claude/worktrees/ 加进.gitignore 。

隔离开,它们才能并行而不打架(§04零件二)。

第六步:离开电脑也跑

到这儿你的loop还绑在本机上。要关机也跑,现在有三条路:

路要什么注意
Cloud Routines(/schedule或claude.ai订阅登研究预览;最小间隔1小时;每次是干净的
录、GitHub仓库clone;除了定时,还能用API调用或GitHub事claude.ai/code/routines)
件触发
Desktop定时任务桌面版开着、电脑能读本地文件;可以勾选每次在独立worktree
开着里跑
GitHub Actions的schedule仓库和Actions额度跟Claude Code无关的老办法,最稳

Routines的官方文档里列了几个现成的用例:夜里整理backlog、告警进来自动开修复PR、按GitHub事件做代码审查、部署后校验、查文档和代码有没有对不上。不知道第一个云端loop做什么,就从这里挑一个。

Routines会在你的账号里建云端对象,这块我没建,表里的信息来自文档。

工具速查

上面用的命令都是Claude Code的。Codex能做同样的事,入口和叫法有的一样、有的不一样。这张表按官方文档和我本机的版本(Claude Code 2.1.287、Codex CLI 0.163.0)整理:

能力Claude CodeCodex
按时间/loop(本机、会话内)ChatGPT桌面app里的
重跑Scheduled tasks,自定义周期
用RRULE
跑到条/goal/goal(0.128.0起),带edit、
件满足pause、resume
--worktree、后台会话自动worktree、子agent的isolation:并行隔桌面app内置worktree,任务可
离选本地项目或新worktreeworktree
子.claude/agents/;Agent Teams是实验功能,默认关,要设.codex/agents/里的TOML定
agent义CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1
外部连MCP、PluginsMCP、Plugins
接
调用SKILL.md,/skill-nameSKILL.md,$skill-name
skill
关机也Cloud Routines(研究预览)ChatGPT网页和手机端的定时任
跑务、事件触发任务、Codex
Cloud

Cursor也有对应的东西:Cloud agents、Automations,9月10日还出了Projects(测试版),一个只做规划、不写代码的协调agent,把活派给云端agent去跑。这块我只看了它的changelog,没实测。

第一个loop检查清单

动手之前,对着这七条过一遍。缺哪条,你的loop就在那条上有风险。

要素问自己
发现源它定时去读什么?(CI、issue、commit、收件箱)
状态文件跨轮的记忆落在哪个磁盘文件上?
evaluator有没有一个独立的、不是干活那个agent的检查?
隔离并行的agent是不是各自一个worktree?
停止条款跑不出来时,它几轮、多久之后会自己停?(/goal里的or stop after N turns、循环的到期时
间)
token上限设没设花费的天花板?跑飞了谁拦得住?会不会用/usage看账?
人工复核哪一步停下来等你看一眼,而不是一路自动到底?
点

Loop Engineering

别再问我什么是循环工程

花叔 · AI Native Coder我一行代码都不会写,却用AI做出了AppStore付费榜Top 1的小猫补光灯,写了多本技术书。所有产品全部AI写的,我只负责想清楚要做什么。我始终相信:AI生成内容不稀缺,稀缺的是判断力。B站:花叔v公众号:花叔X:花叔YouTube GitHub官网Created by 花叔 · 2026年6月初版 · 10月更新所有橙皮书免费下载:huasheng.ai/orange-books