2小時燒掉9億token後,我發現了OpenAI和Anthropic在/goal上的本質區別

作者:AI 博物院
日期:2026年5月23日 上午10:51
來源:WeChat 原文

整理版優先睇

速讀 5 個重點 高亮

CodexClaude Code嘅/goal功能:自審定他審,完成判定先係關鍵

整理版摘要

呢篇文章係一位開發者喺試用 Codex 0.128.0 嘅 /goal 功能之後嘅反思。社區有人燒咗 9 億 token 連續跑 21 個鐘,而 Anthropic 亦迅速跟進同名命令。作者最初以為 /goal 只係一個循環,但深入研究 CodexClaude Code 嘅實現之後,發現兩者表面一樣,骨子裏係完全相反嘅工程哲學。

/goal 嘅核心係完成判定——AI 點知道自己真係做完?Codex 嘅做法係強制注入一段好狠嘅審計提示詞,逼工作模型逐項核對證據;Claude Code 就另請一個冇工具嘅小模型嚟判卷。兩種方法各有優劣,但共同點係:完成判定係長任務質量嘅瓶頸,而且關鍵約束必須寫喺代碼層,唔可以只靠 prompt 規勸。

Ralph Loop 嘅做法係等 AI 自己話 DONE 就退出,但完成判定靠字符串匹配完全唔可靠。Codex 改用強制審計提示詞,要求模型假設未完成,逐項找證據,證據強度唔夠就算未完成。Claude Code 就完全分離判卷人,用獨立小模型睇對話紀錄判斷——呢個小模型冇工具,只能基於文字。呢兩種思路背後係 OpenAI 信約束工程化,Anthropic 信分離比約束有效。

  • /goal 將 prompt 從「做任務」進化到「達到狀態」,閉環自動化依賴完成判定機制。
  • Codex 用強制審計提示詞逼工作模型自審,可調工具驗證真實狀態;Claude Code 用獨立小模型他審,只能基於對話文字。
  • 自審上限受模型能力限制,他審可能被工作模型嘅輸出誤導——兩條路都唔完美。
  • 關鍵約束必須從提示詞層提升到代碼層:寫喺 CLAUDE.md 嘅規則可以被忽略,但寫喺代碼裏嘅強制注射冇得繞。
  • 用 /goal 需要寫結構化 SPEC,將 prompt 變成合約,定義清楚完成條件同驗證標準。
整理重點

/goal 嘅出現:一個命令兩種哲學

4 月 30 日,Codex 0.128.0 發佈,第一次帶上咗 /goal 命令。社區有人即刻用佢跑咗 21 個鐘,燒咗 9 億 token。OpenAI 總裁 Greg Brockman 喺 X 上將佢對標成 Ralph loop 嘅內置版本。兩星期後,Anthropic 喺 Claude Code 都跟進咗同名命令。

Codex 0.128.0

/goal

Ralph loop

9 億 token

作者話,最初見到 /goal 冇乜感覺——咪又係一個循環?但讀完兩家嘅實現之後,嚇咗一跳。表面一樣,骨子裏係完全相反嘅路。

表面一樣,骨子裏完全相反

整理重點

Ralph Loop:讓 AI 自己話做完就退出

Ralph Loop 係一個簡單循環:反覆將同一段任務餵畀 AI,直到佢自己輸出特定暗號(例如 DONE)就算完成。Anthropic 官方倉庫有示例插件,用鈎子攔截。作者話,呢個設計就係讓 AI 自己批改自己嘅試卷。

DONE

自己批改自己嘅試卷

Ralph Loop 作者都知唔可靠,文檔提醒要配最大輪次兜底。注入嘅提示詞有一句:'ONLY when statement is TRUE - do not lie to exit'——你唔好撒謊啊。但靠提示詞一句話兜唔住。

整理重點

自審 vs 他審:兩種判卷法

