Claude Code 自动化与排错
Claude Code 自动化与排错
目标模式(Goals)
1 分钟阅读
让 Claude 持续朝着一个目标努力
用 /goal 设定一个完成条件,Claude 会跨轮次持续工作,直到满足该条件。
/goal 需要 Claude Code v2.1.139 或更高版本。
/goal 命令会设定一个完成条件,Claude 会朝着它持续工作,而不需要你逐步提示每一轮。每轮结束后,一个小型的快速模型会检查该条件是否已经满足。如果没有,Claude 会开始下一轮,而不是把控制权交还给你。一旦条件满足,该目标会自动清除。
对于有可验证终态的实质性工作,请使用目标模式:
- 将某个模块迁移到新 API,直到每个调用点都能编译通过且测试通过为止
- 实现一份设计文档,直到所有验收标准都满足为止
- 把一个大文件拆分成多个聚焦的模块,直到每个都在规模预算之内为止
- 处理一份带标签的 issue 待办列表,直到队列清空为止
比较几种让会话持续运行的方式
三种方式都能让当前会话在多个提示词之间持续运行。根据什么应该启动下一轮来选择:
| 方式 | 下一轮何时开始 | 何时停止 |
|---|---|---|
/goal | 上一轮结束后 | 一个模型确认该条件已满足 |
/loop | 经过一个时间间隔 | 你停止它,或 Claude 判断工作已完成 |
| Stop 钩子 | 上一轮结束后 | 由你自己的脚本或提示词决定 |
/goal 和一个 Stop 钩子都会在每轮结束后触发。/goal 是一个限定于会话范围的快捷方式:你输入一个条件,它只对当前会话生效。一个 Stop 钩子则存在于你的设置文件中,适用于其范围内的每个会话,可以运行一个脚本进行确定性检查,或运行一个提示词进行模型评估。
单独使用自动模式,只会在单轮内批准工具调用,但不会开启新的一轮。Claude 会在它判断工作已完成时停止。/goal 增加了一个独立的评估器,在每轮结束后检查你的条件,因此完成与否由一个全新的模型来判断,而不是由正在做这项工作的那个模型判断。两者是互补的:自动模式移除了逐次工具的提示,而 /goal 移除了逐轮的提示。
使用 /goal
每个会话可以有一个活动目标。同一个命令会根据参数来设置、检查或清除它。
设置一个目标
运行 /goal,后跟你想要满足的条件。如果已经有一个活动目标,新的会替换它。
设置一个目标会立即开始一轮,把这个条件本身作为指令。你不需要另外发送一条提示词。目标处于活动状态期间,一个 ◎ /goal active 指示符会显示该目标已经运行了多久。
每轮结束后,评估器会返回一个简短的原因,说明该条件是否满足。最近一次的原因会显示在状态视图和记录中,方便你了解 Claude 接下来要朝着什么努力。
一个目标会持续运行,直到该条件满足,或你运行 /goal clear。不带参数运行 /goal 可以查看目前花费的轮次和 Token。
撰写有效的条件
评估器会根据 Claude 在对话中已经呈现的内容来判断你的条件。它不会独立运行命令或读取文件,因此请把条件写成 Claude 自己的输出就能证明的东西。“test/auth 中的所有测试都通过”是有效的,因为 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 的别名使用。运行 /clear 开始一个新对话,也会移除任何活动目标。
带着一个活动目标恢复会话
如果一个会话结束时目标仍处于活动状态,当你用 --resume 或 --continue 恢复该会话时,这个目标会被恢复。条件会延续下来,但轮次数、计时器和 Token 花费基准都会在恢复时重置。一个已经达成或已清除的目标不会被恢复。
非交互式运行
/goal 可以在非交互模式、桌面应用中,以及通过远程控制使用。用 -p 设置一个目标,会在单次调用中把这个循环运行到完成:
在条件满足之前,用 Ctrl+C 中断该进程即可停止一个非交互式目标。
评估的工作原理
/goal 是对一个会话范围的基于提示词的 Stop 钩子的包装。每次 Claude 完成一轮,该条件和目前为止的对话都会被发送给你配置的小型快速模型(默认是 Haiku)。该模型会返回一个是/否决定和一个简短的原因。“否”会告诉 Claude 继续工作,并将该原因作为下一轮的指导。“是”会清除该目标,并在记录中记下一条已达成的条目。
评估器会运行在你会话配置所使用的服务商上。它不会调用工具,因此只能判断 Claude 已经在对话中呈现出来的内容。
评估所消耗的 Token 会按照你为该服务商配置的小型快速模型计费,与主轮次的花费相比通常微不足道。
要求
/goal 只能在你已经接受信任对话框的工作区中运行,因为该评估器是钩子系统的一部分。当disableAllHooks 在任何设置级别被设置,或统一管理设置中设置了 allowManagedHooksOnly 时,/goal 也不可用。在这两种情况下,该命令都会告诉你原因,而不是悄悄地什么都不做。
另请参阅
- 用
/loop反复运行一个提示词:按时间间隔重新运行,而不是运行到某个条件满足为止 - 基于提示词的钩子:当你需要自定义评估逻辑时,编写你自己的 Stop 钩子
- 自动模式:自动批准工具调用,让每一轮目标都能无人值守运行
- 调度方式比较:独立于任何打开的会话,按计划运行工作