Claude Code 中文文档

让 Claude 持续朝目标工作

设定完成条件,Claude 自动循环执行直到条件满足。/goal 设定一个完成条件,Claude 会持续跨多轮工作,无需你逐步提示。

[!NOTE]
/goal 需要 Claude Code v2.1.139 或更高版本。

/goal 命令的核心机制: 设定一个完成条件后,Claude 会持续朝着目标工作,而不需要你在每一步都手动提示。每轮结束后,一个轻量快速模型会检查条件是否已满足。如果未满足,Claude 会自动开始下一轮,而非把控制权交还给你。条件满足后,goal 自动清除。

适用场景: 适合有可验证终态的大型任务:

  • 迁移一个模块到新 API,直到所有调用点都能编译且测试通过
  • 实现一份设计文档,直到所有验收标准都满足
  • 将一个大文件拆分为专注模块,直到每个模块都在体积预算内
  • 逐个处理已标记的 issue 积压,直到队列清空

保持会话运行的三种方式对比

三种方式各有侧重,按"什么触发下一轮"来选择。

方式 下一轮的触发时机 停止条件
/goal 上一轮结束后 模型确认条件已满足
/loop 时间间隔到达 你手动停止,或 Claude 判断工作已完成
Stop hook 上一轮结束后 你自定义的脚本或 prompt 来判定

/goal 与 Stop hook 的区别: 两者都在每轮结束后触发。/goal 是会话级的快捷方式:输入一个条件,仅在当前会话生效。Stop hook 写在配置文件里,对其作用域内的所有会话生效,可以运行脚本做确定性检查,也可以用 prompt 做模型评估。

/goal 与 Auto mode 的关系: Auto mode 本身只是在单轮内自动批准工具调用,但不会开启新一轮——Claude 自己判断工作完成就停下。/goal 增加了一个独立的评估器,在每轮结束后检查你的条件,由一个全新的模型来判定是否完成,而非执行工作的那个模型。两者互补:Auto mode 免去逐个工具的确认,/goal 免去逐轮的确认。

[!TIP]
上述方式都是保持当前会话运行。你也可以安排独立于任何打开会话的定时任务,比如每晚测试或每早分诊。详见 定时任务选项

使用 /goal

每个会话同时只能有一个 goal。 同一个命令根据参数不同,可以设定、查看和清除 goal。

设定 goal

运行 /goal 加上你希望满足的条件。 如果已有一个 goal 处于活跃状态,新 goal 会替换它。

/goal all tests in test/auth pass and the lint step is clean

设定 goal 会立即开始一轮工作, 条件本身就是指令,不需要再单独发送 prompt。goal 活跃期间,会显示 ◎ /goal active 指示器以及已运行时长。

评估器在每轮结束后会返回简短的理由, 解释条件为何满足或不满足。最近一次的理由会显示在状态视图和 transcript 中,方便你了解 Claude 接下来的工作方向。

[!NOTE]
goal 会持续运行直到条件满足或你执行 /goal clear。不带参数运行 /goal 可以查看已消耗的轮数和 token。

编写有效的条件

评估器只能根据对话中 Claude 已经输出的内容来判断,不会自行执行命令或读取文件。 所以条件要写成 Claude 的输出能够证明的形式。比如"test/auth 下所有测试通过"就很好,因为 Claude 会运行测试,结果会出现在 transcript 中供评估器读取。

一个能跨多轮持续有效的条件通常具备:

  • 一个可度量的终态: 测试结果、构建退出码、文件数量、空队列
  • 一个明确的检查方式: Claude 如何证明它——比如"npm test 退出码为 0"或"git status 是干净的"
  • 重要的约束条件: 过程中不能改变的东西,比如"不修改其他测试文件"

条件最长支持 4,000 个字符。

限制运行时长: 在条件中加入轮数或时间子句,比如 or stop after 20 turns。Claude 每轮会报告相对于该子句的进度,评估器从对话中判断。

查看状态

不带参数运行 /goal 查看当前状态。

/goal

如果 goal 处于活跃状态,状态会显示:

  • 条件内容
  • 已运行时长
  • 已评估的轮数
  • 当前 token 消耗
  • 评估器最近一次的理由

如果没有活跃 goal,但当前会话中有已达成的 goal,状态会显示已达成的条件及其持续时间、轮数和 token 消耗。

清除 goal

运行 /goal clear 可以在条件满足前手动移除活跃 goal。

/goal clear

stopoffresetnonecancel 都是 clear 的别名。运行 /clear 开始新对话也会移除任何活跃 goal。

恢复带有活跃 goal 的会话

会话结束时仍活跃的 goal 会在用 --resume--continue 恢复时一并恢复。 条件会保留,但轮数计数器、计时器和 token 消耗基线会在恢复时重置。已达成或已清除的 goal 不会被恢复。

非交互模式运行

/goal 支持 非交互模式桌面应用Remote Control-p 设定 goal 会在单次调用中运行循环直到完成:

claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"

在非交互模式下条件满足前,用 Ctrl+C 可以中断进程。

评估机制

/goal 本质上是一个会话级的 基于 prompt 的 Stop hook 的封装。 每次 Claude 完成一轮后,条件和对话内容会被发送给你配置的轻量快速模型(默认是 Haiku)。该模型返回"是/否"判定和简短理由。"否"意味着 Claude 继续工作,理由会作为下一轮的引导。"是"则清除 goal 并在 transcript 中记录一条达成条目。

评估器的运行环境: 评估器运行在你会话配置的 provider 上。它不调用工具,只能判断 Claude 已经在对话中输出的内容。

[!NOTE]
评估 token 按轻量快速模型计费,通常相比主轮消耗可以忽略不计。

前提条件

/goal 仅在你已接受信任对话框的工作区中运行, 因为评估器属于 hooks 系统的一部分。当任何配置层级设置了 disableAllHooks 或在托管配置中设置了 allowManagedHooksOnly 时,/goal 不可用。遇到这些情况,命令会告诉你原因,而非静默无动作。

相关文档