让 Claude 朝着目标持续工作
用 /goal 设置完成条件,Claude 每回合后由评估模型检查,未达成就自动继续;与 /loop、Stop Hook 的区别,怎么写有效的条件,以及评估机制。
/goal 命令设置一个完成条件,Claude 会持续朝它努力,不需要你一步步提示。每个回合结束后,一个小而快的模型检查条件是否成立;如果它判断尚未达成,Claude 就开始下一回合,而不是把控制权还给你。
适合有可验证终点的大工作:把一个模块迁移到新 API,直到每个调用点都能编译且测试通过;按设计文档实现,直到所有验收标准成立;把大文件拆成聚焦的模块,直到每个都低于大小预算;处理带标签的 issue 积压,直到队列清空。
保持会话持续运行的三种方式
| 方式 | 下一回合何时开始 | 何时停止 |
|---|---|---|
/goal | 上一回合结束;交互式会话里,还有空闲时的检查或自动重试到期时 | 模型确认条件达成或判断不可能,或某个回合失败 |
/loop | 时间间隔到了 | 你停止它,或 Claude 认为工作完成 |
| Stop Hook | 上一回合结束 | 由你自己的脚本或提示词决定 |
/goal 和 Stop Hook 都在每个回合之后触发。/goal 是会话级的快捷方式:你输入条件,只对当前会话生效;Stop Hook 写在设置文件里,对其范围内的每个会话生效,还能运行脚本做确定性检查。单独的 auto 模式只在单个回合内批准工具调用,并不会开启新回合,Claude 判断工作完成就停;/goal 增加了一个独立的评估者,在每个回合后检查你的条件,让完成与否由一个全新的模型来判定。
使用 /goal
一个会话同时只能有一个目标,同一个命令根据参数设置、查看和清除它。
设置目标:/goal 后接你想满足的条件;已有活动目标时,新的会替换它:
/goal all tests in test/auth pass and the lint step is clean设置目标会立即开始一个回合,条件本身就是指令,不需要另发提示。目标活动期间,会显示 ◎ /goal active 指示器和已运行时长。目标不会改变你的权限模式:想让目标回合无人值守,在 auto 模式下运行 /goal;在 Manual 模式下,Claude 仍会在你的设置没有预先允许的工具调用前询问。评估者返回的每个结论都会显示在转录里,按 Ctrl+O 可以看它背后的原因。
写出有效的条件:评估者根据 Claude 在对话里呈现出的内容来判断你的条件,它不会自己运行命令或读文件,所以条件要写成 Claude 自己的输出能够证明的东西。一个在很多回合里都站得住的条件通常有:
- 一个可度量的终点:测试结果、构建退出码、文件数量、空队列
- 一个明确的检查:Claude 该如何证明,如「
npm test退出码为 0」或「git status干净」 - 重要的约束:路上不能改变的东西,如「没有其他测试文件被修改」
条件最长 4,000 个字符。想限制目标运行多久,在条件里加一个回合数或时间的从句,如 or stop after 20 turns,Claude 每个回合都会针对这个从句汇报进度,评估者据对话来判断。
查看状态:不带参数运行 /goal 查看当前状态。目标活动时显示:条件、已运行多久、已评估多少回合、当前 token 花费、评估者最近的原因。没有活动目标但会话早先达成过一个时,显示已达成的条件及其时长、回合数和 token 花费。
清除目标:运行 /goal clear 在目标解决之前移除它(stop、off、reset、none、cancel 也被接受为别名);运行 /clear 开始新对话时也会移除任何活动目标。
带活动目标恢复:恢复会话时,Claude Code 会恢复会话结束时仍活动的目标(在所有恢复途径上都是如此),带上条件,但重置回合数、计时器和 token 花费基线;不会恢复已达成或已清除的目标。
非交互运行:/goal 在非交互模式、桌面应用和 Remote Control 里都能用。用 -p 设置目标会在一次调用里把循环运行到完成:
claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"默认文本输出下,运行结束前不会打印任何东西,所以运行很多回合的目标可能看起来卡住了;加 --output-format stream-json --verbose 可以在循环运行时输出每条消息。按 Ctrl+C 可以在目标解决前停止非交互目标。
评估如何工作
/goal 是对会话级的、基于提示词的 Stop Hook 的封装。每次 Claude 完成一个回合,Claude Code 把条件和到目前为止的对话发给你配置的小而快的模型。它返回结论:尚未达成时,Claude 继续工作,并把原因作为下一回合的指导;已达成时,Claude Code 清除目标并在转录里记录一条已达成的条目。官方原文还讲了后台工作期间评估如何推迟、其他错误时目标如何重试或暂停等细节。