Agent · AI 工程
用 /loop × goal 编排任务
/loop 是让一段 prompt「反复醒来」的骨架,goal 是写在 prompt 里的「何时停」判据。把这两样配起来,Claude 就能自己盯着一件事、干一步、量一次,一直干到达标为止——而不是跑个没完,也不是干一半停手。本文用 Akke 的真实场景讲三种落法,以及跑之前必须焊死的四道护栏。
篇幅 6 章 · 约 8 分钟
受众 用 Claude Code 编排任务的人
主线 两词之别 · 三种形态 · goal 心智模型 · 三类用法 · 四道护栏
先纠一个前提 · Claude Code 里没有独立的 /goal 命令。真正能落地的「loop + goal」= 用 /loop 的自定节奏模式,把一个明确的收敛目标写进 prompt 当停止条件。所以这篇讲的是一种用法,不是两个命令。
这套用法之所以容易讲不清,是因为大家把 loop 和 goal 当一回事。其实它俩管的是完全不同的两件事:
/loop = 骨架
一个调度 / 迭代机制,让同一段 prompt「反复醒来执行」。它回答的是——多久干一次、干几轮。
×
goal = 终点
不是命令,是你写在 prompt 里的收敛判据 / 停止条件。它回答的是——干到什么程度算完、何时停。
一句话:loop 给「反复」,goal 给「终点」。
没有 goal 的 loop 很危险 · 它会永远转下去(或一直撞到系统的轮次硬上限才停),既烧 token 又可能悄悄跑偏。有 goal 的 loop 才会在达标那一轮自己喊停。goal 不是可选项,是刹车。
同一个 /loop 命令,传不传时间间隔,行为完全不同:
🕐
固定间隔
每 N 分钟跑一次
已知该多久查一次,用来轮询外部状态。到点就跑,不管有没有变化。
/loop 5m /akke-version-sync
🎯
自定节奏
不传间隔 · 自己定步调
每轮干完,Claude 自己判断该不该继续、隔多久再来。这是「loop × goal」的主场。
/loop 盯着部署,绿了验证生产就停
⏰
一次性定时
某个时刻跑一次
不是循环,是延后执行一次。严格说不算 loop,但同一入口能安排。
/loop 明早 9 点跑一次日报
底层机制 · 自定节奏模式背后是
ScheduleWakeup——Claude 每轮结束时给自己「设个闹钟」,决定多久后再醒来。你不用直接碰它,写好 prompt 里的 goal 就行。想彻底搞清
/loop、
/schedule、Routine、Cron 这一堆词的区别,看姊妹篇
《Cron / Routine / Schedule 辨析》。
每一轮 loop,内部其实都在跑这个循环体——干一步,量一次,再决定停还是续:
所以你给 loop 的 prompt,必须显式包含三样东西,缺一样它就跑不对:
① 每轮干什么「一步」 —— 把大任务切成可反复推进的小步,别指望一轮干完。
② goal 的可判定判据 —— 必须机器可验证:数值达标 / 队列清空 / endpoint 返回 200。不能是「感觉差不多了」。
③ 到判据就停 —— 明确写「达到 X 就结束 loop」,否则它不知道终点在哪。
为什么强调「可验证」· 这正好接上团队的 verify-before-claim 铁律——loop 每轮声称「这步做完了」之前,必须拿出证据(grep 命中 / 测试输出 / curl payload)。判据可验证,loop 才停得踏实,你也才敢信它的结论。
同样是「loop × goal」,Akke 里有三种典型落法,区别就在 goal 是什么:
A · 轮询型固定间隔
goal = 外部状态达成(CI 绿 / 部署完 / PR 合了)
适合「我干不了活,只能等外部变化」的场景:盯 fly-worker 部署、supabase-migrate、PR 的 claude-review 绿灯。每轮就是查一次状态、判断到没到。
/loop 3m 查最新 CI run:# 每轮一步
in_progress → 继续等
success → curl 生产 endpoint 验证改动已上,然后停
failure → 拉 log 定位真错、告诉我,停
节奏坑 · CI 要 8 分钟才结束,你用 60s 轮询会白刷 8 次、还每次撞掉 prompt 缓存。规则:5 分钟内的等待用 ≤270s(缓存不掉),要等更久直接 1200s+(一次缓存 miss 换一段长等待);别卡在 300s 整——最不划算。
B · 指标收敛型自定节奏
goal = 某个数值达标(时效性 >60% / 回复率 →10%)
Akke 那批带数值目标的任务天生是这形态:评论→抓取时效 <5min 占比 >60%、获客回复率 5%→10%、知识类视频源提分。每轮测量→改一步→再测,达标才停。
/loop 目标:时效 <5min 占比 >60%。每轮:
① 跑脚本测当前占比 # 真测量,贴输出
② 只改一处(poller 间隔 / 并发 / claim 逻辑)
高危路径开 PR,不直推 main
③ 推 Lark 技术频道贴前后数字
④ 占比 >60% 连续两次成立 → 停
关键 · goal 是那个数字,不是「我改完了」。每轮必须真跑脚本测量并贴出结果——这既是停止判据,也顺带满足 verify-before-claim。
C · backlog 磨盘型自定节奏
goal = 某个队列清空(中低优任务全 done)
就是「让 loop 帮我啃掉 Lark 里的中低优 backlog」。goal = 队列空,天然收敛。每轮拉一条未完成子任务,只推进一步,达到 DoD 才标完成。
/loop 目标:清空 tasklist 840e… 的所有中/低优任务
① 拉一条未完成任务的下一个未完成子任务
② 只推进一步:调研 / 写 doc / 开 PR 草稿
③ 达到该子任务 DoD 才 lark task +complete
④ 推 Lark 卡片汇报进展
⑤ 中低任务全清空 → 停
别硬塞净新 feature ·「小红书搬运到抖音」「富媒体回答」这类全新功能,得先 brainstorming 把方案对齐再进 loop。loop 只擅长判据明确、机械推进的活;对着没定义的需求盲跑,它会自说自话瞎写。
自动化跑得越久,出事的代价越大。在 Akke 这个仓里放 loop 之前,下面四条不能省——它们直接来自团队 CLAUDE.md:
| 护栏 | 为什么 | 怎么做 |
高危路径走 PR 不 autonomous merge |
llm* / api/cron/** / migrations/** / auth/** / vercel.json 一改就上线,直推风险高 |
loop 把活干到「PR 就绪」即止,推卡片等人工 ack 再合,不自动合到 main |
| 隔离 worktree 里跑 |
同目录有别的活跃会话时,直接在主 checkout 干会抢 HEAD、互相覆盖 |
loop 开始前切到独立 worktree,跟其他会话物理隔离 |
| 双指标心跳 |
「success 退出」≠「业务有效」——loop 可能空转,reconcile 跑了 0 行更新 |
同时落存活心跳(还在跑)+ 业务 delta(真有进展);连续 N 轮 0 进展要告警 |
| API 最小化 + 贴证据 |
每轮全量刷 Lark / 库会烧配额;空口标完成会骗过自己 |
批量拉、缓存 ID、精确过滤;每步声称「完成」前贴 grep / 测试 / curl 证据 |
一句话记 · loop 是「把活干到 PR / 报告就绪」的自动化,不是「自动合到线上」的自动化。让它产出可审查的成果、人来按最后一个按钮。
loop 不是万能钥匙。这三种情况别用 loop:
需要先对齐方案的新 feature → 单开会话走 brainstorming + PR,不是 loop。
只想跑一遍的批处理 → 直接跑脚本,别套 loop 骨架。
goal 说不清 / 不可验证 → 先把「完成判据」定义出来,否则 loop 永远停不下来。
把这页浓缩成一行——以后想让 Claude「自己盯着一件事干到好」,记这句就够:
用 /loop 搭骨架,
用一个 可验证的 goal 当刹车。
速记 ·
轮询型(固定间隔·等外部状态)·
指标收敛型(自定节奏·压数值达标)·
backlog 磨盘型(自定节奏·磨到队列空)——
三种都得先套上「高危路径 PR + worktree 隔离 + 双指标心跳 + 贴证据」四道护栏再跑。