Codex /goal vs Claude Code /goal:长任务自动跑到完成

对比 Codex CLI 和 Claude Code 的 /goal 命令:它们都面向长任务和完成条件,但在可用状态、启用方式、评估机制和适合场景上有明显差异。

/goal 正在变成 AI 编程工具里的一个重要命令。

它解决的不是“让模型多写几行代码”,而是另一个更实际的问题:当任务有明确完成条件时,能不能让 Agent 持续推进,直到条件满足,而不是每完成一轮就停下来等用户继续催。

Codex CLI 已经在官方文档里加入了实验性的 /goal。Claude Code 也上线了自己的 /goal 文档,而且把它描述成一种可以跨多轮持续工作的自动化能力。两者名字一样,但产品取向并不完全一样。

/goal 到底解决什么问题

普通 AI 编程对话通常是“一问一答”:

  1. 用户提出任务。
  2. Agent 分析、改代码、跑测试。
  3. Agent 汇报结果。
  4. 用户再决定下一步。

这个流程适合短任务,但遇到迁移、重构、测试修复、issue backlog 清理时,就会变得很碎。Agent 可能每次只推进一小段,然后停下来等你输入“继续”。

/goal 的思路是把任务从“下一步做什么”改成“最终什么状态算完成”。例如:

1
/goal 完成登录模块迁移,所有 auth 测试通过,lint 无报错

这类目标天然适合长任务,因为它有清楚的终点:测试通过、构建成功、文件拆分完成、队列清空、验收条件满足。

Codex 的 /goal:实验功能,绑定当前线程

OpenAI 的 Codex CLI 文档把 /goal 标为实验功能。它不是默认稳定能力,需要先开启 features.goals

开启方式有两种:

1
/experimental

或者在 config.toml 里加入:

1
2
[features]
goals = true

启用后,可以这样使用:

1
/goal Finish the migration and keep tests green

常用命令包括:

1
2
3
4
/goal
/goal pause
/goal resume
/goal clear

按照 OpenAI 文档的说法,Codex 会把 goal 附着在当前 active thread 上,在更大的任务运行过程中持续跟踪这个目标。

这里要注意一个细节:官方文档对 Codex /goal 的措辞比较克制。它强调“给长任务设置实验性目标”“把目标附着到当前线程”,但没有像 Claude Code 文档那样展开说明每一轮结束后由独立 evaluator 自动判断并继续下一轮。所以现在使用 Codex /goal 时,最好仍把它看作实验中的长任务目标机制,而不是完全稳定的无人值守执行模式。

Claude Code 的 /goal:完成条件驱动的多轮执行

Claude Code 的 /goal 文档写得更明确:用户设置 completion condition 后,Claude 会跨 turn 持续工作,直到条件满足。

示例:

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

Claude Code 的机制大致是:

  • 当前 turn 完成后,不直接把控制权还给用户。
  • 一个小型快速模型会检查目标条件是否已经满足。
  • 如果没有满足,Claude 自动开始下一轮。
  • 如果满足,goal 自动清除,并在 transcript 里记录完成状态。

这意味着 Claude Code 的 /goal 更像“按完成条件自动续跑”。它不只是把目标挂在会话里,而是把“是否继续下一轮”交给一个独立评估步骤。

Claude Code 还支持直接查看状态:

1
/goal

状态里会显示目标条件、运行时间、已评估 turn 数、token 消耗,以及 evaluator 最近一次给出的原因。

如果要提前停止,可以使用:

1
/goal clear

stopoffresetnonecancel 也可以作为清除别名。开启目标后,如果会话中断,之后通过 --resume--continue 恢复时,仍然 active 的 goal 可以被带回来;但计时、turn 数和 token 基线会重新计算。

两者最大的差异

Codex 和 Claude Code 都在把 AI 编程从“单轮回答”推向“长任务执行”,但 /goal 的定位有差异。