CodexClaude Code 都重新設計咗完成判定,但路線完全唔同。

  • Codex 方法:每次想停,強行注入一段審計提示詞,要求模型假設未完成,逐項核對證據,證據強度唔夠就算未完成。審計唔可以憑記憶或合理結論,要真係揾到證據。呢段提示詞係運行時強制注入,模型冇得跳過。
  • Claude Code 方法:工作模型做完一輪,將完成條件同對話紀錄打包,交畀一個獨立小模型判卷。小模型冇工具,只能基於文字判斷,返一個「係/否」加理由。係就退出,否就將理由塞返畀主模型繼續。

自審路線(Codex)審嘅係真狀態

他審路線(Claude Code)獨立但睇唔到現實

生成同判定要分開

整理重點

完成判定係長任務質量嘅天花板

兩家嘅本質都係承認完成判定係長任務質量嘅瓶頸。如果 AI 跑咗 21 個鐘、燒咗 9 億 token,最後話做完——你信嗎?唔審計,就只能信。但信唔係工程。

完成判定係長任務質量嘅瓶頸

作者話,/goal 改變咗 prompt 嘅形態。以前 prompt 係做呢件事,而家變成達到呢個狀態,按呢個標準驗證。prompt 變成一份合約,對寫需求嘅人要求更高。如果你將一份結構化 SPEC 餵畀 /goal,完成審計先可以精確工作。

關鍵約束必須從提示詞層提升到代碼層

prompt 變咗一份合約

  • 將 prompt 從「做呢件事」改寫成「達到呢個狀態,按呢個標準驗證
  • 完成條件要可驗證,最好係測試通過、lint 冇報錯等客觀指標
  • 關鍵約束要寫喺代碼層,唔好依賴模型自覺遵守 prompt

4月30日,Codex 0.128.0 發佈,第一次加入咗 /goal。社區即刻有人用佢跑咗21個鐘,燒咗9億 token。OpenAI 總裁 Greg Brockman 喺 X 上面將佢對標成 Ralph loop 嘅內置版本——佢原話係「codex now has a built in Ralph loop++」。

兩個禮拜後,Anthropic 喺 Claude Code 都跟進咗同名嘅命令。

除咗呢兩間,Hermes、OpenCode 都陸續跟咗上嚟。/goal 已經變咗呢類工具嘅共識機制。

講真,第一次見到呢個命令嗰陣我冇乜感覺——咪又係一個循環?以前用腳本同埋鈎子拼埋一齊都做到出嚟。

但係讀完兩間嘅實現之後,我呆咗一下。

表面睇用法一樣,骨子裏行嘅係兩條完全相反嘅路。

/goal 到底係做乜嘢嘅

以前你同 Claude Code 或者 Codex 講「幫我將呢堆測試跑通」,佢跑一輪,停低,你睇一眼話「繼續」,佢再跑一輪。中間總要有人喺度睇住。

/goal 將呢件事改咗。你俾一段任務,再俾一個完成條件——例如所有測試通過、lint 冇報錯——撳嚇 Enter,AI 自己開始跑。每跑完一輪,佢自己判斷條件係咪滿足,冇滿足就再嚟一輪,滿足咗先停。

形式上係咁樣:

/goal 將 src/auth/ 下面所有測試跑通,lint 冇報錯

唔需要中間撳 Enter 講「繼續」。

prompt 嘅形態變咗。以前係叫 AI 做呢件事,而家係叫 AI 將呢件事做到呢個狀態為止。

聽落都幾美好。

但你諗下——AI 點知自己真係做曬?

呢個就係成件事嘅核心問題。

Ralph Loop:AI 自己話做完,就退出

/goal 唔係無端端走出來嘅。喺佢之前,社區流行過一個做法叫 Ralph Loop。

個名嚟自《阿森一族》入面嗰個屢戰屢敗嘅 Ralph Wiggum——一種鍥而不捨嘅工作法。原始版本就係一段簡單嘅循環:反覆將同一段任務餵俾 AI,直到佢自己話「我做曬」。

Anthropic 官方倉庫入面有個示例插件,將呢個套路工程化咗。邏輯得兩件事:

第一,每次 AI 想停低,鈎子攔住佢,將原任務再餵一次。

第二,AI 輸出一句特定嘅暗號(例如 DONE),就算完成,循環退出。

