Claude Code 扩展点:goal —— 让 AI 不干完不罢休
·
一句话:
/goal设定一个"完成条件",Claude 会跨多个 turn 自主干活,直到条件满足才停——不用你每轮手动指挥。
1. 是什么
/goal 是 Claude Code 的会话级自动化命令(v2.1.139 起引入)。默认模式下,你给一条指令,Claude 干完一轮就停下来等你;/goal 则是给 AI 一个可验收的"终点",让它自己一轮轮推进,直到终点达成。
| 模式 | 停下的时机 | 谁来判定 |
|---|---|---|
| 默认(单条指令) | 一轮干完就停 | 无判定,等你下一步 |
| Skill | 模型按指令执行完 | 模型自己 |
/goal |
完成条件满足才停 | 独立评估器 |
“不干完不罢休"的"不罢休”,靠的不是模型自觉,而是每轮一个独立评估器在验收。
2. 原理:做事与验收分离
/goal 的核心机制是一个"干活的 + 验收的"双角色循环:
- 你执行
/goal <完成条件>,条件本身就是要达成的目标 - Claude 开始干活(一轮 = 一次完整推进)
- 每完成一轮,系统把「你的条件 + 到目前为止的对话记录」发给一个独立的小型快速评估模型(默认 Haiku),判断条件是否满足
- 不满足 → 评估器返回具体原因(如"
test_login.py还有 2 个 failure")→ 这个原因注入下一轮上下文 → 继续干 - 满足 → 目标自动清除,任务结束
关键设计:做事的人和验收的人不是同一个模型,避免"自己判自己"的偏差——这跟代码评审要独立于实现是同一个道理。
评估器本身不调工具、不读文件、不跑命令,只依据对话里已经呈现的内容判断——这一点直接决定了条件该怎么写(见第 6 节)。
3. 命令与用法
| 命令 | 作用 |
|---|---|
/goal <条件> |
设定目标(新目标会替换旧目标) |
/goal(不带参数) |
查看状态:条件、耗时、已评估轮数、token 消耗、评估器最新原因 |
/goal clear |
在条件满足前手动清除(stop / off / reset / none / cancel 均为别名) |
运行时以浮层面板实时显示:已耗时 / turn 数 / token 数。
可用场景:交互式会话、-p(headless 单次)、Remote Control。
4. 实战操作
4.1 迁移模块,直到所有调用点编译通过
/goal 把 foo 模块迁移到新 API,直到整个项目编译通过,且 npm test 全部通过。不要改动其他模块的对外接口。
4.2 修复类型错误,直到零报错
/goal 修复所有 TypeScript 类型错误,直到 tsc --noEmit 零报错。不要引入 any 绕过类型检查。
4.3 实现设计文档,直到验收标准全满足
/goal 按 design.md 实现功能,直到其中列出的验收标准全部满足。不要改动 design.md 本身。
4.4 清理 issue 积压,直到队列清空
/goal 逐个处理标记为 fix-me 的 TODO,直到代码库里没有剩余的 fix-me。
5. 编写有效目标的三要素
一个能收敛的好目标,通常含三部分:
| 要素 | 说明 | 反例 → 正例 |
|---|---|---|
| 可测量的终态 | 测试结果、构建退出码、文件数、空队列等 | “优化代码” → “npm test 退出 0” |
| 明确的检查方式 | 让终态在对话里可被看到 | “让代码更好” → “tsc --noEmit 零报错” |
| 重要约束 | 过程中不能动的东西 | — → “不改其他测试文件” |
模糊目标(“优化一下代码”)会让循环无法收敛,变成昂贵的死循环——因为评估器永远判"不够好"。
6. 重要限制
- 评估器不调工具、不读文件、不跑命令:只依据对话里呈现的内容判断。所以条件必须写成"Claude 自己的输出能证明的东西"——比如"所有
test/auth测试通过",因为测试结果会出现在记录里;而"代码质量很高"这类就没法被验证。 - 条件最长 4000 字符:够写清终态 + 检查方式 + 约束,但别写成一篇文章。
- 不改变权限:默认权限模式下仍会逐次询问工具调用;想无人值守,配合 auto mode 使用。
- 加熔断:可在条件里追加"20 轮内完成否则停止",避免跑飞。
7. 与 /loop、Stop hook、auto mode 的区别
| 机制 | 触发 / 停止方式 | 定位 |
|---|---|---|
/goal |
每轮结束由评估器确认条件满足才停 | “盯着条件,不达成不罢休” |
/loop |
按固定时间间隔重复执行 | "定个闹钟"式的周期重复 |
| Stop hook | 存于配置文件,由你的脚本 / 提示决定是否停 | 旁路脚本控制 |
| auto mode | 只在单轮内自动批准工具,不开新轮次 | 消除"每步"的提示 |
/goal 与 auto mode 是互补关系:auto mode 消除每步的工具提示,/goal 消除每轮的提示。
8. 如何调试
- 目标卡住不收敛 → 先
/goal clear停掉,把条件写具体(补"检查方式"和"约束") - 想知道评估器为什么一直不满足 →
/goal(不带参)看"评估器最新原因" - 评估器不给具体原因 → 说明条件里没有"对话里可判断的证据",补上可测量的终态
- 设了
disableAllHooks/allowManagedHooksOnly时若/goal挂起,属早期版本 bug(2.1.x 已修),升级即可
更多推荐


所有评论(0)