对比项 Codex CLI /goal Claude Code /goal
状态 experimental 官方文档单独成页说明
启用方式 需要开启 features.goals 可直接在受信任 workspace 使用
目标作用域 当前 active thread 当前 session
常用操作 set / view / pause / resume / clear set / view / clear
自动判断 文档强调目标附着与跟踪 明确说明每轮后由 evaluator 判断
自动续跑 文档表述较克制 条件未满足时自动下一轮
适合场景 想在 Codex 长任务里保持目标上下文 想按完成条件让 Claude Code 持续推进

简单说,Codex 的 /goal 更像“给当前线程挂一个实验性的长期目标”;Claude Code 的 /goal 更像“给当前会话设置一个可验证的停止条件,让它自动干到满足为止”。

写好 /goal 的关键

不管使用哪一个工具,/goal 都不适合写成模糊愿望。

不太好的写法:

1
/goal 把项目优化一下

更好的写法:

1
/goal 将 payment 模块迁移到新 API,npm test -- payment 退出码为 0,git diff 只包含 payment 相关文件

一个好目标通常包含三点:

  1. 明确的完成状态。
  2. 可执行的验证方式。
  3. 必须遵守的边界。

如果目标太大,还应该加上停止条件:

1
/goal 修复 eslint 报错,npm run lint 退出码为 0;如果超过 20 轮仍未完成,停止并总结剩余问题

这很重要。/goal 越强,越需要边界。否则 Agent 可能会为了追求“完成”而改动过多文件、跑太久、消耗太多 token,甚至把原本该停下来询问的问题继续往前推。

什么时候适合用 /goal

适合:

  • 测试修复:直到指定测试通过。
  • 代码迁移:直到所有调用点改完并编译成功。
  • 批量清理:直到某类 lint 或类型错误清零。
  • 文档补齐:直到所有指定模块都有说明。
  • issue 队列处理:直到某个标签下的问题都被处理或明确分类。

不适合:

  • 需求本身还没想清楚。
  • 需要频繁产品判断。
  • 涉及高风险删除、数据迁移或权限变更。
  • 验收条件只能靠主观判断。
  • 任务会跨越大量无关模块。

一个实用原则是:如果你能写出“跑哪个命令、看到什么结果、哪些文件不能碰”,就适合用 /goal。如果只能写“帮我做得更好”,那还是先用普通对话、计划模式或人工评审更稳。

对 AI 编程工具的影响

/goal 代表一个很明显的方向:AI 编程工具正在从“交互式助手”变成“可持续执行的工作单元”。

过去我们让 Agent 做任务,经常要在旁边守着。它卡住了要提示,测完了要继续,报错了要再下命令。/goal 把这部分交互压缩成一个完成条件,让 Agent 自己决定下一轮该做什么。

但这也带来新的要求。以后写 prompt 不只是描述任务,还要写验收条件、验证命令、修改边界和停止规则。换句话说,用户的工作从“催它继续”变成“定义什么叫完成”。

Codex 和 Claude Code 走到 /goal 这一步,说明长任务 Agent 已经不再只是后台任务或云端队列的专利。终端里的本地编程工具,也开始需要更强的自主推进能力。

总结

Codex CLI 和 Claude Code 都有了 /goal,但现阶段不要把它们简单看成同一个功能。

Codex 的 /goal 仍是实验能力,需要开启 features.goals,更适合在 Codex 当前线程里维持长期目标。Claude Code 的 /goal 则更明确地把“完成条件”和“自动续跑”连在一起,通过独立 evaluator 判断是否继续。

对日常开发来说,这类命令最适合处理有明确验收标准的工程任务。它不会替代需求判断,也不会消除代码审查,但能减少长任务里大量重复的“继续”“再跑一次”“修到测试通过”。

真正要学会的不是某个命令本身,而是如何把任务写成清楚、可验证、可停止的目标。

参考资料

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计