我第一次見到呢個設計嗰陣,第一個反應係——

呢個咪即係叫 AI 自己改自己份卷?

佢願意寫出 DONE 就退出,唔願意就繼續跑。完成判定權完全喺 AI 自己手上。

Ralph Loop 嘅作者自己都好清楚呢件事唔靠譜,所以喺文檔入面反覆提示要配最大輪次兜底。注入俾 AI 嘅提示詞入面甚至有一句好說明問題:

ONLY when statement is TRUE - do not lie to exit

你唔好講大話啊。

但係叫 AI 唔講大話呢件事,靠提示詞一句說話係兜唔住嘅。

AI 話「我做曬」同真係做曬之間,爭咗一座獨立驗證嘅橋。

兩種判卷方法

Ralph Loop 驗證咗一件事——循環呢套思路,工程上係可行嘅。

但完成判定唔可以靠模型自己話事。呢個係佢最大嘅瓶頸。

Codex 同 Claude Code 都重新設計咗呢一部分。但係兩間揀咗完全唔同嘅方向。

Codex 嘅方法:叫 AI 自己審,但審得冇咁舒服

Codex 冇換判卷人。每次 AI 想停低,運行時強行塞一段審計提示詞俾佢——而且呢段提示詞寫得相當狠。

我將呢段提示詞嘅核心意思翻譯一下:

喺你判定任務完成之前,先假設冇完成。然後逐項核對——目標入面每一條要求、每一個產物、每一個測試、每一道關卡,逐個揾證據證明佢已經做曬。證據強度唔夠?當冇完成。

最關鍵嘅一句:審計必須證明做曬,唔可以淨係以冇揾到冇做嘅嘢作為完成依據。

而且佢明確禁止憑印象、憑記憶、憑一個睇落合理嘅結論當證據。

我讀到呢段嗰陣有啲佩服。呢個係將完成呢件事,由模糊感覺變咗做一份逐項核對嘅清單。

更重要嘅係,呢段提示詞唔係寫喺文檔入面建議你最好咁做——佢係被運行時強行注入到 AI 每一輪嘅上下文入面。你想 skip 都 skip 唔到。

工作模型本身有行命令、查文件、睇測試結果嘅能力。所以佢審嘅係真狀態,唔係憑腦補。

Claude Code 嘅方法:另外請一個小模型嚟判

Anthropic 行嘅係另一條路。

工作模型做完一輪嘢,停低。Claude Code 將完成條件同對話記錄打包,交俾一個獨立嘅小模型去睇。呢個小模型嘅工作得一件事:讀完對話,判斷條件係咪真係滿足咗。

佢返回嘅係一個簡單嘅判斷:係 / 唔係,配一段簡短嘅理由。

係?退出循環。

唔係?將理由作為系統消息塞返去,叫主模型繼續做。

呢個小模型有個關鍵約束——佢冇工具。佢行唔到測試、查唔到文件,只能基於對話入面已經寫咗出嚟嘅文字做判斷。

我見到呢個設計第一個反應係:呢個就係 Anthropic 一貫嘅思路——生成嘅人同判定嘅人,一定要係兩個人。

VentureBeat 報道入面有一句講得好到位:

You can't trust a model to judge its own homework. The model doing the work is the worst judge of whether it's done.

意思係:你冇辦法叫一個模型自己改自己嘅功課。做嘢嗰個人,係最唔應該做判卷人嗰個。

自審 vs 他審,分別喺邊

你睇得出嚟啦——一邊係叫 AI 自己審,一邊係另外請判卷人。

各有優劣。

自審路線(Codex)嘅優勢係審嘅係真嘢。佢可以調工具、可以行命令、可以讀真實文件。證據係硬嘅。但佢有個上限——審計能力被工作模型本身嘅能力卡住。模型唔得,再狠嘅提示詞都只係做嚇樣。

他審路線(Claude Code)嘅優勢係獨立。判卷人同做嘢嘅人完全解耦,思路上更乾淨。但佢嘅侷限都好明顯:判卷人睇唔到現實,只能基於對話入面講咗啲乜做判斷。如果工作模型喺對話入面寫一句「測試全部通過咗」,但實際上冇行——判卷人見到嘅證據就成立咗,佢會放行。

