/goal 命令设置一个完成条件,Claude 会在没有你逐步提示的情况下持续朝着这个目标工作。每个回合后,一个小型快速模型会检查条件是否满足。如果模型判断条件尚未满足,Claude 会开始另一个回合,而不是将控制权返回给你。一旦条件满足、模型判断条件不可能满足或回合因需要修复的错误失败时,目标会自动清除。
对于具有可验证的最终状态的实质性工作,使用目标:
- 将模块迁移到新 API,直到每个调用站点都能编译并通过测试
- 实现设计文档,直到所有验收标准都满足
- 将大文件拆分为专注的模块,直到每个模块都在大小预算内
- 处理标记的问题积压,直到队列为空
比较保持会话运行的方式
三种方法可以在提示之间保持当前会话运行。根据应该启动下一个回合的内容进行选择:/goal 和 Stop hook 都在每个回合后触发。/goal 是一个会话范围的快捷方式:你输入一个条件,它仅在当前会话中活跃。Stop hook 存在于你的设置文件中,适用于其范围内的每个会话,可以运行脚本进行确定性检查或运行提示进行模型评估的检查。
Auto mode 本身在单个回合内批准工具调用,但不会启动新的回合。Claude 在判断工作完成时停止。/goal 添加了一个单独的评估器,在每个回合后检查你的条件,因此完成由一个新鲜的模型而不是执行工作的模型决定。这两者是互补的:auto mode 消除了每个工具的提示,/goal 消除了每个回合的提示。
使用 /goal
每个会话可以有一个活跃的目标。同一命令根据参数设置、检查和清除它。
设置目标
运行/goal 后跟你想要满足的条件。如果已经有一个活跃的目标,新目标会替换它。
◎ /goal active 指示器显示目标已运行多长时间。
目标不会改变你的权限模式。要让目标回合无人值守地运行,请在自动模式中运行 /goal。在手动模式中,Claude 在进行工具调用前仍会询问,这些工具调用是你的设置不允许的,例如上面的测试命令。
当目标活跃时,记录显示评估器返回的每个判决,你可以按 Ctrl+O 查看其背后的原因。状态视图也显示最近的原因,所以你可以看到 Claude 接下来要朝着什么工作。
编写有效的条件
评估器根据 Claude 在对话中呈现的内容来判断你的条件。它不会独立运行命令或读取文件,所以将条件写成 Claude 自己的输出可以演示的内容。“所有test/auth 中的测试都通过”之所以有效,是因为 Claude 运行测试,结果出现在记录中供评估器读取。
在许多回合中保持的条件通常具有:
- 一个可测量的最终状态:测试结果、构建退出代码、文件计数、空队列
- 一个陈述的检查:Claude 应该如何证明它,例如”
npm test退出 0”或”git status是干净的” - 重要的约束:在此过程中必须不改变的任何内容,例如”没有其他测试文件被修改”
or stop after 20 turns。Claude 每个回合都会针对该子句报告进度,评估器从对话中判断它。
检查状态
运行不带参数的/goal 可以查看当前状态。
- 条件
- 已运行多长时间
- 已评估多少个回合
- 当前令牌支出
- 评估器最近的原因
清除目标
运行/goal clear 可以在条件满足之前移除活跃的目标。
Goal cleared: 后跟条件以确认,或如果没有活跃的目标则打印 No goal set。
stop、off、reset、none 和 cancel 被接受为 clear 的别名。运行 /clear 启动新对话也会移除任何活跃的目标。
使用活跃目标恢复
当你恢复会话时,Claude Code 会恢复在会话结束时仍然活跃的目标。Claude Code 在每个恢复路由上恢复它:--continue、--resume 带有会话 ID、名称或记录文件路径,以及会话选择器。在 v2.1.239 之前,Claude Code 在除了 claude --resume 选择器之外的每个路由上恢复目标。
Claude Code 保留条件但重置回合计数、计时器和令牌支出基线。它不会恢复已经实现或清除的目标。
非交互式运行
/goal 在非交互式模式、桌面应用中工作,并通过远程控制工作。使用 -p 设置目标会在单个调用中运行循环至完成:
--output-format stream-json --verbose 以在循环运行时发出每条消息。
使用 Ctrl+C 中断进程以在条件满足之前停止非交互式目标。
评估如何工作
/goal 是会话范围的基于提示的 Stop hook的包装器。每次 Claude 完成一个回合时,Claude Code 会将条件和到目前为止的对话发送到你配置的小型快速模型,默认为 Claude API 上的 Haiku;在第三方提供商上,请查看你的提供商页面了解该平台的默认值。该模型返回三个判决之一,每个都带有简短的原因:
- 尚未满足:Claude 继续工作,并将原因作为下一个回合的指导。
- 已满足:Claude Code 清除目标并在记录中记录一个已实现的条目。
- 不可能:评估器判断该条件永远无法满足。Claude Code 清除目标并在记录中记录一个失败的条目以及原因。你不需要自己清除它。
当一个回合失败时
当一个回合失败时,如果错误是你必须修复的错误,Claude Code 会清除目标。在任何其他错误之后,目标保持设置。你必须修复的错误会清除目标
如果一个回合因为一个在你修复之前不会清除的错误而失败,Claude Code 会清除目标并打印一个警告,说明原因。警告以Goal cleared after an unrecoverable error 开头,以 Run /goal again to continue 结尾。修复原因,然后使用 /goal <condition> 再次设置目标。四种失败会清除目标:
- 身份验证失败,当 Claude Code 管理自己的凭证时。当主机为你管理凭证时,例如桌面应用、VS Code 扩展或云会话,Claude Code 会保持目标活跃,因为主机会自动恢复访问权限。
- 信用余额耗尽
- 一个自动压缩无法清除的上下文溢出
- 一个不可用的模型
其他错误重试或暂停目标
在任何其他失败之后,目标保持设置。在 Claude Code v2.1.269 或更高版本的交互式会话中,Claude Code 也会打印一行说明原因,并自动重试或等待你:- 重试:在倾向于自行清除的失败之后,例如服务器过载或连接断开,一个以
Goal still active开头的通知显示下一次尝试之前的等待时间。在三次自动重试之后,目标会暂停。 - 暂停:在重试只会重复的失败之后,例如 API 速率限制、claude.ai 使用限制或结束回合的 hook,一个以
Goal paused开头的通知说明原因。如果会话在使用限制重置时等待自动继续,Claude 会在那时恢复朝着目标的工作。
CLAUDE_CODE_GOAL_CHECKIN_MINUTES 设置为 0,这也会关闭检查。
后台工作延迟评估
如果一个子代理或后台 shell 命令在回合结束时仍在运行,Claude Code 会跳过该回合的评估。它在下一个没有后台工作运行的回合结束时进行评估。当后台工作完成时,Claude Code 会将结果作为新回合传递给 Claude,所以你不必提示。 一旦后台工作让目标等待了 30 分钟,就应该进行检查。在检查中,Claude Code 列出正在运行的任务,并要求 Claude 读取其输出,如果它们在进行中则继续等待,并修复或停止任何卡住的任务。在第一次检查之后,Claude Code 在每次后续检查之前等待两倍的时间,最多是第一个间隔的四倍:使用默认值,第一次检查后 1 小时,然后每 2 小时。Claude Code 以两种方式之一传递应该进行的检查,包括第一个:- 当回合结束时:Claude Code 在下一个工作仍在运行的回合结束时传递检查。在非交互式会话中,例如使用
-p启动的会话,这是 Claude Code 传递检查的唯一方式。 - 当会话空闲时:在交互式会话中,Claude Code 也会自己启动一个回合来传递检查,而不是等待你的下一个提示。如果后台工作已停止而没有报告结果,Claude Code 会要求 Claude 继续朝着目标工作。Claude Code 在你的提示之间每个目标最多启动三个空闲检查。在第三个空闲检查中,Claude Code 会说空闲检查已暂停,直到你发送另一个提示。在 v2.1.246 之前,空闲检查是无上限的。空闲检查需要 Claude Code v2.1.236 或更高版本。
CLAUDE_CODE_GOAL_CHECKIN_MINUTES。Claude Code 使用你的值代替 30 分钟间隔,并相应地缩放后续间隔。将其设置为 0 以关闭检查和自动重试。
检查需要 Claude Code v2.1.234 或更高版本。
评估模型和成本
要在不同的模型上进行评估,请设置ANTHROPIC_DEFAULT_HAIKU_MODEL。
评估器在你的会话配置的任何提供商上运行。它不调用工具,所以它只能判断 Claude 已经在对话中呈现的内容。
评估令牌在为你的提供商配置的小型快速模型上计费,与主回合支出相比通常可以忽略不计。
要求
Claude Code 在与 设置文件中的 hooks 相同的工作区信任规则下提供/goal,因为评估器是 hooks 系统的一部分。当 disableAllHooks 为 true(在应用设置优先级后)或当在托管设置中设置了 allowManagedHooksOnly 时,/goal 也不可用。在每种情况下,该命令会告诉你原因,而不是默默地什么都不做。
另请参阅
- 使用
/loop重复运行提示:按时间间隔重新运行,而不是直到条件满足 - 基于提示的 hooks:当你需要自定义评估逻辑时编写你自己的 Stop hook
- 自动模式:自动批准工具调用,以便每个目标回合无人值守运行
- 调度比较:独立于任何打开的会话按计划运行工作