4 4
5# 让 Claude 朝着目标工作5# 让 Claude 朝着目标工作
6 6
7> 使用 /goal 设置完成条件,Claude 会在多个回合中持续工作,直到条件满足。7> 使用 /goal 设置完成条件,Claude 会持续工作直到条件满足、模型判断其不可能实现或需要修复的错误清除目标。
8 8
9<Note>9`/goal` 命令设置一个完成条件,Claude 会在没有你逐步提示的情况下持续朝着这个目标工作。每个回合后,一个小型快速模型会检查条件是否满足。如果模型判断条件尚未满足,Claude 会开始另一个回合,而不是将控制权返回给你。一旦条件满足、模型判断条件不可能满足或回合因[需要修复的错误](#errors-you-have-to-fix-clear-the-goal)失败时,目标会自动清除。
10 `/goal` 需要 Claude Code v2.1.139 或更高版本。
11</Note>
12
13`/goal` 命令设置一个完成条件,Claude 会在没有你逐步提示的情况下持续朝着这个目标工作。每个回合后,一个小型快速模型会检查条件是否满足。如果不满足,Claude 会开始另一个回合,而不是将控制权返回给你。一旦条件满足,目标会自动清除。
14 10
15对于具有可验证的最终状态的实质性工作,使用目标:11对于具有可验证的最终状态的实质性工作,使用目标:
16 12
26三种方法可以在提示之间保持当前会话运行。根据应该启动下一个回合的内容进行选择:22三种方法可以在提示之间保持当前会话运行。根据应该启动下一个回合的内容进行选择:
27 23
28| 方法 | 下一个回合何时开始 | 停止条件 |24| 方法 | 下一个回合何时开始 | 停止条件 |
29| :--------------------------------------------------------------------- | :-------- | :------------------- |25| :--------------------------------------------------------------------- | :------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------ |
30| `/goal` | 前一个回合完成时 | 模型确认条件已满足 |26| `/goal` | 前一个回合完成时,或当后台工作使目标处于等待状态时,[空闲检查](#background-work-defers-evaluation)到期,每个目标在你的提示之间最多三次 | 模型确认条件已满足或判断其不可能,或回合因[你必须修复的错误](#errors-you-have-to-fix-clear-the-goal)而失败,或你运行[`/goal clear`](#clear-a-goal) |
31| [`/loop`](/zh-CN/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop) | 时间间隔过去时 | 你停止它,或 Claude 决定工作完成 |27| [`/loop`](/docs/zh-CN/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop) | 时间间隔过去时 | 你停止它,或 Claude 决定工作完成 |
32| [Stop hook](/zh-CN/hooks-guide#prompt-based-hooks) | 前一个回合完成时 | 你自己的脚本或提示决定 |28| [Stop hook](/docs/zh-CN/hooks-guide#prompt-based-hooks) | 前一个回合完成时 | 你自己的脚本或提示决定 |
33 29
34`/goal` 和 Stop hook 都在每个回合后触发。`/goal` 是一个会话范围的快捷方式:你输入一个条件,它仅在当前会话中活跃。Stop hook 存在于你的设置文件中,适用于其范围内的每个会话,可以运行脚本进行确定性检查或运行提示进行模型评估的检查。30`/goal` 和 Stop hook 都在每个回合后触发。`/goal` 是一个会话范围的快捷方式:你输入一个条件,它仅在当前会话中活跃。Stop hook 存在于你的设置文件中,适用于其范围内的每个会话,可以运行脚本进行确定性检查或运行提示进行模型评估的检查。
35 31
36[Auto mode](/zh-CN/auto-mode-config) 本身在单个回合内批准工具调用,但不会启动新的回合。Claude 在判断工作完成时停止。`/goal` 添加了一个单独的评估器,在每个回合后检查你的条件,因此完成由一个新鲜的模型而不是执行工作的模型决定。这两者是互补的:auto mode 消除了每个工具的提示,`/goal` 消除了每个回合的提示。32[Auto mode](/docs/zh-CN/auto-mode-config) 本身在单个回合内批准工具调用,但不会启动新的回合。Claude 在判断工作完成时停止。`/goal` 添加了一个单独的评估器,在每个回合后检查你的条件,因此完成由一个新鲜的模型而不是执行工作的模型决定。这两者是互补的:auto mode 消除了每个工具的提示,`/goal` 消除了每个回合的提示。
37 33
38<Tip>34<Tip>
39 上述方法保持当前会话运行。你也可以安排独立于任何打开的会话运行的工作,例如夜间测试或早晨分类。有关云例程和桌面计划任务的选项,请参阅[调度选项](/zh-CN/scheduled-tasks#compare-scheduling-options)。35 上述方法保持当前会话运行。你也可以安排独立于任何打开的会话运行的工作,例如夜间测试或早晨分类。有关云例程和桌面计划任务的选项,请参阅[调度选项](/docs/zh-CN/scheduled-tasks#compare-scheduling-options)。
40</Tip>36</Tip>
41 37
42<h2 id="use-/goal">38<h2 id="use-/goal">
57 53
58设置目标会立即启动一个回合,条件本身作为指令。你不需要发送单独的提示。当目标活跃时,`◎ /goal active` 指示器显示目标已运行多长时间。54设置目标会立即启动一个回合,条件本身作为指令。你不需要发送单独的提示。当目标活跃时,`◎ /goal active` 指示器显示目标已运行多长时间。
59 55
60目标不会改变权限。在默认权限模式下,Claude 在进行工具调用前仍会询问,这些工具调用是你的设置不允许的,例如上面的测试命令。要让目标回合无人值守地运行,请将 `/goal` 与[自动模式](/zh-CN/auto-mode-config)配对。56目标不会改变你的权限模式。要让目标回合无人值守地运行,请在[自动模式](/docs/zh-CN/auto-mode-config)中运行 `/goal`。在[手动模式](/docs/zh-CN/permission-modes)中,Claude 在进行工具调用前仍会询问,这些工具调用是你的设置不允许的,例如上面的测试命令。
61 57
62每个回合后,评估器返回一个简短的原因,解释条件是否满足。最近的原因出现在状态视图和记录中,所以你可以看到 Claude 接下来要朝着什么工作。58当目标活跃时,记录显示评估器返回的每个判决,你可以按 Ctrl+O 查看其背后的原因。状态视图也显示最近的原因,所以你可以看到 Claude 接下来要朝着什么工作。
63
64<Note>
65 目标会一直运行,直到条件满足或你运行 `/goal clear`。运行不带参数的 `/goal` 可以查看到目前为止花费的回合和令牌。
66</Note>
67 59
68<h3 id="write-an-effective-condition">60<h3 id="write-an-effective-condition">
69 编写有效的条件61 编写有效的条件
99* 当前令牌支出91* 当前令牌支出
100* 评估器最近的原因92* 评估器最近的原因
101 93
94回合计数和最近的原因在第一次评估运行后出现。
95
102如果没有活跃的目标,但在会话早期实现了一个目标,状态显示已实现的条件及其持续时间、回合计数和令牌支出。96如果没有活跃的目标,但在会话早期实现了一个目标,状态显示已实现的条件及其持续时间、回合计数和令牌支出。
103 97
104<h3 id="clear-a-goal">98<h3 id="clear-a-goal">
111/goal clear105/goal clear
112```106```
113 107
108Claude 打印 `Goal cleared:` 后跟条件以确认,或如果没有活跃的目标则打印 `No goal set`。
109
114`stop`、`off`、`reset`、`none` 和 `cancel` 被接受为 `clear` 的别名。运行 `/clear` 启动新对话也会移除任何活跃的目标。110`stop`、`off`、`reset`、`none` 和 `cancel` 被接受为 `clear` 的别名。运行 `/clear` 启动新对话也会移除任何活跃的目标。
115 111
116<h3 id="resume-with-an-active-goal">112<h3 id="resume-with-an-active-goal">
117 使用活跃目标恢复113 使用活跃目标恢复
118</h3>114</h3>
119 115
120当会话结束时仍然活跃的目标会在你使用 `--resume` 或 `--continue` 恢复该会话时恢复。条件会保留,但回合计数、计时器和令牌支出基线在恢复时都会重置。已经实现或清除的目标不会恢复。116当你恢复会话时,Claude Code 会恢复在会话结束时仍然活跃的目标。Claude Code 在每个恢复路由上恢复它:`--continue`、`--resume` 带有会话 ID、名称或[记录文件路径](/docs/zh-CN/sessions#resume-a-session),以及[会话选择器](/docs/zh-CN/sessions#use-the-session-picker)。在 v2.1.239 之前,Claude Code 在除了 `claude --resume` 选择器之外的每个路由上恢复目标。
117
118Claude Code 保留条件但重置回合计数、计时器和令牌支出基线。它不会恢复已经实现或清除的目标。
121 119
122<h3 id="run-non-interactively">120<h3 id="run-non-interactively">
123 非交互式运行121 非交互式运行
124</h3>122</h3>
125 123
126`/goal` 在[非交互式模式](/zh-CN/headless)、[桌面应用](/zh-CN/desktop)中工作,并通过[远程控制](/zh-CN/remote-control)工作。使用 `-p` 设置目标会在单个调用中运行循环至完成:124`/goal` 在[非交互式模式](/docs/zh-CN/headless)、[桌面应用](/docs/zh-CN/desktop)中工作,并通过[远程控制](/docs/zh-CN/remote-control)工作。使用 `-p` 设置目标会在单个调用中运行循环至完成:
127 125
128```bash theme={null}126```bash theme={null}
129claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"127claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"
130```128```
131 129
132使用默认文本输出时,在条件满足之前不会打印任何内容,所以运行许多回合的目标可能看起来卡住了。添加 `--output-format stream-json --verbose` 以在循环运行时发出每条消息。130使用默认文本输出时,在运行结束前不会打印任何内容,所以运行许多回合的目标可能看起来卡住了。添加 `--output-format stream-json --verbose` 以在循环运行时发出每条消息。
133 131
134使用 Ctrl+C 中断进程以在条件满足之前停止非交互式目标。132使用 Ctrl+C 中断进程以在条件满足之前停止非交互式目标。
135 133
137 评估如何工作135 评估如何工作
138</h2>136</h2>
139 137
140`/goal` 是会话范围的[基于提示的 Stop hook](/zh-CN/hooks#prompt-based-hooks)的包装器。每次 Claude 完成一个回合时,条件和到目前为止的对话都会发送到你配置的[小型快速模型](/zh-CN/model-config),默认为 Haiku。模型返回一个是或否的决定和一个简短的原因。"否"告诉 Claude 继续工作,并包括原因作为下一个回合的指导。"是"清除目标并在记录中记录一个已实现的条目。138`/goal` 是会话范围的[基于提示的 Stop hook](/docs/zh-CN/hooks#prompt-based-hooks)的包装器。每次 Claude 完成一个回合时,Claude Code 会将条件和到目前为止的对话发送到你配置的[小型快速模型](/docs/zh-CN/model-config),默认为 Claude API 上的 Haiku;在第三方提供商上,请查看你的[提供商页面](/docs/zh-CN/third-party-integrations)了解该平台的默认值。该模型返回三个判决之一,每个都带有简短的原因:
139
140* **尚未满足**:Claude 继续工作,并将原因作为下一个回合的指导。
141* **已满足**:Claude Code 清除目标并在记录中记录一个已实现的条目。
142* **不可能**:评估器判断该条件永远无法满足。Claude Code 清除目标并在记录中记录一个失败的条目以及原因。你不需要自己清除它。
143
144如果 Claude 持续回答评估器而没有取得进展(连续多个回合没有工具使用),Claude Code 会停止循环,打印警告,并将控制权返回给你,目标仍然设置。评估在你的下一个提示后恢复。[hooks 指南](/docs/zh-CN/hooks-guide#stop-hook-hits-the-block-cap)解释了底层机制。
145
146<h3 id="errors-you-have-to-fix-clear-the-goal">
147 你必须修复的错误会清除目标
148</h3>
149
150如果一个回合因为一个在你修复之前不会清除的错误而失败,Claude Code 会清除目标并打印一个警告,说明原因。警告以 `Goal cleared after an unrecoverable error` 开头,以 `Run /goal again to continue` 结尾。修复原因,然后使用 `/goal <condition>` [再次设置目标](#set-a-goal)。四种失败会清除目标:
151
152* 身份验证失败,当 Claude Code 管理自己的凭证时。当主机为你管理凭证时,例如桌面应用、VS Code 扩展或[云会话](/docs/zh-CN/claude-code-on-the-web),Claude Code 会保持目标活跃,因为主机会自动恢复访问权限。
153* 信用余额耗尽
154* 一个[自动压缩](/docs/zh-CN/model-config#set-the-auto-compact-window)无法清除的上下文溢出
155* 一个不可用的模型
156
157在任何其他失败之后,包括速率限制和服务器过载等瞬时错误,Claude Code 会保持目标活跃。
158
159<h3 id="background-work-defers-evaluation">
160 后台工作延迟评估
161</h3>
162
163如果一个子代理或后台 shell 命令在回合结束时仍在运行,Claude Code 会跳过该回合的评估。它在下一个没有后台工作运行的回合结束时进行评估。当后台工作完成时,Claude Code 会将结果作为新回合传递给 Claude,所以你不必提示。
164
165一旦后台工作让目标等待了 30 分钟,就应该进行检查。在检查中,Claude Code 列出正在运行的任务,并要求 Claude 读取其输出,如果它们在进行中则继续等待,并修复或停止任何卡住的任务。在第一次检查之后,Claude Code 在每次后续检查之前等待两倍的时间,最多是第一个间隔的四倍:使用默认值,第一次检查后 1 小时,然后每 2 小时。Claude Code 以两种方式之一传递应该进行的检查,包括第一个:
166
167* **当回合结束时**:Claude Code 在下一个工作仍在运行的回合结束时传递检查。在非交互式会话中,例如使用 `-p` 启动的会话,这是 Claude Code 传递检查的唯一方式。
168* **当会话空闲时**:在交互式会话中,Claude Code 也会自己启动一个回合来传递检查,而不是等待你的下一个提示。如果后台工作已停止而没有报告结果,Claude Code 会要求 Claude 继续朝着目标工作。Claude Code 在你的提示之间每个目标最多启动三个空闲检查。在第三个空闲检查中,Claude Code 会说空闲检查已暂停,直到你发送另一个提示。在 v2.1.246 之前,空闲检查是无上限的。空闲检查需要 Claude Code v2.1.236 或更高版本。
169
170在 v2.1.239 之前,只有空闲检查以这种方式退避;在回合结束时传递的检查在第一个间隔重复。
171
172要更改第一个间隔,请设置 [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/zh-CN/env-vars)。Claude Code 使用你的值代替 30 分钟间隔,并相应地缩放后续间隔。将其设置为 `0` 以关闭检查。检查需要 Claude Code v2.1.234 或更高版本。
173
174<h3 id="evaluation-model-and-cost">
175 评估模型和成本
176</h3>
177
178要在不同的模型上进行评估,请设置 [`ANTHROPIC_DEFAULT_HAIKU_MODEL`](/docs/zh-CN/model-config#environment-variables)。
179
180<Warning>
181 Claude Code 在使用小型快速模型的任何地方都会读取 `ANTHROPIC_DEFAULT_HAIKU_MODEL`,不仅仅是用于 `/goal` 评估。当你设置它时,Claude Code 也会将 [`haiku` 别名](/docs/zh-CN/model-config#model-aliases)解析为该模型,并在其上运行[后台功能](/docs/zh-CN/costs#background-token-usage),例如对话摘要。
182</Warning>
141 183
142评估器在你的会话配置的任何提供商上运行。它不调用工具,所以它只能判断 Claude 已经在对话中呈现的内容。184评估器在你的会话配置的任何提供商上运行。它不调用工具,所以它只能判断 Claude 已经在对话中呈现的内容。
143 185
149 要求191 要求
150</h2>192</h2>
151 193
152`/goal` 仅在你已接受信任对话框的工作区中运行,因为评估器是 hooks 系统的一部分。当在任何设置级别设置了 [`disableAllHooks`](/zh-CN/hooks#disable-or-remove-hooks) 时,或当在托管设置中设置了 [`allowManagedHooksOnly`](/zh-CN/settings#hook-configuration) 时,`/goal` 也不可用。在每种情况下,命令会告诉你原因,而不是默默地什么都不做。194Claude Code 在与 [设置文件中的 hooks 相同的工作区信任规则](/docs/zh-CN/permissions#what-runs-before-you-trust-a-folder)下提供 `/goal`,因为评估器是 hooks 系统的一部分。当 [`disableAllHooks`](/docs/zh-CN/hooks#disable-or-remove-hooks) 为 `true`(在应用设置优先级后)或当在托管设置中设置了 [`allowManagedHooksOnly`](/docs/zh-CN/settings-reference#allowmanagedhooksonly) 时,`/goal` 也不可用。在每种情况下,该命令会告诉你原因,而不是默默地什么都不做。
153 195
154<h2 id="see-also">196<h2 id="see-also">
155 另请参阅197 另请参阅
156</h2>198</h2>
157 199
158* [使用 `/loop` 重复运行提示](/zh-CN/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop):按时间间隔重新运行,而不是直到条件满足200* [使用 `/loop` 重复运行提示](/docs/zh-CN/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop):按时间间隔重新运行,而不是直到条件满足
159* [基于提示的 hooks](/zh-CN/hooks-guide#prompt-based-hooks):当你需要自定义评估逻辑时编写你自己的 Stop hook201* [基于提示的 hooks](/docs/zh-CN/hooks-guide#prompt-based-hooks):当你需要自定义评估逻辑时编写你自己的 Stop hook
160* [自动模式](/zh-CN/auto-mode-config):自动批准工具调用,以便每个目标回合无人值守运行202* [自动模式](/docs/zh-CN/auto-mode-config):自动批准工具调用,以便每个目标回合无人值守运行
161* [调度比较](/zh-CN/scheduled-tasks#compare-scheduling-options):独立于任何打开的会话按计划运行工作203* [调度比较](/docs/zh-CN/scheduled-tasks#compare-scheduling-options):独立于任何打开的会话按计划运行工作