Claude Code 嘅文檔入面寫得好坦白:

你要將條件寫成 Claude 自己可以喺輸出入面證明嘅樣。例如 test/auth 下面所有測試通過呢種條件用得,係因為 Claude 會執行測試,結果會落喺對話入面,判卷人睇得到。

潛台詞係:你要信做嘢嗰個人唔會作命令輸出。

兩條路都唔完美。

但你諗下——Codex 揀咗叫 AI 自己審,但審得冇咁舒服;Anthropic 揀咗另外請一個睇唔到現實嘅判卷人。

呢個背後係兩種工程哲學。

OpenAI 信約束可以工程化——只要審計提示詞寫得夠狠,工具調用框得夠死,就可以逼出審計行為。

Anthropic 信分離比約束有效——你冇辦法叫一個人自己審自己,咁就揾另一個人嚟審。

兩間都冇默認將可以調工具嘅他審 AI 整入 /goal,即使呢條路從原理上完全做得到。點解?每輪多行一個模型,成本翻倍,仲要俾佢獨立嘅沙盒同權限,狀態機跟住都複雜埋。

工程上有時唔係最完美嘅方案贏,係成本同效果妥協落嚟仲行得鬱嘅方案贏。

關鍵約束一定要放喺代碼層

讀完兩間嘅設計,有一件事係相通嘅。

Codex 嗰段強約束審計提示詞,本質上只係一段文字。佢之所以生效,係因為每一輪上下文都被運行時強行注入咗呢段文字——AI 冇可能 skip 過。

呢個強行注入嘅動作,寫喺代碼入面,模型冇得改。

Claude Code 嘅判卷人都一樣。判卷人可以喺每一輪無條件被調用,係因為呢個係鈎子協議喺 Claude Code 內核入面嘅強制契約。

兩間用完全唔同嘅代碼結構,表達咗同一件事——

嗰啲模型可能唔會遵守嘅關鍵約束,一定要由提示詞層提升到代碼層。

寫喺 CLAUDE.md 入面嘅規則,模型可以選擇性忽略。寫喺 prompt 入面嘅「請你嚴格審計」,模型可以求其過關。但係寫喺代碼入面嘅「每一輪無條件做呢件事」,模型冇辦法繞過。

我之前喺 Harness Engineering 嗰篇文章入面寫過:建議同約束,完全兩回事。而家更加確信。

不過兩間分離嘅位置唔同。Claude Code 係另外開咗一個獨立權重嘅小模型,工作模型同佢冇共用嘅判斷邏輯——分離發生喺模型權重一層。Codex 冇換模型,叫工作模型自己審,但靠運行時強制注入嘅審計提示詞將審計動作同生成動作隔離開——分離發生喺上下文一層。

同樣係分離,做法可以完全唔同。

完成判定,係長任務質量嘅天花板

Ralph Loop 嘅瓶頸喺邊?

字串匹配判完成。AI 只要肯輸出 DONE,成個循環就失效。

Codex 同 Claude Code 都重新設計咗完成判定。思路截然不同——一個加上強約束嘅審計提示詞逼工作模型自審,一個乾脆將審計責任移俾獨立小模型。

但兩間嘅本質都係承認咗一件事:

完成判定係長任務質量嘅瓶頸。

如果一個 AI 跑咗 21 個鐘、燒咗 9 億 token,最後佢話「我做曬」——你信唔信?

唔審計,就惟有信。

但信唔係工程。

社區入面有人喺 Claude Code 上面拼咗一套 Codex 風格嘅實現,用鈎子攔截,自己持久化目標狀態,用一段強約束嘅提示詞包裹任務,要求模型喺標記完成前做證據核對。

呢個說明啲乜?

呢個說明呢兩條路喺內核層級係可以互相替換嘅。差別只係邊個原生支持邊一種。

最後產出嘅質量好唔好,都係睇工作模型本身嘅能力。

