Skip to content

使用 /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 clear

stopoffresetnonecancel 可以作为 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 不可用。在这些情况下,命令会告诉你原因,而不是静默地不执行任何操作。

参见

常见问题

/goal/loop 有什么区别?

/goal 在每轮结束后立即检查自定义条件,条件满足才停止。/loop 按时间间隔重复执行指定的提示,直到你手动停止或 Claude 认为工作完成。两者都会让会话持续运行,但触发下一轮的条件不同:/goal 基于条件评估结果,/loop 基于时间。

如何编写有效的 /goal 条件?

条件应写成 Claude 的输出可以证明的形式,比如“所有测试通过”或“git status 干净”。避免让评估器去运行命令或读取文件(它不会)。加入轮次或时间限制(如“或 20 轮后停止”)来限制执行时长。条件最长支持 4000 个字符。

/goal 在非交互模式下怎么运行?

使用 -p 参数启动时带上 /goal 条件即可,例如 claude -p "/goal 完成迁移"。Claude 会在单次调用中循环运行直到条件满足。要提前停止,用 Ctrl+C 中断进程。