<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>/Goal | Feisky</title><link>https://feisky.xyz/tags//goal/</link><description>极客时间专栏作者，专注于 Kubernetes、AI Infra、AI Agent 领域的深度技术分享，让 AI 成为你的第二大脑</description><generator>Hugo 0.165.0</generator><language>zh-CN</language><managingEditor>Pengfei Ni</managingEditor><webMaster>Pengfei Ni</webMaster><lastBuildDate>Fri, 14 Aug 2026 12:39:05 +0000</lastBuildDate><atom:link href="https://feisky.xyz/tags//goal/index.xml" rel="self" type="application/rss+xml"/><item><title>Claude Code 也有 /goal 了，跟 Codex 的有什么不一样</title><link>https://feisky.xyz/posts/2026-05-13-claude-code-goal/</link><pubDate>Wed, 13 May 2026 10:00:00 +0800</pubDate><dc:creator>Pengfei Ni</dc:creator><category>Claude Code</category><category>/goal</category><category>Codex</category><category>Ralph Loop</category><category>AI Agent</category><category>长时任务</category><guid>https://feisky.xyz/posts/2026-05-13-claude-code-goal/</guid><description>&lt;p&gt;上周写了一篇 &lt;a href="https://mp.weixin.qq.com/s/qwjxsGpMacLNy93g6dz4Aw"&gt;Codex /goal 上线后，我把 Ralph Loop 卸了&lt;/a&gt;，顺带吐槽了 Claude Code + Ralph Loop 跑长任务各种不靠谱。没想到没过几天，Anthropic 就在新版 Claude Code 里把 &lt;code&gt;/goal&lt;/code&gt; 命令抄过来了。官方推文直接说了，这就是 Claude Code 内置的 Ralph Loop（Ralph Loop 只是一个插件）。&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>上周写了一篇<a href="https://mp.weixin.qq.com/s/qwjxsGpMacLNy93g6dz4Aw">Codex /goal 上线后，我把 Ralph Loop 卸了</a>，顺带吐槽了 Claude Code + Ralph Loop 跑长任务各种不靠谱。没想到没过几天，Anthropic 就在新版 Claude Code 里把<code>/goal</code> 命令抄过来了。官方推文直接说了，这就是 Claude Code 内置的 Ralph Loop（Ralph Loop 只是一个插件）。</p><p>用了几个场景，发现 /goal 确实比 Ralph Loop 好用不少，用起来也简单，一句<code>/goal</code> 就能启动，终于不用盯着 Agent 干活了。今天就带你一起看下这个新功能以及它背后的工作原理。</p><h2 id="使用方法">使用方法</h2><p>升级 Claude Code 到最新版本之后，<code>/goal</code> 后面跟一个完成条件，Claude Code 就会一直干到条件满足为止，比如：</p><pre tabindex="0"><code>/goal 所有 test/auth 目录下的测试通过,lint 也没有报错</code></pre><p>跟普通对话的区别是，每轮结束后 Claude Code 不会停下来等你输入，而是自动开始下一轮。界面上会显示一个<code>/goal active</code> 的状态条，标注运行时长。</p><p>具体的使用方法如下所示：</p><p><img src="/images/2026-05-13-claude-code-goal-goal-usage-guide-compressed.jpg" alt="Claude Code /goal 使用图解" loading="lazy" decoding="async"/></p><p>其实可用的命令也就三个：</p><ul><li><code>/goal &lt;条件&gt;</code>：设置目标，立即开始执行</li><li><code>/goal</code>：查看状态，包括条件、时长、轮次、token 用量</li><li><code>/goal clear</code>：取消当前目标（也可以用 stop、cancel、reset）</li></ul><p>需要你注意的是，条件怎么写很关键。写得模糊，模型还是有可能会糊弄你。比如这样写：</p><pre tabindex="0"><code>/goal 给这个项目写完整的测试</code></pre><p>“完整”没有定义，模型可以写几十个空壳测试，全部通过，然后宣布完成。所以建议你换成更具体的条件，比如：</p><pre tabindex="0"><code>/goal 给 src/auth/ 下所有函数写单元测试,要求:
1. 每个测试必须包含真实断言,不能只有空壳
2. 测试覆盖率达到 80% 以上
3. npm test 退出码为 0
4. 不修改 src/ 下的源代码
5. 20 轮后未完成则停止</code></pre><p>最后，我还加了条轮次上限，这个也很有用，防止 Claude Code 无限跑下去。</p><p>如果由于各种原因，中途退出了（比如到了 5 小时上限），后面再开启时可以用<code>--resume</code> 恢复目标继续执行。注意，你给它设置的条件最长支持 4000 个字符，可以写得很细了。</p><p>另外，还有两个比较好用的搭配：</p><p>第一个，<code>/goal</code> 跟 auto 模式搭配效果最好。auto 去掉每个工具调用的人工确认步骤，<code>/goal</code> 去掉每轮结束的等待，两个一起开就是完全无人值守。</p><p>第二个，在非交互模式开启，在自动化或者 SKILL 场景里面特别有用：</p><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>claude -p<span style="color:#e6db74">"/goal CHANGELOG.md 包含本周所有合并的 PR 记录"</span></span></span></code></pre></div><h2 id="实现原理">实现原理</h2><p><code>/goal</code> 本质上是一个 session 级别的 prompt-based Stop hook。这一句话就把它跟 Ralph Loop 区分开了。</p><p><img src="/images/2026-05-13-claude-code-goal-goal-architecture-compressed.jpg" alt="Claude Code /goal 运行原理" loading="lazy" decoding="async"/></p><p>你设置一个<code>/goal</code> 条件后，Claude Code（Opus 或 Sonnet）正常工作，读文件、改代码、跑测试。每轮结束后，系统把完成条件和当前对话记录发给一个独立的小模型（默认是 Haiku）。这个模型返回 yes/no 和一条理由。如果 no，理由会注入下一轮对话，告诉 Claude 还差什么，然后自动开始下一轮。如果 yes，goal 标记为完成，记录到对话记录里。</p><p>关键是这个评估模型不能调用任何工具，它只能基于对话记录里已有的文字来判断。</p><p>评估的提示词很短，从 GitHub 上提取的系统提示词来看，核心逻辑是：</p><pre tabindex="0"><code>You are evaluating a stop-condition hook in Claude Code.
Read the conversation transcript carefully, then judge
whether the user-provided condition is satisfied.
Your response must be a JSON object with one of these shapes:
- {"ok": true, "reason": "&lt;quote evidence from the
transcript that satisfies the condition&gt;"}
- {"ok": false, "reason": "&lt;quote what is missing or
what blocks the condition&gt;"}
Always include a "reason" field, quoting specific text from
the transcript whenever possible. If the transcript does not
contain clear evidence that the condition is satisfied,
return {"ok": false, "reason": "insufficient evidence
in transcript"}</code></pre><p>注意最后一条：找不到明确证据就默认返回证据不足。评估模型的默认立场是没做完，必须在对话记录里找到实锤才会放行。</p><p>不过实际用下来也是有不少问题的。评估模型只看对话文字，不能自己跑命令验证，所以如果工作模型在对话里写了“测试全通过”但实际没跑测试，评估模型看到的证据是充分的，自然会放行。想用好<code>/goal</code>，条件里最好写明具体的验证命令，让 AI 没法绕过。</p><h2 id="跟-ralph-loop-比">跟 Ralph Loop 比</h2><p>Ralph Loop 的核心机制是 Stop hook 拦截：Claude 干完一轮尝试退出时，hook 检查是否达到完成条件，没达到就把原始 prompt 重新注入。完成判断靠精确字符串匹配，Claude 输出<code>&lt;promise&gt;DONE&lt;/promise&gt;</code> 就算完成。prompt 里反复强调“不要撒谎来退出循环”，但模型嘛，说不撒谎就不撒谎了？</p><p>跟<code>/goal</code> 比，最关键的差距在完成判断。Ralph Loop 是模型自己说了算，输出一个标记就能退出，bash 脚本做字符串匹配放行，没有任何独立验证。<code>/goal</code> 换成了一个独立的小模型来评估，至少不是自己批改自己的试卷了。另外 Ralph Loop 每轮都会把原始 prompt 原封不动重新注入，跑多了上下文里堆满重复内容，虽然 Claude Code 的 compaction 还是会生效，但这些重复注入本身就是噪音。</p><p>顺便提一下，Claude Code 还有个<code>/loop</code> 命令，按时间间隔触发下一轮（比如每 5 分钟跑一次），适合轮询类定时任务。<code>/goal</code> 是每轮结束后立即触发下一轮，适合连续执行的目标。</p><h2 id="跟-codex-goal-比">跟 Codex /goal 比</h2><p>上篇文章里聊过，Codex<code>/goal</code> 的核心设计是三层：状态持久化（state-db）、权限控制（模型只能标记 complete，不能自行退出）、强制自审（<code>continuation.md</code> 要求拆检查清单，逐项对照真实文件和测试结果）。</p><p>Claude Code<code>/goal</code> 走了一条不同的路：不依赖工作模型的自查能力，而是引入独立的评估模型。</p><p>实际体验上两者差距明显。Codex 在目标执行和自审过程中可以通过工具来形成验证证据，grep 代码、跑测试、核对 spec，工作模型想造假成本很高。Claude Code 的评估模型只看对话文字，验证深度差一个量级，所以我自己跑下来还是 Codex 强得多（这也跟模型能力有关，Codex 搭配 GPT-5.5 才能达到最好的效果）。</p><h2 id="写在最后">写在最后</h2><p>翻这几个方案的实现原理时，突然想到了最近一直在关注的 Agent harness 这个话题。你会发现不管是 Claude Code /goal 的评估循环还是 Codex /goal 的权限控制，关键的约束都不是写在提示词里的，而是写在代码里的。Claude Code 用代码层面的 Stop hook 来驱动循环，Codex 的运行时每轮自动注入一段自审提示词，强制模型拆检查清单、逐项验证，模型不能自己选择要不要自审，代码替它做了强制自审。</p><p>CLAUDE.md 和 AGENTS.md 里写的规则模型可能忽略，但代码层面的 hook 100% 总会触发。这也是为什么 Agent harness 是必要的，光靠模型自觉是不够的，需要有人在外面用代码控制 AI 行为和边界。</p><p>回到<code>/goal</code> 本身，对于验收条件清晰、按照 SPEC/PLAN 就能逐步完成的任务，它是目前最省心的选择。但要注意 token 消耗问题，<code>/goal</code> 模式下每轮都是完整的 Opus/Sonnet 调用，跑十几轮下来主模型的 token 用量轻松翻几倍（Haiku 评估的开销相对很小，主要成本还是多轮主模型调用）。建议在条件里加上轮次上限，保护好你的 token 账单。</p><hr><p>相关链接：</p><ul><li>Claude Code /goal 官方文档：<a href="https://code.claude.com/docs/en/goal">https://code.claude.com/docs/en/goal</a></li><li>上篇 Codex /goal 推荐：<a href="https://mp.weixin.qq.com/s/qwjxsGpMacLNy93g6dz4Aw">https://mp.weixin.qq.com/s/qwjxsGpMacLNy93g6dz4Aw</a></li><li>Claude Code GitHub：<a href="https://github.com/anthropics/claude-code">https://github.com/anthropics/claude-code</a></li></ul><hr><p>欢迎长按下面的二维码关注<strong>Feisky</strong> 公众号，了解更多云原生和 AI 知识。</p><p><img src="/images/mp.png" alt="Feisky 公众号二维码" loading="lazy" decoding="async"/></p>
]]></content:encoded><dc:extent>6 min read</dc:extent></item></channel></rss>