/goal 係 prompt 嘅新形態

我自己用 Claude Code 大半年,/goal 令我再睇一次點樣寫 prompt 呢件事。

以前 prompt 係做呢件事。

而家 prompt 變成達到呢個狀態,按呢個標準驗證,期間唔可以違反呢啲約束。

prompt 變成咗一份合約。

呢種形態對寫需求嘅人提出咗更高嘅要求。/goal 一跑就係成日——目標寫得求其,就只會換來求其嘅產出。

如果你將一份結構化嘅 SPEC 文檔餵俾 /goal,完成審計先可以精確工作。如果你只寫一句「將代碼跑通」,審計就只會退化到測試通過等於完成。

SDD(Spec-Driven Development)呢種開發範式之所以會興起,正正係因為 /goal 呢種自治循環嘅工具開始普及。

工具變咗,寫需求嘅方式都要跟住變。

最後

我諗咗一下 /goal 呢件事。

佢唔係一個新功能。佢係 AI 工具開始接管自我驗證呢一環嘅信號。

以前 AI 做完嘢,要有人睇住。

而家 AI 做完嘢,AI 自己(或者另一個 AI)判斷佢係咪真係做曬。

人由睇住退咗一步——退到定義合約呢一步。

但係合約能唔可以定義清楚,決定咗呢件事最後值唔值。

工具越強,人嘅判斷越重要。

4 月 30 日,Codex 0.128.0 發佈,第一次帶上了 /goal。社區裏立刻有人用它跑了 21 個小時,燒掉 9 億 token。OpenAI 總裁 Greg Brockman 在 X 上把它對標成 Ralph loop 的內置版本——他原話是「codex now has a built in Ralph loop++」。

兩週後,Anthropic 在 Claude Code 也跟進了同名命令。

除了這兩家,Hermes、OpenCode 也都陸續跟上。/goal 已經成了這一類工具的共識機制。

說實話,第一次看到這個命令的時候我沒什麼感覺——不就是一個循環嗎?以前用腳本和鈎子拼一拼也能做出來。

但讀完兩家的實現之後,我愣了一下。

表面看用法一樣,骨子裏走的是兩條完全相反的路。

/goal 到底是幹嘛的

以前你跟 Claude Code 或者 Codex 說「幫我把這堆測試跑通」,它跑一輪,停下來,你看一眼說「繼續」,它再跑一輪。中間總得有個人在那盯着。

/goal 把這件事改了。你給一段任務,再給一個完成條件——比如所有測試通過、lint 沒報錯——回車一敲,AI 自己開始跑。每跑完一輪,它自己判斷條件是否滿足,沒滿足就再來一輪,滿足了才停。

形式上像這樣:

/goal 把 src/auth/ 下所有測試跑通,lint 沒報錯

不需要中間敲回車說「繼續」。

prompt 的形態變了。以前是讓 AI 做這件事,現在是讓 AI 把這件事做到這個狀態為止。

聽起來挺美好的。

但你想想——AI 怎麼知道自己真的做完了?

這就是整件事的核心問題。

Ralph Loop:AI 自己說做完,就退出

/goal 不是憑空冒出來的。在它之前,社區裏流行過一個做法叫 Ralph Loop。

名字來自《辛普森一家》裏那個屢戰屢敗的 Ralph Wiggum——一種鍥而不捨的工作法。原始版本就是一段簡單的循環:反覆把同一段任務餵給 AI,直到它自己說「我做完了」。

Anthropic 官方倉庫裏有個示例插件,把這個套路工程化了。邏輯就兩件事:

第一,每次 AI 想停下來,鈎子攔住它,把原任務再喂一次。

第二,AI 輸出一句特定的暗號(比如 DONE),就算完成,循環退出。

我第一次看到這個設計的時候,第一反應是——

這不就是讓 AI 自己批改自己的試卷嗎?

它願意寫出 DONE 就退出,不願意就接着跑。完成判定權完全在 AI 自己手裏。

Ralph Loop 的作者自己也清楚這事兒不靠譜,所以在文檔裏反覆提示要配最大輪次兜底。注入給 AI 的提示詞裏甚至有一句話很說明問題:

