/goal 是什么
/goal 命令用于设置一个完成条件,Claude 会持续工作直到该条件满足,无需你每一步都手动提示。每次 Claude 完成一轮操作后,会有一个小型快速模型(评估器)来检查条件是否成立。如果不成立,Claude 会自动开始新一轮工作,而不是将控制权交还给你。一旦条件满足,目标会自动清除。
简单说:以前你要一直发”继续”,现在你说清楚”做到什么程度算完”,它就自己跑到终点。
版本要求: 需要 Claude Code v2.1.139 或更高版本。
适用场景:有可验证终态的实质性工作——
- 将模块迁移到新 API,直到所有调用点编译通过且测试通过
- 按设计文档实现功能,直到所有验收标准满足
- 将大文件拆分为聚焦的小模块,直到每个模块都在体积预算内
- 处理标记的 Issue 积压,直到队列清空
核心要点:如何编写有效的 condition(条件)
评估模型只能根据 Claude 在对话中暴露出的内容来判断你的条件。它不会独立运行命令或读取文件,因此条件必须是 Claude 自己的输出能够证明的事情。例如,“test/auth 中的所有测试都通过”是有效的,因为 Claude 会运行测试,结果会出现在对话记录中供评估器读取。
一个能经得起多轮检验的 condition 通常具备:
- 一个可量化的终态:测试结果、构建退出码、文件数量、空队列
- 一个明确的验收/检查方式:Claude 如何证明它,例如“
npm test退出码为 0”或“git status是干净的” - 关键约束:在达成目标过程中不能变化的东西,例如“过程中不能修改其他测试文件”
提示:条件最长可写 4000 字符。要限制目标的运行时长,可以在条件中加入轮次或时间子句,例如“或者在 20 轮后停止”。
最佳实践与示例
1. 修复测试直到全部通过
/goal npm test 全部通过,退出码为 0,且没有修改 src/ 以外的文件
适合:修了一个 bug 导致一批测试挂掉,让它自己修到绿灯。
2. API 迁移重构
/goal 将 src/api/ 下所有调用从 axios 迁移到 fetch,且 npm run build 成功无报错
适合:换掉某个 HTTP 库,调用点散落在多个文件里,手动改很烦。
3. TypeScript 类型错误清零
/goal npx tsc --noEmit 退出码为 0,项目中不再有 any 类型的滥用(src/ 目录下)
适合:想给老项目加 strict 模式,让它把所有 TS 报错修干净。
4. 实现功能直到验收测试通过
/goal 实现 PRD.md 中描述的用户登录功能,所有 test/auth/login.test.ts 中的用例通过,且 coverage 不低于 80%
适合:拿着 PRD 或需求文档,让它写到达标为止。
5. Lint 清零
/goal npx eslint src/ 无 error 输出(warning 可以有),且 git status 显示没有新增文件
适合:接手了一个 lint 很乱的项目,清干净 error。
命令基础使用与生命周期
每个会话只能有一个活跃目标。同一命令根据参数不同可以设置、查看和清除目标。
设置目标
运行 /goal 后跟你想满足的条件即可(参见上方示例)。设置目标后会立即启动一轮工作,条件本身即为工作指令。目标活跃期间,◎ /goal active 指示器会显示目标已运行了多长时间。
查看状态
不带参数运行 /goal,可以查看:条件内容、已运行时长、已评估轮次、当前 Token 消耗以及评估器最新给出的理由。
清除与恢复
- 提前清除:运行
/goal clear(或别名stop、cancel等)可在条件满足前移除活跃目标。 - 恢复目标:当会话结束时目标仍在活跃状态,使用
--resume或--continue恢复该会话时,目标会被恢复。
非交互模式(后台运行)
/goal 支持非交互模式、桌面应用以及远程控制。配合 -p 设置目标时,会在单次调用中运行整个循环直到完成:
claude -p "/goal CHANGELOG.md 包含本周所有合并 PR 的记录"在非交互式目标中,使用 Ctrl+C 可以在条件满足前中断进程。
注意事项与系统要求
- 工作区信任:
/goal仅在你已接受信任对话框的工作区中运行,因为评估器是 hooks 系统的一部分。如果disableAllHooks在任何级别被设置,或托管设置里有allowManagedHooksOnly,/goal将不可用。 - 评估器机制:每次完成一轮后,条件和迄今对话会被发送到你配置的小型快速模型(默认是 Haiku)。如果结果是「否」,Claude 会继续工作并将原因作为下轮指导;如果是「是」,目标清除并记录。
- Token 消耗:评估模型每轮都会消耗一点 token,但相比主任务的消耗通常可以忽略不计。不过要注意别把目标设置得太开放然后让它跑一整夜。
与 /loop 及 Stop hooks 的对比
根据「什么触发下一轮」来选择保持会话持续运行的方式:
| 方式 | 下一轮触发时机 | 停止条件 | 适用场景 |
|---|---|---|---|
/goal | 上一轮完成后 | 模型确认 condition 已满足 | 有明确可验证终态的实质性任务 |
/loop | 预设时间间隔到达后 | 你手动停止,或 Claude 判定工作完成 | 独立于会话的定时重复执行任务 |
| Stop hook | 上一轮完成后 | 你自定义的脚本或提示决定 | 需要自定义确定性检查或评估逻辑时 |
注:Auto mode 本身只会在单轮内自动批准工具调用,两者是互补的——auto mode 消除了每步工具的提示,而 /goal 消除了每轮的提示。