Appearance
使用 /goal 命令可以设置一个完成条件,Claude 会在多个轮次中自动工作直到条件满足,适合迁移模块、实现设计文档等有可验证终态的任务。需要 Claude Code v2.1.139+,条件最长 4000 字符,评估由配置的小模型(默认 Haiku)完成。运行 /goal 无参数可查看当前状态;用 /goal clear 提前终止。
Claude Code /goal 命令:设定目标自动完成
通过
/goal设置完成条件后,Claude 会持续工作直到条件达成,无需每步手动提示。
/goal要求 Claude Code v2.1.139 或更高版本。
/goal 命令设定一个完成条件,Claude 会在多个轮次中持续向该目标前进。每次轮次结束后,一个快速小模型会检查条件是否已满足。如果未满足,Claude 会自动开始下一轮,不返回控制权给用户。条件一旦达成,目标自动清除。
使用 /goal 处理有明确可验证终态的大型任务:
- 将模块迁移到新 API,直到所有调用点编译通过且测试通过
- 实现设计文档,直到所有验收条件成立
- 将大文件拆分为专注的模块,直到每个模块都在大小预算内
- 处理标记的问题积压,直到队列为空
本页内容包括:
与其他自主工作流比较
有三种方式可以在提示之间保持当前会话持续运行。根据什么触发下一轮来选择:
| 方式 | 下一轮开始时机 | 停止条件 |
|---|---|---|
/goal | 前一轮结束 | 模型确认条件已满足 |
/loop | 时间间隔到达 | 你手动停止,或 Claude 认为工作已完成 |
| Stop 钩子 | 前一轮结束 | 你自定义的脚本或提示决定 |
/goal 和 Stop 钩子都在每轮结束后触发。/goal 是会话范围的快捷方式:你输入一个条件,它只在当前会话中生效。Stop 钩子存在于设置文件中,作用于其范围内的所有会话,并且可以运行脚本进行确定性检查,或运行提示进行模型评估。
自动模式 本身只自动批准单轮内的工具调用,不会开启新的一轮。Claude 在判断工作完成时停止。/goal 增加了一个独立评估器,在每轮后检查你的条件,因此完成状态由一个新的模型(而非正在工作的模型)来判断。两者互补:自动模式消除每个工具的确认提示,/goal 消除每轮的手动提示。
以上方式都让当前会话持续运行。你还可以安排独立于任何打开会话的工作,如夜间测试或早晨分类。参见调度选项了解云例程和桌面定时任务。
使用 /goal
每个会话只能有一个活跃目标。根据参数不同,同一个命令可以设定、检查或清除目标。
设定目标
运行 /goal 后跟你想要满足的条件。如果已经有一个活跃目标,新目标会替换它。
text
/goal test/auth 下所有测试通过,且 lint 步骤干净设定目标会立即开始一轮,以该条件本身作为指令。你无需再发送单独提示。目标活跃时,会显示 ◎ /goal active 指示器及已运行时长。
每轮结束后,评估器会返回一条简短理由,说明条件是否满足。最新的理由会显示在状态视图和对话记录中,这样你就能知道 Claude 下一步在向什么目标努力。
目标会持续运行直到条件满足或你运行
/goal clear。不带参数运行/goal可查看当前轮次和已消耗的 token 数。
编写有效条件
评估器会根据 Claude 在对话中呈现的内容来判断你的条件。它不会独立运行命令或读取文件,因此条件应写成 Claude 自身输出能够证明的形式。"test/auth 下所有测试通过"可行,因为 Claude 会运行测试,结果会出现在对话记录中供评估器读取。
一个能跨多轮有效持续的条件通常包含:
- 一个可衡量的终态:测试结果、构建退出码、文件数量、队列是否为空
- 明确的验证方式:Claude 应如何证明条件已满足,例如 "
npm test退出码为 0" 或 "git status是干净的" - 需要约束的事项:任何在过程中不得改变的内容,例如 "不修改其他测试文件"
条件最长 4000 字符。
要限制目标的运行时长,可以在条件中包含轮次或时间子句,例如 "或在 20 轮后停止"。Claude 每轮会报告该子句的进度,评估器从对话中判断。
检查状态
不带参数运行 /goal 查看当前状态。
text
/goal如果目标活跃,状态会显示:
- 条件
- 已运行时长
- 已评估的轮次数
- 当前 token 消耗
- 评估器的最新理由
如果当前无活跃目标,但会话中之前的目标已达成,状态会显示已达成的条件及其时长、轮次数和 token 消耗。
清除目标
运行 /goal clear 可在条件满足前移除活跃目标。
text
/goal clearstop、off、reset、none 和 cancel 可以作为 clear 的别名接受。运行 /clear 开始新对话也会移除任何活跃目标。
在有活跃目标时恢复会话
会话结束时仍活跃的目标,在该会话通过 --resume 或 --continue 恢复时会重新生效。条件会保留,但轮次数、计时器和 token 消耗基线都会重置。已达成或已清除的目标不会恢复。
非交互运行
/goal 可以在非交互模式、桌面应用和远程控制中使用。使用 -p 设置目标会在单次调用中运行循环直到完成:
bash
claude -p "/goal CHANGELOG.md 包含本周合并的每个 PR 的条目"使用 Ctrl+C 中断进程可在条件满足前停止非交互目标。
评估机制工作原理
/goal 是一个会话范围的基于提示的 Stop 钩子的封装。每当 Claude 完成一轮,条件及其到目前为止的对话会被发送给你配置的小模型(默认为 Haiku)。模型返回是/否的判定和简短理由。"否"指示 Claude 继续工作,并将理由作为下一轮的指导。"是"则清除目标,并在对话记录中记录一个已达成条目。
评估器在你当前会话配置的 provider 上运行。它不会调用工具,因此只能根据 Claude 已在对话中呈现的内容进行判断。
评估 token 按照你配置的 provider 的小模型计费,相对于主轮次的消耗通常可以忽略不计。
要求
/goal 只在你已接受信任对话框的工作空间中运行,因为评估器属于钩子系统的一部分。当任何设置层级设置了 disableAllHooks,或在托管设置中设置了 allowManagedHooksOnly 时,/goal 不可用。在这些情况下,命令会告诉你原因,而不是静默地不执行任何操作。
参见
- 使用
/loop重复运行提示:按时间间隔重新运行,而不是直到条件满足 - 基于提示的钩子:当需要自定义评估逻辑时编写自己的 Stop 钩子
- 自动模式:自动批准工具调用,使每个目标轮次无人值守运行
- 调度比较:独立于任何打开会话按计划运行工作
常见问题
/goal 和 /loop 有什么区别?
/goal 在每轮结束后立即检查自定义条件,条件满足才停止。/loop 按时间间隔重复执行指定的提示,直到你手动停止或 Claude 认为工作完成。两者都会让会话持续运行,但触发下一轮的条件不同:/goal 基于条件评估结果,/loop 基于时间。
如何编写有效的 /goal 条件?
条件应写成 Claude 的输出可以证明的形式,比如“所有测试通过”或“git status 干净”。避免让评估器去运行命令或读取文件(它不会)。加入轮次或时间限制(如“或 20 轮后停止”)来限制执行时长。条件最长支持 4000 个字符。
/goal 在非交互模式下怎么运行?
使用 -p 参数启动时带上 /goal 条件即可,例如 claude -p "/goal 完成迁移"。Claude 会在单次调用中循环运行直到条件满足。要提前停止,用 Ctrl+C 中断进程。