ONLY when statement is TRUE - do not lie to exit

你別撒謊啊。

但讓 AI 不撒謊這件事,靠提示詞上一句話是兜不住的。

AI 說「我做完了」和真的做完了之間,差着一座獨立驗證的橋。

兩種判卷法

Ralph Loop 驗證了一件事——循環這套思路,工程上是可行的。

但完成判定不能靠模型自己說了算。這是它最大的瓶頸。

Codex 和 Claude Code 都重新設計了這一塊。但兩家選了完全不同的方向。

Codex 的方法:讓 AI 自己審,但審得沒那麼舒服

Codex 沒換判卷人。每次 AI 想停下來,運行時強行塞一段審計提示詞給它——而且這段提示詞寫得相當狠。

我把這段提示詞的核心意思翻譯一下:

在你判定任務完成之前,先假設沒完成。然後逐項核對——目標裏每一條要求、每一個產物、每一個測試、每一道關卡,挨個找證據證明它已經做完了。證據強度不夠?算沒完成。

最關鍵的一句:審計必須證明做完了,不能僅以沒找到沒做的事作為完成依據。

而且它顯式禁止憑印象、憑記憶、憑一個看起來合理的結論當證據。

我讀到這段的時候有點佩服。這是把完成這件事,從模糊感受變成了一份逐項核對的清單。

更重要的是,這段提示詞不是寫在文檔裏建議你最好這麼做——它是被運行時強行注入到 AI 每一輪的上下文裏。你想跳過都跳不過去。

工作模型本身有跑命令、查文件、看測試結果的能力。所以它審的是真狀態,不是憑腦補。

Claude Code 的方法:另外請一個小模型來判

Anthropic 走的是另一條路。

工作模型幹完一輪活,停下來。Claude Code 把完成條件和對話記錄打包,交給一個獨立的小模型去看。這個小模型的工作只有一件事:讀完對話,判斷條件是不是真的滿足了。

它返回的是一個簡單的判斷:是 / 否,配一段簡短的理由。

是?退出循環。

否?把理由作為系統消息塞回去,讓主模型接着幹。

這個小模型有個關鍵約束——它沒有工具。它跑不了測試、查不了文件,只能基於對話裏已經寫出來的文字做判斷。

我看到這個設計第一反應是:這就是 Anthropic 一貫的思路——生成的人和判定的人,得是兩個人。

VentureBeat 報道里有一句話挺到位的:

You can't trust a model to judge its own homework. The model doing the work is the worst judge of whether it's done.

意思是:你沒法讓一個模型自己批改自己的作業。幹活的人,是最不該當判卷人的人。

自審 vs 他審,差在哪

你看出來了——一邊是讓 AI 自己審,一邊是另請判卷人。

各有優劣。

自審路線(Codex)的優勢是審的是真東西。它能調工具、能跑命令、能讀真實文件。證據是硬的。但它有個上限——審計能力被工作模型本身的能力卡住。模型不行,再狠的提示詞也只是走過場。

他審路線(Claude Code)的優勢是獨立。判卷人和幹活的人完全解耦,思路上更乾淨。但它的侷限也很明顯:判卷人看不到現實,只能基於對話裏說了什麼做判斷。如果工作模型在對話裏寫一句「測試全部通過了」,但實際沒跑——判卷人看到的證據就成立了,它會放行。

Claude Code 的文檔裏寫得很坦誠:

你要把條件寫成 Claude 自己能在輸出裏證明的樣子。比如 test/auth 下所有測試通過這種條件能用,是因為 Claude 會運行測試,結果會落到對話裏,判卷人看得到。

潛台詞是:你得相信幹活的人不會編造命令輸出。

兩條路都不完美。

但你想一下——Codex 選了讓 AI 自己審,但審得沒那麼舒服;Anthropic 選了另請一個看不見現實的判卷人。

這背後是兩種工程哲學。

OpenAI 信約束可以工程化——只要審計提示詞寫得夠狠,工具調用框得夠死,就能逼出審計行為。

