/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(或别名 stopcancel 等)可在条件满足前移除活跃目标。
  • 恢复目标:当会话结束时目标仍在活跃状态,使用 --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 消除了每轮的提示。