全部文章
AI 编程2026-05-15

/goal:Coding Agent 的新原语

/goal 不是功能,是原语。Codex、Claude Code、Hermes 三家 converge 到同一指令格式,让不同工具可组合。从 prompting(你驱动)到 assigning(Agent 向目标驱动)。

/goal 不是功能。是原语。

HTTP 是原语。JSON 是原语。/goal 正在成为 coding agent 的原语。

几周前,OpenAI 的 Codex CLI 添加了 /goal,作为给 coding worker 一个带定义完成状态的工作的方式。Claude Code 本周添加了它。Hermes Agent——作者在 Mac Mini 上运行来协调 coding worker 的 orchestrator——内置 /goal 已有一段时间。

现在作者有一个 builder、一个 reviewer 和一个 orchestrator,都接受相同的指令格式,尽管它们在其他方面毫无共同之处。

#/goal 改变了什么

如果你只见过 /goal 被当作更 fancy 的 prompt 使用,你错过了它改变的东西。

普通 prompt 要求 Agent 给出下一个响应。你读返回的内容,判断是否正确,然后推动 Agent 进入下一步。你在掌舵每一轮。

/goal 翻转了这一点。你写下"完成"是什么样,提交一次,Agent 朝着它工作直到达成。

/goal Build the app described in SPEC.md. Done means tests pass, 
build passes, README is accurate, and git status only shows 
relevant project files.

目标保持活跃直到达成、暂停、阻塞、清除或预算耗尽。

这与在正常 one-shot 命令里放"goal"这个词不同。如果你写 codex exec 'goal: build the app',那仍然是一个有标签的 prompt。真正的原语活在交互式 worker session 内部。你启动 CLI,提交 /goal,然后走开。

转变是从 prompting(你驱动)到 assigning(Agent 向你定义的目标驱动)。

#三个工具,同一原语

三个接受 /goal 的工具不是同一种东西:

  • Codex :OpenAI 的 coding CLI。擅长实现,尤其是给定清晰 spec 时。/goal 是你给它那个 spec 的方式。
  • Claude Code :Anthropic 的 coding CLI。擅长反向操作:找出看起来正确但实则错误的代码中的问题。Spec 合规性、安全问题、错误状态、安全漏洞。/goal 是你指向代码并要求审查的方式。
  • Hermes Agent :完全不同的工具。不是 coding worker,而是协调上述两种 coding worker 的 orchestrator。/goal 是 Hermes 把任务交给合适工具的方式,也是作者告诉 Hermes 想要什么的方式。

重要的不是任何一个 ship 了 /goal。重要的是三个不同团队 converge 到同一原语 ,而这种 convergence 让它们可以组合。

#实战:一条消息,六张卡片

作者给 Hermes 发了一条消息:

/goal Build a CLI tool that finds X mentions of me and pings me when 
something blows up.

Hermes 把请求拆成六张卡片:

Card 1: Spec — Hermes 自己写了 SPEC.md,捕获技术栈、repo 路径、只读约束、mock 模式需求、测试和验证命令。PM 角色拥有。

Card 2: Codex builds — Codex 对 SPEC.md 运行 /goal。创建项目文件,实现 UI 和 backend,添加测试,让 app 达到通过状态。约 15 分钟。完成时 npm test 通过,npm run build 通过,git status 只显示相关新文件。

Card 3: Claude Code reviews — Claude Code 运行 /goal 审查 Codex 构建的内容。检查 spec 合规性、只读安全性、API key 处理、错误状态、测试、UI 有用性、bug 和安全问题。结果:PASS,无阻塞问题。

Card 4: Codex fix loop — 跳过,因为审查通过。但卡片在跳过时仍然重要。它显示 Hermes 能建模条件工作。如果 Claude Code 阻塞了,Hermes 会把发现交回给 Codex 作为新 /goal。

Card 5: Claude Code final verification — 同样跳过。

Card 6: Hermes final summary — 工作 app 在本地路径,UI 和 API 都在 mock 模式下验证。Codex 用 /goal 构建。Claude Code 用 /goal 审查并返回 PASS。

所有这些都来自一条消息。 三个不同工具做了实际工作,但作者只和 Hermes 对话。

#Verifier:从 Promise 到 Contract

Hermes 从不信任 Codex 的自报告。Codex 标记构建完成后,Hermes 自己运行命令:

npm test         # 17 tests passed
npm run build    # vite build passed

Verifier 是让 /goal 成为 contract 而非 promise 的东西。 不要信任 worker 的自报告作为最终结论。信任 verifier。

Coding agent 很自信。它们会告诉你构建通过了,但构建根本没运行。会告诉你测试通过了,但测试从未执行。Verifier 关闭了这个 gap。

没有 verification,/goal 只是更 fancy 的 prompt。有了 verification,它变成 contract。

#并行与边界

可以并行运行多个 /goal,但不能让多个 coding worker 指向同一文件而不先思考。

作者的默认是每个 repo 一个主 builder 。想要并行时,在清晰边界上添加:不同 repo、不同分支、git worktree、分离的 package、docs vs code、tests vs implementation。任何两个 worker 不会踩到对方的地方。

坏模式:三个 worker 在同一 repo 的同一文件上编辑。你会得到冲突、部分覆盖、一个 worker 默默 undo 另一个的工作。

更好模式:任何给定文件一次只有一个 writer。Builder 写,reviewer 只读,fix goal 限定在修复范围内。或者在三个 worktree 上跑三个 builder 做三种竞争方案,让 orchestrator 选最优。

Board 让这变得实用。没有它,并行后台 worker 变成终端混乱。

#核心洞察

有用的 framing 不是"我可以在后台运行 Agent"。

而是一条消息变成跨三个不同 coding 工具的 pipeline,作者看着整个东西在一张 board 上移动。

你不再坐在终端等一个 Agent 完成,而是开始管理一个有可见状态的工作队列。

如果 Codex 和 Claude Code 各自发明了自己的 job-handoff 格式,没有 orchestrator 能在它们之间路由。Board 令人印象深刻,但原语让 board 更有用。

Worker 可以变,但原语保持不变。 下一个采用 /goal 的 coding 工具将无需作者改变任何东西就加入这个 pipeline。作者只需把工作路由给它。

这就是好原语的作用。