Anthropic 信分離比約束有效——你沒法讓一個人自己審自己,那就找另一個人來審。

兩家都沒默認把能調工具的他審 AI 做進 /goal,即使這條路從原理上完全做得到。為什麼?每輪多跑一個模型,成本翻倍,還得給它獨立的沙盒和權限,狀態機也跟着複雜。

工程上有時候不是最完美的方案勝出,是成本和效果折中下來還能跑得動的方案勝出。

關鍵約束必須放在代碼層

讀完兩家的設計,有一件事是相通的。

Codex 那段強約束審計提示詞,本質上只是一段文字。它之所以能生效,是因為每一輪上下文都被運行時強行注入了這段文字——AI 不可能跳過。

這個強行注入的動作,寫在代碼裏,模型沒法改。

Claude Code 的判卷人也一樣。判卷人能被每一輪無條件調用,是因為這是鈎子協議在 Claude Code 內核裏的強制契約。

兩家用完全不同的代碼結構,表達了同一件事——

那些模型可能不遵守的關鍵約束,必須從提示詞層提升到代碼層。

寫在 CLAUDE.md 裏的規則,模型可以選擇性忽略。寫在 prompt 裏的「請你嚴格審計」,模型可以糊弄過去。但是寫在代碼裏的「每一輪無條件做這件事」,模型沒辦法繞。

我之前在 Harness Engineering 那篇文章裏寫過:建議和約束,完全兩回事。現在更確信了。

不過兩家分離的位置不一樣。Claude Code 是另起了一個獨立權重的小模型,工作模型跟它沒有共用的判斷邏輯——分離發生在模型權重一層。Codex 沒換模型,讓工作模型自己審,但靠運行時強制注入的審計提示詞把審計動作和生成動作隔離開——分離發生在上下文一層。

同樣是分離,做法可以完全不同。

完成判定,是長任務質量的天花板

Ralph Loop 的瓶頸在哪?

字符串匹配判完成。AI 只要願意輸出 DONE,整個循環就失效。

Codex 和 Claude Code 都重新設計了完成判定。思路截然不同——一個加上強約束的審計提示詞逼工作模型自審,一個乾脆把審計責任挪給獨立小模型。

但兩家的本質都是承認了一件事:

完成判定是長任務質量的瓶頸。

如果一個 AI 跑了 21 個小時、燒了 9 億 token,最後它說「我做完了」——你信嗎?

不審計,就只能信。

但信不是工程。

社區裏有人在 Claude Code 上拼了一套 Codex 風格的實現,用鈎子攔截,自己持久化目標狀態,用一段強約束的提示詞包裹任務,要求模型在標記完成前做證據核對。

這說明什麼?

這說明這兩條路在內核層級是可以互相替換的。差別只是誰原生支持哪一種。

最後產出的質量好不好,還是看工作模型本身的能力。

/goal 是 prompt 的新形態

我自己用 Claude Code 大半年了,/goal 讓我重新看了一眼怎麼寫 prompt 這件事。

以前 prompt 是做這件事。

現在 prompt 變成達到這個狀態,按這個標準驗證,期間不能違反這些約束。

prompt 變成了一份合約。

這種形態對寫需求的人提出了更高的要求。/goal 一跑就是一整天——目標寫得糊弄,就只能換回糊弄的產出。

如果你把一份結構化的 SPEC 文檔餵給 /goal,完成審計才能精確工作。如果你只寫一句把代碼跑通,審計就只能退化成測試通過等於完成。

SDD(Spec-Driven Development)這種開發範式之所以會火,正是因為 /goal 這種自治循環的工具開始普及。

工具變了,寫需求的方式也得跟着變。

最後

我想了一下 /goal 這件事。

它不是一個新功能。它是 AI 工具開始接管自我驗證這一環的信號。

以前 AI 幹完活,得有人盯着。

現在 AI 幹完活,AI 自己(或者另一個 AI)判斷它是不是真做完了。

人從盯着退了一步——退到定義合約這一步。

但合約能不能定義清楚,決定了這件事最後值不值。

工具越強,人的判斷越重要。