好的,我將遵循您的所有指示,特別是關於術語、格式和內容類型的判斷,進行本次翻譯。
Fable 5 + GPT-5.6:從 A 到 Z 建構一個在你睡覺時也能出貨的 Agent 堆疊
這是完整的建構流程,按照順序排列,每個部分之後都有一個檢查點。
在忘記之前,先把這 12 個建構項目加入書籤。
引言
你手上擁有兩個迄今為止最強大、且已普遍開放的模型,但你卻仍然一次只用手動操作一個。
上個月發生了三個變化。
- Claude Fable 5 能夠跨階段規劃、派遣自己的子 Agent,並驗證自己的輸出。輸入端每百萬 tokens 收費 10 美元,輸出端收費 50 美元。
- GPT-5.6 於 7 月 9 日發布,分為三個永久定價層級。Sol 為 5 美元和 30 美元,Terra 為 Sol 的一半,Luna 為 1 美元和 6 美元。OpenAI 現在將路由決策本身作為產品販售。
- Fable 5 在 6 月有 19 天處於暫停狀態,原因是出口管制命令。可用性現在變成了一件會發生在你身上的事。
隨意使用時,這些模型只是一種產生令人印象深刻但錯誤結果的昂貴方式。
但在一個系統內運行時,它們是你所能租到最接近真正員工的東西。Anthropic 的企業數據顯示,Claude Code 每個開發者每個活躍日約花費 13 美元。OpenAI 則將 Codex 的費用定在每月 100 到 200 美元之間。
本指南將透過十二個建構步驟來建立這個系統:實際的檔案,按照順序,每個在發布前都經過測試,並且在每個步驟之後都有檢查點,讓你在堆疊下一個組件之前,先確認這一個是能運作的。
這份指南適用於任何擁有儲存庫、終端機,並能存取任一 CLI 的人。範例帶有程式碼風格,因為此類循環(loop)是圍繞著程式碼發展起來的,但路由器、顧問和閘道(gate)在處理發票和報告時,運作方式也完全相同。
請按順序閱讀,並執行檢查。每個建構步驟需要 10 到 20 分鐘,總共約兩小時。最後的 30 天是你的系統賺取「無需你監督也能運行」這個權利的時間表。
以下三個原則預測了下方所有的設計決策:
- 在邊界進行路由。先決定模型,再決定投入程度。 在會話中途切換模型會燒掉價值 90% 的緩存折扣。在同一模型上提高思考投入程度,並不會增加額外的管道成本。
- 沒有東西能為自己的作業打分。 撰寫者、路由器、顧問和審查者是不同的角色,且盡可能來自不同的模型血統,最終的決定權由一個 bash 腳本掌握。
- 「完成」是一個關於環境的事實。 一個通過的測試套件、一個打勾的任務檔案、一行判決結果。絕不是模型對自己的看法。
地圖,以及為什麼常規的那張是錯的
Loop 工程(Loop engineering)是一種具有明確停止條件和重試邏輯的代理工作流程(agentic workflow)。是由控制框架(harness)來決定工作何時完成,而不是把「我完成了嗎」這個問題留給模型。
標準的圖示是 swyx 的 Loopcraft 堆疊:五個迴圈相互嵌套,執行在任務內,任務在產品內,產品在系統內,系統在監督內,每個都有各自的出口。這是目前為止畫得最好的一張圖。
我使用了它好幾週。然後我嘗試依據它來建構,它卻在四個地方出了問題。
1) 問題一:這些迴圈並非嵌套關係。
嵌套意味著外層迴圈運行一次,等於內層迴圈完整運行一次。但實際情況並非如此。系統迴圈不會等待產品迴圈完成。它固定在每個星期日運行,不管有沒有任何東西出貨。
你可以手動中斷一個 token 串流,而無需解開四層結構。這是一張畫在一個執行交接的系統上,但卻表現得像包含關係的圖。
2) 問題二:一個被畫成無限循環的迴圈,就是一張帳單。
原始圖示就是這樣畫產品迴圈的。在實踐中,它會因為預算、檢查點,或者有人失去耐心而結束。
稱之為「非刻意設計」掩蓋了資金從 Agent 系統中流失的確切位置:一個沒有人告訴它何時該退出的迴圈。
3) 問題三:沒有中止機制。
每一層都有一個快樂結局,但沒有不快樂的結局。真實的迴圈兩者都需要:它如何在工作順利時關閉,以及它如何在無法繼續時停止。
我所見過的每一張失控的帳單,都是一個定義了退出條件,卻沒有定義中止條件的迴圈。
4) 問題四:驗證是缺失的,而這正是整個遊戲的核心。
驗證是各層之間的契約。當一個較低層的迴圈向上層迴圈傳遞一份報告而不是一個事實時,上層迴圈就會基於一個謊言而關閉。
這一個單一的缺口,就是為什麼一個迴圈可以達到其停止條件,卻仍然是錯誤的原因。
以下是我據以建構的版本。
證據階梯
六個階層,每個都有兩個出口,以及一條規則:控制作為目標向下流動,證據作為事實向上流動,沒有任何一個階層可以基於其下層的報告就宣告關閉。

從這個結構中可以推導出五條法則。
每個階層都必須有一個中止機制,否則它就是一個帳單。 如果你無法說出一個迴圈會如何結束得很糟,那你就是建構了一個訂閱服務。這就是為什麼 ralph.sh 設定了兩個上限,而 swarm 設定了循環次數上限。
證據向上流動,控制向下流動。 一個階層基於其下層所產生的事實來關閉,而不是基於其下層所撰寫的摘要。
工廠大門就是這條法則在 SQL 中的體現。兩位審查者都說通過。大門依然拒絕,因為沒有人產生一個通過的測試資料行。
一個判決是一種意見。一行資料是證據。
每轉一圈的成本,每上升一個階層大約增加十倍。
一個從第二階層逃脫的錯誤,在第三階層捕捉到的成本要高十倍,而在第四階層則要高出一百倍。
這就是為什麼要把你最好的驗證放在階梯上盡可能低的位置的完整論點,這也就是為什麼大門是一個 bash 腳本,而不是一場會議。
時間尺度屬於模型,不屬於階層。
第二階層在 2024 年需要幾分鐘,在 2026 年需要幾小時,不久後可能需要幾天。設計時要針對退出條件,永遠不要針對時鐘。這就是舊圖示老化最快的地方。
只有第五階層沒有退出條件,而這就是「人類」的意義所在。
你住在這裡。這個階梯的存在只為了一句話:一個迴圈可以達到它的停止條件,卻仍然是錯誤的。
測試通過了,大門變綠了,兩位審查者都簽署了,但最後一次提交仍然是個錯誤。你以下的每一個階層,都是為了讓這個檢查變得更小。它們之中沒有任何一個能取代你的角色。
先決條件
1claude CLI (Claude Code) 並具備 Fable 5 存取權限2codex CLI 並具備 GPT-5.6 存取權限 # 或是在 Claude Code 內部使用官方插件3python3, jq, git, gh, make, cron4一個目前測試指令能正常運作的儲存庫56# 可選,用於混合車隊(BUILD 7):7openai/codex-plugin-cc # 官方:在 Claude Code 內部執行 Codex8claude-model-switch # 本地代理:在 Claude Code 背後使用任何提供商9CLIProxyAPI # 將 CLI 訂閱封裝為 API 端點
你正在建構的內容
1your-repo/2 CLAUDE.md # BUILD 1:Claude 端的憲法3 AGENTS.md # BUILD 1:Codex 端的憲法4 .claude/5 skills/model-bench/SKILL.md # BUILD 0:價格、API ID、降級選項。唯一包含數字的檔案6 skills/model-router/SKILL.md # BUILD 47 skills/stuck-protocol/SKILL.md # BUILD 58 skills/ship-gate/SKILL.md # BUILD 29 agents/fable-expert.md # BUILD 510 agents/fresh-eyes-reviewer.md # BUILD 611 agents/sol-reviewer.md # BUILD 612 agents/scout.md # BUILD 713 loop/14 ralph.sh # BUILD 3:心跳15 two_lane.sh # BUILD 6:跨供應商審查迴圈16 PROMPT.md TASKS.md # BUILD 3:工作協議17 gate/18 verify.sh # BUILD 2:確定性的最終決策19 eval_gate.py eval/cases.jsonl # BUILD 2:路由變更的大門20 router/21 router.py # BUILD 422 advisor_loop.py # BUILD 523 ~/.codex/24 config.toml # BUILD 0:luna/terra/sol 設定檔25 prompts/effort.md # /effort 評估任務,指定座位26 prompts/plan-stop.md # /plan-stop 規劃,定價,然後停止27 prompts/fable-advice.md # /fable-advice 跨供應商專家諮詢28 prompts/review-hostile.md # /review-hostile 乾淨背景下的判決29 prompts/compost.md # /compost 失敗變成法則,每週一次30 factory/31 factory_gate.py # BUILD 8:黑板 + 完成閘道32 factory.sh # BUILD 8:簡報 -> 實作 -> 審查 -> 閘道33 factory.db # BUILD 8:做出決策的資料行34 swarm/35 swarm.sh # BUILD 9:規劃 -> 派遣 -> 評分 -> 重新規劃36 goals.jsonl # BUILD 9:每行一個目標,每個目標都有其檢查條件37 system/38 verify_goals.py # BUILD 10:每日重新驗證,持續進行39 goals/ # BUILD 10:每個完成的項目一個檔案40 ROUTING.md # BUILD 12:完整的路由策略,包含兩個控制框架41 progress.log # 每個建構步驟都會附加到這裡42 # 可選 (BUILD 7):在 localhost:4000 上的 claude-model-switch 代理,43 # 用於將 CLI 訂閱封裝為 API 端點的 CLIProxyAPI
BUILD 0:設定引擎
在撰寫你自己的任何檔案之前,先設定好這些。以下每個數字在發布當週都已根據官方定價頁面驗證過。
配置清單:2026 年 7 月的每個座位
系統會從這個清單中聘請人員。
價格存放在一個技能檔案中,.claude/skills/model-bench/SKILL.md,在任何路由或成本問題之前會按需載入。沒有其他檔案寫死任何數字。
在本文撰寫前的六週內,價格變動了三次。 文章中的價格在發布時就已過時。而技能檔案中的價格則只需一次編輯就能更新。

這個區分決定了下游的一切:
- Fable 5 領先於嚴肅的軟體工作。 在 SWE-Bench Pro 上達到 80%,而 Sol 為 64.6%,並且在整體智能上略勝 Sol 一籌。
- Sol 領先於終端機和 Agent 工作。 在 Terminal-Bench 2.1 上達到 88.8%,並在編碼 Agent 指數中名列前茅,而每個任務的成本大約是 Fable 的三分之一。
這個區分就是為什麼這個系統採用雙供應商架構。Fable 負責判斷和規劃,Sol 負責審查和驅動終端機,而兩者都不負責大量的打字工作。

人們經常誤解的兩個座位。
Opus 4.8 並不是那個被塵封的老旗艦。 它是 Fable 底下的自動降級選項,也是複雜代理編碼的推薦預設模型。無論你有沒有計劃,你的系統都會繼承它。
處於 introductory 定價的 Sonnet 5 是整個棋盤上性價比最高的選擇。 能力接近 Opus 4.8,但輸入價格僅為 Fable 的一小部分,這就是為什麼它在本建構中到處都是預設的執行者。這個費率將在 8 月 31 日到期,而技能檔案已經知道這一點。
那個技能檔案是系統中唯一包含數字的檔案:
1---2name: model-bench3description: 目前這個系統可以聘請的所有模型的最新價格表、API 模型 ID 和降級鏈。在任何路由決策、成本估算、預算問題、模型比較或用戶詢問某項費用之前載入。4---56# 模型配置清單78價格和 API 識別碼的單一事實來源。此儲存庫中沒有其他東西寫死價格,因此當實驗室調整費率時,你只需要編輯這個檔案,無需修改其他任何東西。驗證日期:2026-07-13。價格會變動。在預算規劃前請重新驗證。910## Anthropic (Messages API, /v1/messages)1112投入程度:output_config {"effort": "low|medium|high|xhigh|max"}。Fable 5 的自適應思考(adaptive thinking)始終開啟,且無法關閉。max_tokens 會限制思考**加上**回應文字,因此在高投入程度及以上時,請將其設定得較大(從 64k 附近開始),否則模型會在思考過程中耗盡空間。1314| 模型 | 每百萬 tokens 輸入/輸出價格 | 緩存讀取價格 | 角色 |15|---|---|---|---|16| claude-fable-5 | $10/$50 | $1.00 | 指揮者、規劃者、顧問、裁判。自動降級到 opus-4-8 |17| claude-opus-4-8 | $5/$25 | $0.50 | 根據保留規則的指揮者 |18| claude-sonnet-5 | $2/$10 (到 8 月 31 日,之後 $3/$15) | n/a | 預設編碼執行者 |19| claude-haiku-4-5 | $1/$5 | $0.10 | 偵察兵、子 Agent、機械性工作 |2021Fable、Opus 4.8、Sonnet 5 擁有 1M 背景,在長背景時段**定價固定**,這就是為什麼長篇閱讀會路由到這裡。最大輸出 128K。2223## OpenAI (Responses API, /v1/responses)2425| 模型 | 每百萬 tokens 輸入/輸出價格 | 快取價格 | 角色 |26|---|---|---|---|27| gpt-5.6-sol | $5/$30 | $0.50 | 跨供應商審查者、終端機工作 |28| gpt-5.6-terra | $2.50/$15 | $0.25 | Codex 日常驅動程式(先與 Luna 進行測試) |29| gpt-5.6-luna | $1/$6 | $0.10 | 機械性工作、安靜的滴答聲 |3031超過閾值的長背景,其輸入價格大約**會加倍**,這與 Anthropic 固定的 1M 定價層不同。第一個具有明確快取中斷點的模型系列;寫入成本為 1.25 倍。3233## 開放權重模型(大量工作者)3435| 模型 | 每百萬 tokens 輸入/輸出價格 | 快取命中價格 |36|---|---|---|37| deepseek-v4-flash | $0.14/$0.28 | $0.0028 (約 98% 折扣) |38| deepseek-v4-pro | $0.435/$0.87 | n/a |39| kimi-k2.7-code | $0.95/$4.00 | $0.19 |4041## 可疊加的折扣42 - 在兩個實驗室,快取讀取的成本約為新鮮輸入的十分之一(約 90% 折扣)43 - 快取寫入在一次讀取(5 分鐘)或兩次(1 小時)後即可回本44 - 批次 API 在兩個方向都有 50% 折扣45 - 在重複前綴上使用批次 + 快取讀取,可以接近 95% 的折扣46 - Anthropic 最新的 tokenizer 為相同的文字產生大約多 30% 的 tokens,因此實際成本會高於標示價格。預算應基於**實際成本**。4748## 如何回答成本問題49 1. 分別估算輸入和輸出。Agent 每寫 1 個 token,大約會讀取 100 個 token,因此輸入佔主導地位,而快取命中率決定了帳單金額。50 2. 對重複的前綴應用快取讀取率,而不是基礎費率。51 3. 將 Anthropic 的數字乘以約 1.3 以考慮 tokenizer 的影響。52 4. 給出一個範圍,說明假設條件,並指出你使用了此檔案的哪一行。53 5. 如果數字超過了儲存庫的每日上限,請在**運行任何操作之前**說明。5455永遠不要提供一個你沒有從這個檔案中讀取到的價格。未在此列出的模型不在配置清單中,添加一個模型屬於路由變更,需要通過大門。
七個會改變你建構方式的事實:
- 在兩個實驗室,快取輸入都有 90% 的折扣。 系統提示中的一個時間戳記就會在每次呼叫時燒掉這個折扣。要嘛使用穩定的前綴,要嘛使用僅追加的歷史記錄,始終如此。Agent 每寫 1 個 token,大約會讀取 100 個 token,因此這個折扣佔了你帳單的大部分。
- 快取寫入需要額外費用,但很快就能回本。 Anthropic 的 5 分鐘寫入收費 1.25 倍,並且在一次讀取後即可達到損益平衡。GPT-5.6 是 OpenAI 第一個具有明確快取中斷點和定價寫入的模型系列。要像系統程式設計師圍繞記憶體層次結構進行設計那樣,圍繞快取進行架構設計。
- 最新的 Anthropic tokenizer 為相同的文字產生大約多 30% 的 tokens。 實際價格高於標示價格。預算應基於實際成本。
- Fable 5 的安全拒絕(safety refusal)不是一個錯誤。 呼叫會成功,工作會按設計在不到 5% 的會話中落到 Opus 4.8 上。閱讀實際發生的事情,而不僅僅是退出碼,並在你需要之前配置好降級鏈。
- 不要預設使用中間層。 獨立測試發現,在成本效益曲線上,某些 Luna 或 Sol 設定總是優於 Terra。在你付費之前,先用自己的流量測試 Terra 與 Luna 的表現。
- 批次 API 可以讓任何可以等待過夜的工作成本減半, 而且這個折扣可以與快取疊加:批次工作中重複的前綴運行成本接近 95% 折扣。BUILD 7 中的過夜燃燒器就是為了利用這一點而存在的。
- 可用性是一種營運風險,而不是假設。 Fable 5 在 6 月損失了 19 天。這裡的每個模型參考都有一個降級選項:fable-5 降級到 opus,sol 降級到 terra,並且每次降級都會被記錄下來。
第二個計量表:一個座位不等於一個 API 金鑰
上面的每個數字都是以每百萬 tokens 的美元計價。如果你按次付費,這是正確的貨幣。
但如果你是在一個 200 美元的 Codex Pro 座位或 Claude Max 座位上運行,那它就是錯誤的貨幣。
在一個座位上,計量表是一個五小時的時段和一個週時段,兩者一起評估,一次請求會同時消耗兩個時段。
你可能在週時段上還有餘裕,但仍然會被鎖住四個小時,因為一條訊息就吃掉了短時段。
相同的規則。不同的貨幣。三個設定決定了單條訊息可以佔用多少時段:

快速模式(Fast mode)是昂貴的那個,因為它會乘以一個已經變大的數字。
GPT-5.6 每條訊息的運行時間遠比 5.5 長。這在大多數情況下是一個禮物。但它也使得消耗變得不可預測。
- Theo 報告說,他在 Sol 上燒掉了超過 20 萬美元的 tokens
- 他觀察到一條 5.6 訊息佔用了一個五小時時段的 15%
- 按照乘數計算,這等於單條訊息就佔用了時段的 40%
速度並非免費。它向你收取的費用,是你無論如何都會消耗的 tokens。在你信任它之前,請重新閱讀速度文檔中的乘數:它是按模型發布的,並且會變動。
Ultra 是一個更微妙的陷阱,因為介面把它歸類在投入程度等級所在的地方,但它並不是其中之一。
- Max 是深度。一個模型,一個問題,花更多時間在一條單一的推理鏈上。
- Ultra 是廣度。工作會分散給四個 Agent,然後再進行綜合。
- 不同的維度。Ultra 不是「比 max 更多」。
指向一個無法真正分割的任務時,ultra 會買來四個 Agent 重複進行同一項調查。
它在 Terminal-Bench 2.1 上大約值 3.1 分,從 88.8 到 91.9,但需要消耗一個車隊的算力。在子問題之間的邊界是真實的之前,請關閉它。
為什麼 Sol 和 Terra 都是正確的預設值
一份實地報告幾乎所有事情都使用 Sol。上面的配置清單使 Terra 成為 Codex 的日常驅動程式。兩者都是對的,而計量表就是原因。
- 費率表顯示 Sol 的輸出成本是 Terra 的兩倍
- 座位費則表示你已經付過錢了
- 因此唯一活躍的問題是,需要多少次轉彎才能達到「通過」狀態
- 一個較強的模型,在較低的投入程度下,通常需要的次數更少
費率不是成本。成本是費率乘以達到通過所需的次數,而第二項才是真正會變動的。
這就是 BUILD 4 的法則從另一個方向來的體現:在觸碰旋鈕之前,先升級座位。在一個 200 美元層級的座位上,這讀起來像是 Sol 在 high 投入程度,而 Sol 在 low 投入程度則低於它。在你相信任何一個之前,先進行測量。
現在就設定 Codex 的層級:
1# ~/.codex/config.toml2model = "gpt-5.6-terra" # 日常驅動程式3model_reasoning_effort = "medium"4# service_tier = "fast" # 請保持註解狀態。快速模式會以 2.5 倍積分計費5 # 請運行 /fast status 確認你尚未處於該模式67[profiles.fast] # 機械性工作。這**不是**「快速模式」:這個8model = "gpt-5.6-luna" # 設定檔使用的是較便宜的模型,而不是 2.5 倍9model_reasoning_effort = "low" # 的計量表。兩個不同的東西,用同一個詞。1011[profiles.deep] # 規劃、棘手的錯誤、審查12model = "gpt-5.6-sol"13model_reasoning_effort = "high"
檢查點 0:兩個 CLI 都通過身份驗證,並且你的測試指令在當前儲存庫上以退出碼 0 結束。
BUILD 1:憲法
這些模型遵循法則並圍繞提示進行最佳化,因此每一行都需要一個數字、一個「永不」,或者一個可以檢查它的指令。
建立 CLAUDE.md:
1# CLAUDE.md23## 永不(例外情況需要先詢問)4- 永遠不要在會話中途切換模型。路由僅在會話和子 Agent 的邊界發生。任務中途切換會燒掉緩存。5- 永遠不要審查你自己的 diff。審查必須來自一個全新的背景,或者來自不同的模型血統。Devin 的審查者之所以能每個 Agent PR 捕捉到 2 個錯誤,正是因為它與撰寫者沒有任何共享內容。6- 永遠不要為了讓測試通過而編輯、削弱或刪除測試。這會自動判定為失敗。7- 永遠不要根據自我評估報告完成。完成 = gate/verify.sh 通過。8- 永遠不要進行第四次顧問諮詢。三次未通過 = 封鎖,輪到人類處理。9- 永遠不要合併一個 eval_gate.py 判定為**封鎖**的路由或提示變更。10- 永遠不要在沒有設定兩個上限的情況下運行任何迴圈:MAX_ITERS 和 BUDGET_USD。11- 永遠不要假設一個前沿模型是可用的。降級選項:fable-5 -> opus,sol -> terra。每次降級都記錄到 progress.log。12- 永遠不要孵化一個你沒有被要求建立的子 Agent。子代會繼承父代的模型**和**投入程度,因此一個急切的車隊會繼承昂貴的座位。1314## 派遣(第一個匹配項獲勝)15| 編號 | 任務 | 座位 |16|---|---|---|17| 1 | 規劃 / 架構 / 遷移 | fable-5 規劃,sonnet 執行 |18| 2 | 提取 / 格式化 / 測試 / 文件 | haiku 或 luna |19| 3 | 背景超過 60k tokens | Anthropic 1M 固定價格層 |20| 4 | 審查由 Agent 撰寫的程式碼 | sol 透過 codex,原生 harness |21| 5 | 不明確 | 難度分數:0-1 使用便宜的,2 使用 sonnet,3+ 使用前沿模型 |22| 6 | 仍然不確定 | 先用便宜的跑一次,進行驗證,如果失敗則升級一次 |2324## 完成25- 每個任務在開始工作前都帶有一個機器可檢查的 done_when 條件。26- 一個全新背景的審查者只會判斷規格與 diff 之間的差異,不考慮其他任何東西。27- gate/verify.sh 擁有最終決定權。同一個項目上,製作者/檢查者出現兩次分歧 -> 停止,排入人類處理佇列。
在儲存庫根目錄建立 AGENTS.md,使用 Codex 的語言表達相同的法則。保持在大約 100 行,作為目錄,而不是百科全書:
1# AGENTS.md23## 指令4| 目的 | 指令 |5|---|---|6| 測試 | make test (此指令是「完成」的定義) |7| Lint 檢查 | make lint |89## 會話協議101. 首先閱讀 progress.log 和 TASKS.md。2. 選擇**一個**未勾選的任務。113. 實作,運行**完整的**測試套件,僅在全部通過時提交,提交訊息需有描述性。124. 勾選該任務,在 progress.log 中附加一行,然後停止。13測試定義了完成。永遠不要削弱、跳過或刪除一個測試。錯誤的測試 = 將任務標記為「封鎖」並說明原因。1415## 模型政策16預設:terra,中等投入程度。機械性工作:使用設定檔 fast (luna, low)。17規劃和棘手的錯誤:使用設定檔 deep (sol, high)。18先決定投入程度,再決定模型。設定檔在會話開始時選定,絕不在任務中途切換。19快速模式關閉(2.5 倍積分)。Ultra 關閉。兩者都不是投入程度等級。20只有當我要求時,才孵化子 Agent。子代會繼承本次會話的模型**和**推理等級,因此在 high 投入程度下一個急切的孵化,就等於整個車隊都在 high 投入程度。2122## 卡住23信號:相同的錯誤出現兩次;連續兩個步驟沒有進展;一個測試在兩個不同的修復嘗試後仍然存在。然後執行 /fable-advice。最多諮詢 3 次,之後標記為「封鎖」。2425## 審查26在任何合併之前,在一個**全新的**會話中執行 /review-hostile,或者使用來自 Claude 端的跨供應商通道。永遠不要合併你自己未經審查的工作。
有一條準則必須存在於兩端,否則,寬鬆習慣較多的那個控制框架,每次你切換工具時都會佔上風。
檢查點 1:對於每一行,問問自己模型是否能在 80% 的情況下遵守並宣稱成功。如果是,就用一個數字或一個「永不」來重寫它。wc -l CLAUDE.md 的結果應低於 60。
BUILD 2:大門
一個 bash 腳本必須在其它任何東西存在之前掌握最終決定權,因為之後的每個建構步驟都假設它存在。
為你的堆疊建立 gate/verify.sh:
1#!/usr/bin/env bash2set -e3npm run typecheck --if-present4npm test --if-present5npm run lint --if-present
建立 gate/eval_gate.py,作為未來每個路由或提示變更的安全帶。它會透過當前配置和提議的配置,運行 50 到 500 個保留的測試案例,並且只使用確定性的檢查:
1for case in cases: # {prompt, must_include, must_not_include, max_words}2 hits += passes(case, run_config(case.prompt))3verdict = "SHIP" if new_score >= old_score - 0.02 else "BLOCKED"
然後,將大門製作成一個不可跳過的技能,.claude/skills/ship-gate/SKILL.md:
1---2name: ship-gate3description: 在進行任何路由、模型或提示詞變更前,執行評估門控。當使用者要求更改路由規則、切換模型層級、編輯系統提示詞、調整努力程度,或合併任何涉及路由器、提示詞或模型設定的內容時使用。4---56# 發布門控78任何對路由或提示詞的變更,都是一場品質賭注,直到門控說可以為止。這個技能的存在,就是為了確保這個賭注不會在無聲無息中發布。910 1. 找到 eval/cases.jsonl 檔案。如果不存在,請停止並告訴使用者需要先從真實流量中建立 50 到 500 個具有代表性的案例。請勿自行編造案例。11 2. 執行:python3 eval_gate.py eval/cases.jsonl,比較目前設定與提議設定。12 3. 封鎖:回報兩個分數,列出哪些案例退步了,不要套用變更,並建議能通過門控的最小回退方案。13 4. 發布:套用變更,並在 progress.log 中附加一行,記錄兩個分數。1415硬性規則:16 - 即使被客氣地要求,也絕不能推翻「封鎖」的判定。將失敗案例一併提交給真人處理。17 - 絕不能在與路由變更相同的對話中編輯案例檔案。門控與變更不能由同一位作者進行。18 - 成本數字不能作為品質下降的藉口。門控的判定為最終決定。
門控僅使用確定性檢查,因為它絕不能繼承「誰來驗證驗證者」的問題。未經評估門控的路由變更,就是在對你的客戶進行一場成本實驗。
檢查 2:./gate/verify.sh 今天必須正常退出(exit 0),且 eval_gate.py 在其示範中必須輸出「SHIP」。如果 verify.sh 現在失敗,請先修復它再做其他事。這個系統就建立在這個腳本之上。
建構 3:核心循環
模型提供智慧。循環帶來紀律。
- 每次迭代使用全新上下文,防止上下文腐化
- 儲存庫承載所有記憶
- 兩個上限將失控的 Agent 變成一個十美元的教訓
這正是 Anthropic 16 次循環運行的確切模式,該運行以約 20,000 美元的成本構建了一個 100,000 行程式碼的 C 編譯器,且全程無需編排器模型。
建立 loop/PROMPT.md:
1閱讀 progress.log 和 TASKS.md。僅挑選一個尚未完成的任務。2實作它。執行測試。如果測試通過:用描述性的訊息提交,3將該任務標記為完成,在 progress.log 中附加一行,並停止。4如果同一個任務失敗兩次,則將其標記為「封鎖」並附上錯誤訊息,然後停止。5僅在所有任務都標記為完成且整套測試套件通過時,才建立名為 DONE 的檔案。6絕不能為了讓測試通過而編輯它。
建立 loop/ralph.sh:
1#!/usr/bin/env bash2set -u3MAX_ITERS="${MAX_ITERS:-25}" # 上限一:迭代次數4BUDGET_USD="${BUDGET_USD:-10}" # 上限二:美元金額5MAX_FAILS=3; fails=0; spent=0; i=067while [ ! -f DONE ] && [ "$i" -lt "$MAX_ITERS" ]; do8 i=$((i + 1))9 # 每次迭代都是全新對話:除了儲存庫本身,沒有其他記憶10 claude -p "$(cat PROMPT.md)" --max-turns 30 \11 --output-format json > out.json 2> err.log \12 && fails=0 || fails=$((fails + 1))13 [ "$fails" -ge "$MAX_FAILS" ] && exit 2 # 斷路器14 cost=$(jq -r '.total_cost_usd // 0' out.json)15 spent=$(awk -v a="$spent" -v b="$cost" 'BEGIN{printf "%.4f", a+b}')16 awk -v s="$spent" -v c="$BUDGET_USD" 'BEGIN{exit !(s>c)}' && exit 3 # 上限17 sleep 218done19[ -f DONE ] && echo "在 $i 次迭代中完成,花費 \$$spent" || echo "達到上限,花費 \$$spent"
將 claude 那行替換為 codex exec,同樣的循環就能驅動 GPT-5.6。
退出碼的設計是刻意的:0 表示完成或正常,2 表示斷路器觸發,3 表示超出預算。 建構 12 中的所有警報都基於這些退出碼。
成本那行會讀取對話本身的 JSON 成本報告,因此上限是由框架根據實際花費來執行,而非預估值。
數數那個提示詞中有多少個停止點。每個分支都以一個停止點結束,這是設計使然,而非偶然。
這一代模型每次訊息運行時間比上一代長得多。這大部分是好事,但有時會導致帳單增加,因為一個不再需要被鼓勵就會繼續下去的模型,可能會將任務帶到你想讓它停下來的地方之後的四個步驟。
這個循環從結構上解決了這個問題:每次迭代只處理一個任務,並在結束時強制停止。
在互動模式下,你必須明確說出來。兩個提示詞就能完成工作:
- "寫下計畫,然後停下來,在你開始建構之前先給我看"
- 一旦計畫確定:"建構它、測試它、發起 Pull Request、處理第一輪審查意見,然後停下來"
一個會長時間運行的模型,只有在沒人告訴它邊界在哪裡時才是危險的。
長時間的任務會像上下文一樣失敗,所以迭代要保持簡短,讓環境來負責記憶。寓言 5 和 Codex 模型現在可以在運行中壓縮自己的上下文,所以請抵制添加複雜記憶管線的誘惑;正確的記憶量每季度都在減少。
檢查 3:在 TASKS.md 中有兩個很小的真實任務,在 BUDGET_USD=2 的情況下手動運行一次迭代。確認產生了一次提交、一個被標記為完成的任務、一行日誌記錄,並且循環會在開始第二個任務之前退出。
建構 4:值得存在路由器(先模型,後努力)
2026 年最嚴謹的路由基準測試 LLMRouterBench 發現,許多路由器(包括商業路由器)都無法可靠地勝過直接選擇最佳單一模型。因此,在你自己的流量上證明路由器有用之前,它都是有罪的。
在編寫任何程式碼之前,先決定規則。僅在以下兩個條件都成立時,才添加路由器:
- 在你的流量上,廉價層級與前沿層級之間存在大約五倍的每美元能力差距
- 建構 2 中的評估集已經存在,可以用來監督它
如果在那些評估中,一個精心挑選的模型就能擊敗你的路由器,那就刪除路由器,並保有簡單性。
一旦它通過了門檻,router/router.py 會運行三層,並從最便宜的決策開始。請注意,這些層級命名的是座位,而非價格:費率在運行時來自技能基準,因此價格變更永遠不會影響你的路由器。
1TIERS = { # 座位,不是數字2 "cheap": "gpt-5.6-luna", # 或 claude-haiku-4-53 "mid": "claude-sonnet-5",4 "frontier": "claude-fable-5", # 或 gpt-5.6-sol5}6PRICES = load_bench(".claude/skills/model-bench/SKILL.md") # 單一事實來源78RULES = [9 (kind in {"extract", "format", "summarize"}, "cheap"),10 (kind in {"plan", "architect", "migrate"}, "frontier"),11 (context_length > 60_000, "mid"),12]13tier = layer1_rules(task) or layer2_classifier(task)14if tier: return call(TIERS[tier], task)15return cascade(task) # 先嘗試廉價,驗證,失敗時僅升級一次
中間層根據你可以讀取的標記來評估難度:為什麼、除錯、競爭條件、死結、重構、安全性,加上提示詞中的程式碼、先前失敗的嘗試,以及觸及多個子系統。
零分或一分使用廉價層級。兩分使用中等層級。三分或以上使用前沿層級。串聯的驗證器是確定性的,並且僅升級一次。
將相同的決策邏輯接入框架,使其在未經調用時也能觸發,.claude/skills/model-router/SKILL.md。請注意,該技能不會重述規則,而是讀取規則,這與基準用於價格的單一事實來源技巧相同:
1---2name: model-router3description: 在開始工作之前,將每個任務路由到正確的座位和努力程度。4 在對話開始時、在產生子 Agent 之前、當使用者詢問要使用哪個模型時,5 或當任務混合了規劃與執行時使用。6---78# 模型路由器910閱讀 ROUTING.md 並套用其規則。請勿自行擬定策略,也請勿在此處重述:11這個檔案會腐化,而策略檔案才是受評估門控管轄的那個。1213除了該檔案之外,這個技能還強制執行三件事:1415 1. 僅在邊界處進行路由。對話開始時和子 Agent 產生時。在任務中途切換16 會使快取失效,並以快取費率的十倍重新計費整個上下文。17 2. 在對話結束時,將廉價層級的佔比附加到 progress.log。只有當大部分18 流量都使用廉價層級時,節省的效果才會開始累積,所以這個數字是值得關注的。19 3. 對 ROUTING.md 的任何變更都必須通過發布門控技能。沒有例外。
決策順序反映了成本:首先是一個免費的檢查,其次是一個評分的猜測,最後是一個付費的實驗。
關鍵在於流量分配,而不是路由器的聰明程度。
- 將 70% 的工作發送給價格只有十分之一的層級,帳單大約會減少三分之二
- 生產報告顯示節省的比例集中在 40% 到 85% 之間,而這個差異幾乎完全來自流量分配
- 只有當大部分流量都使用廉價層級時,節省的效果才會開始累積
這就是為什麼 progress.log 中的廉價層級佔比是這個系統唯一讓你關注的數字。
努力程度是第二個旋鈕
努力程度是向下一個層級的路由:相同的技能,但應用於模型思考的時間長度,而非運行哪個模型。
每個工具都將這個旋鈕藏在不同的預設值下。Claude Code 中預設為高。Codex 中預設為中等。在大多數應用程式中則是隱藏的。因此,人們會為所有事情使用一個設定,結果不是付費過高,就是思考不足。

預設為高,並將最高視為最後手段,而非炫耀。
- Anthropic 自己的努力程度文件將最佳點設定為高,並警告說最高會導致過度思考
- 一份針對 26 個編碼任務的公開基準測試發現,高努力程度大約能將低努力程度的品質提升三倍
- 同一份基準測試發現,xhigh 的成本是高的兩倍以上,但收益卻很少能回本
模型本身至少和旋鈕一樣重要。在較低努力程度下運行的 Fable 5,通常比在 xhigh 下運行的舊模型表現更好,所以優先選擇更好的模型,而不是更高的設定。
有兩個設定常被誤認為是這個階梯上更高的梯級。但它們都不屬於這個階梯。
- 最高是深度。 一個模型,一個問題,更多時間。
- Ultra 是廣度。 一個任務被擴展到四個並行 Agent,然後再綜合起來。
不同的軸線。Ultra 不是「比最高更多」,將它用於一個實際上無法真正拆分的任務,只會買來四個 Agent 重複進行同一項調查。
這個階梯不能跨版本移植。 同一個詞,在新模型上購買的思考量與舊模型上的不同。
將一個熟悉的任務移動到新的座位時,從你信任的設定往下調一級開始。只有當輸出需要時,再往上調。
有一個陷阱特別針對群體。
子 Agent 會繼承父 Agent 的模型和父 Agent 的努力程度。 一個由最高努力程度指揮官產生的隊伍,就是一個最高努力程度的隊伍,它會在單一訊息中耗盡一個視窗。
在它們自己的 frontmatter 中固定它們,並且在這樣做時要知道你處於哪個框架中,因為這個固定只在讀取它的產生器有效時才有效。
- Claude 端。 下面的 frontmatter 就是控制項。
- Codex 端。 5.6 會以父 Agent 自己的模型和推理層級產生子 Agent,並且它會急切地產生。父 Agent 的旋鈕就是整個隊伍的旋鈕。
在 Codex 端,唯一真正的控制項是你開啟對話時使用的設定,以及 AGENTS.md 中一行說「除非被要求,否則不要產生」的文字。在信任任何一個之前,先確認你使用的是哪一個:
1name: scout2model: haiku3effort: low # 子 Agent 繼承父 Agent。一個最高努力程度的隊伍4 # 會在一次訊息中耗盡一個視窗。固定它們。
為每個工具設定它:在 Claude Code 和 Codex TUI 中使用 /effort,像 codex -e high 這樣的標誌,config 中的一行,或 API 上的 effort 欄位。
模型路由決定誰來思考。努力程度路由決定思考多久,而第二個旋鈕的轉動成本更低,因為設定中的其他部分都沒有改變,而且快取保持溫暖。在循環分支的地方投入努力。在其他所有地方,它都是一種稅。
每週追蹤一個數字:
1grep '^route' progress.log | awk -F'\t' \2 '{r++; if($3!="frontier")c++} END{printf "cheap share: %.0f%%\n", c/r*100}'
ROUTING.md,兩個框架都讀取的策略
以上所有內容都濃縮在儲存庫根目錄的一個檔案中。
1# ROUTING.md23路由是四個決策,而順序是關鍵:4 1. 在哪裡:哪個框架執行工作5 2. 何時:在什麼邊界做出決策6 3. 誰:哪個模型佔據座位7 4. 多努力:該模型以何種努力程度運行8大多數團隊只爭論第 3 點。關鍵在於第 2 點和第 4 點。910## 1. 在哪裡:先框架,後模型11在一個框架內進行後訓練的模型,在任何其他地方都會出現分布外問題。12測量到的差異:原生環境 20.2% 對比外來環境 7.7%,相同權重。1314| 工作 | 框架 | 原因 |15|---|---|---|16| 撰寫程式碼 | 模型的原生框架 | 編寫能力在分布外會下降 |17| 審查程式碼 | 審查者的原生框架 | 弱的審查比沒有審查更糟 |18| 閱讀、偵察 | 任何地方 | 閱讀成本低且可驗證 |19| 機械性轉換 | 任何地方 | 如果檢查是確定性的,框架幾乎無關緊要 |2021法則:自由重新映射閱讀者和審查者通道。編寫者通道必須保持在框架原生環境,直到你自己的評估集另有明示。該覆蓋必須基於測量,而非偏好。2223## 2. 何時:在邊界處路由,絕不在邊界內部24在對話中途切換會丟棄提示詞快取。快取輸入的成本是全新輸入的十分之一,因此不必要的切換會以十倍價格重新計費整個上下文,且毫無益處。2526合法的邊界,唯一可以進行路由決策的地方:27 - 對話開始時28 - 子 Agent 產生時29 - 群體中的新目標30 - 將審查交接給另一個系列31 - 由故障或安全機制觸發的後備方案32其他所有地方都是非法的。沒有每次輪次的路由。沒有任務中途的自適應切換。33串聯僅獲得一次升級,並且它會開啟一個新的邊界。3435法則:在邊界開啟時選擇座位,然後在下一個邊界到來之前保持不變。3637## 3. 誰:決策程序(先匹配者勝出,記錄結果)3839第 1 層,規則。免費。總是先檢查。4041| 訊號 | 座位 |42|---|---|43| 提取 / 格式化 / 摘要 / 分類 / 測試 | Haiku 或 Luna,努力程度低 |44| 規劃 / 架構設計 / 遷移 / 根因分析 | Fable 規劃,Sonnet 執行 |45| 上下文超過 60k tokens | Anthropic 1M 層級(固定價格) |46| 審查 Agent 撰寫的程式碼 | 另一個系列,原生框架 |47| 目標可拆分為獨立部分 | 群體:Fable 撰寫和評分 |4849第 2 層,分數。每個一分:50 - 包含「為什麼 / 除錯 / 競爭條件 / 死結 / 重構 / 安全性 / 最佳化」51 - 觸及多個子系統52 - 先前嘗試已失敗53 - 變更是不可逆的或面向使用者的54 0-1 -> 廉價層級,低努力程度。2 -> Sonnet,中等努力程度。3+ -> 前沿層級,高努力程度。5556第 3 層,串聯。廉價運行,確定性驗證,僅升級一次。絕不兩次。57第二次失敗是規格問題,更大的模型無法修復你的規格。5859座位和後備方案位於 .claude/skills/model-bench/SKILL.md。此處沒有價格。6061## 4. 多努力:努力程度路由62努力程度是向下一個層級的路由。這個檔案中最便宜的旋鈕:其他任何東西都不變,而且快取保持溫暖。6364| 努力程度 | 使用時機 |65|---|---|66| 低 | 打字錯誤、重新命名、排序、提取、所有子 Agent 預設 |67| 中等 | 根據明確規格的常規程式碼、摘要、標準寫作 |68| 高 | 分解、遷移、棘手的錯誤、所有指揮官工作(預設) |69| 最高 | 僅用於高努力程度已經無法解決的問題 |70| ultra | 不屬於此階梯。廣度,非深度:4 個並行 Agent。預設關閉 |7172 1. 預設為高。最佳點就在那裡;最高會導致過度思考。73 2. 更好的模型勝過更高的旋鈕。在提高設定之前,先升級座位。74 3. 子 Agent 繼承父 Agent 的模型和努力程度。一個由最高努力程度指揮官產生75 的隊伍會以最高努力程度運行,並在一次訊息中耗盡一個視窗。在每個76 子 Agent 自己的 frontmatter 中固定它們:effort: low。如果產生器77 忽略這個固定,那麼父 Agent 的旋鈕就是整個隊伍的旋鈕。檢查你擁有哪一種。78 4. 最高是深度。Ultra 是廣度。僅在子問題真正獨立時使用 Ultra,79 絕不作為預設,且在框架過度產生時根本不使用。80 5. 這個階梯不能跨版本移植。在新模型上,從你信任的舊模型設定往下調一級開始。81 6. 快速模式也不是一種努力程度。它用 2.5 倍的信用點數換取你無論如何82 都會消耗的 token 的延遲。預設關閉。8384這個旋鈕存在於四個地方:在 Claude Code 和 Codex TUI 中使用 /effort,codex -e high,85config 中的 model_reasoning_effort,API 上的 effort 欄位。Claude Code 預設為高,86Codex 預設為中等,大多數應用程式完全隱藏它,這就是為什麼團隊會不小心為所有事情使用一個設定。8788## 5. 後備方案:假設前沿層級已故障89前沿層級的可用性無法保證,且安全機制可以在運行中將呼叫重新路由到 Opus 4.8,90在不到 5% 的對話中發生,且不會出錯。91 - 每個座位都有一個命名的後備方案。沒有例外。92 - 每個後備方案都會被記錄。無聲的重新路由是一個錯誤,因為你可能正在93 閱讀來自你未選擇的模型的輸出。94 - 絕不要在你未選擇的模型的輸出上進行迭代。9596## 6. 決定這一切是否有效的數字97混合成本就是你的流量分配,沒有其他因素。70% 使用廉價層級會使帳單減少約三分之二。9810% 只能節省零錢。路由器的準確性遠比路由器的聰明程度重要。99100使用建構 4 中的一行指令來追蹤它。低於 50%,節省的效果還沒有開始累積。101在觸及此處任何其他內容之前,先修復分配。102103## 7. 針對此檔案的門控104法則:對此檔案的任何變更,未經 eval_gate.py 在 50 到 500 個保留案例上通過,105不得發布。封鎖的判定是最終決定,不能在對話中覆蓋。門控與變更不能由同一位作者進行。106107## 8. 何時刪除此檔案108如果一個精心挑選的單一模型在你的評估中擊敗了這整個堆疊,那就刪除路由器,109並保有簡單性。2026 年最嚴謹的路由基準測試發現,許多路由器(包括商業路由器)110都無法可靠地勝過直接選擇最佳單一模型。111先測量。再路由。樂於刪除。
檢查 4:router.py 可離線運行,並列印出一個決策、一個原因和分配比例。你的筆記中應包含 5 倍差距的測量結果,或一個標明日期的說明,指出路由器尚未被證明是合理的。
建構 5:顧問反轉
經典模式是讓聰明模型負責,並將前沿層級的 token 浪費在大量執行上。反轉它。
Anthropic 的顧問結果:配備 Opus 級別顧問的 Haiku,在一個困難的瀏覽基準測試中,其分數從單獨的 19.7 提高到 41.2,超過了兩倍,且每個任務的成本比中等層級低 85%。
執行是大量批發。建議是少量精華。
框架決定驅動器何時卡住,而不是驅動器自己決定,.claude/skills/stuck-protocol/SKILL.md:
1---2name: stuck-protocol3description: 當進度停滯時,升級到 fable-expert 顧問。當相同錯誤出現兩次時、4 當連續兩個步驟在錯誤持續存在的情況下未更改任何檔案時、當一個測試在兩次5 不同的修復嘗試後仍然失敗時,或當使用者說 Agent 在原地打轉時使用。6---78# 卡住協議(顧問反轉)910你是廉價驅動器,這是一個功能:執行是大量批發,建議是少量精華。11但小型模型過於自信,因此你不能自己決定是否沒問題。改為檢查確定性訊號。1213卡住訊號(任何一個觸發協議):14 1. 連續兩個步驟出現相同的錯誤字串。15 2. 連續兩個步驟在錯誤持續存在的情況下更改了零個檔案。16 3. 在兩次真正不同的修復嘗試後,同一個測試仍然失敗。1718程序:19 1. 計算本次對話的諮詢次數。達到 3 次時,停止:將任務標記為「封鎖」並附上錯誤,20 為使用者總結,然後繼續。絕不進行第四次諮詢。21 2. 建立簡報,其中不能包含任何其他內容:22 目標:一行23 嘗試 x2:最近兩次嘗試,各 200 個字元24 錯誤:確切的錯誤訊息,300 個字元25 3. 使用簡報產生 fable-expert。它會回傳指導,而非程式碼。26 4. 在下一步中立即套用指導,在你自己的任何操作之前。27 5. 在 progress.log 中附加一行:諮詢 #N,它說了什麼,是否有效。2829硬性規則:30 - 絕不要求專家執行工作。如果回覆包含完整的實作,請接受其想法並丟棄程式碼。31 - 絕不將你的推理歷程填充到簡報中。專家的價值在於乾淨的上下文;冗長的簡報會32 毒害它。33 - 如果指導失敗,這將計入你下一次諮詢的兩次嘗試之一。三次失敗的諮詢意味著34 該任務超出了本次對話的薪酬等級,而這樣說就是正確的輸出。
專家座位,.claude/agents/fable-expert.md:
1---2name: fable-expert3description: 用於卡住時刻的前沿顧問。接收來自 stuck-protocol 的簡潔簡報,4 回傳 600 tokens 以下的指導,自身從不執行工作。5model: claude-fable-5 # 如果保留規則有問題,請換成 opus6effort: high7tools: Read, Grep, Glob # 可以閱讀,但絕不能編輯8---910你是專家顧問,不是承包商。一個較便宜的模型正在驅動,並且遇到了瓶頸。11你的價值在於少量的判斷和乾淨的上下文:你對驅動器如何到達這裡一無所知,12這正是你的解讀更敏銳的原因。1314你收到一份簡報:目標,最近兩次嘗試,以及錯誤。如果簡報中提到了特定檔案,15你可以閱讀它們。你不能編輯任何東西。1617 1. 如果簡報缺少你需要的資訊,請用一行回覆說明缺少什麼。不要猜測缺失的部分。18 2. 先診斷,再開處方:用一兩句話說明實際問題出在哪裡。19 3. 然後以以下格式回覆,之後不要有任何內容:20 指導:21 1. (最可能的修復方法:嘗試什麼,以及為什麼應該有效)22 2. (如果 1 失敗的備用方案)23 3. (僅當存在真正不同的第三條路徑時)24 信心水準:高 | 中 | 低25 4. 少於 600 tokens。沒有超過 10 行的程式碼區塊。提供想法,而非實作。26 如果你的回覆包含完整的解決方案,你就沒有扮演好這個角色。27 5. 如果任務本身構想有誤,請在第 1 項中說明,並建議告訴使用者什麼。2829操作者備註:如果你的組織無法接受 Mythos 級別的保留,請將模型行更改為 opus。30該角色的工作方式相同;顧問結果最初是使用 Opus 級別顧問證明的。
以及為 Codex 對話反向設定的相同通道,~/.codex/prompts/fable-advice.md:
1claude --model claude-fable-5 -p "你是一位專家顧問。2 一個較便宜的模型正在驅動,並且卡住了。簡報:<目標,兩次3 嘗試,錯誤>。回覆指導:最多 3 個編號項目,4 少於 600 tokens。不要執行工作。"
小型模型過於自信,因此框架會觀察行為,而不是詢問。
簡報保持簡短,因為專家的價值在於乾淨的上下文,而冗長的簡報會毒害它。
每次諮詢只需運行幾百個 token 的指導。 這就是經濟學崩潰的原因:執行數百萬 token 使用 1 美元層級,而判斷則以少量精華的形式,以每百萬 token 50 美元的價格送達。
Cognition 首先發布了這個失敗案例。天花板是由驅動器設定的,而非顧問,並且這個模式只有在他們的驅動器改進一代之後才開始獲得回報。
一個未解決的問題是驅動器如何注意到自己卡住了。這就是為什麼上述訊號是行為性的,以及為什麼它們存在於框架中。
檢查 5:advisor_loop.py 通過其斷言:驅動器以相同方式失敗兩次,一次諮詢觸發,任務完成,諮詢次數保持在上限以下。
建構 6:雙線道基準
沒有人能給自己的作業打分數是一條法則,而這個建構在跨供應商之間強制執行它。
相同權重在外來框架中會大幅下降。 2026 年的一項測量顯示,原生環境為 20.2%,而第三方環境為 7.7%。
因此,每個審查者都在自己的家中運行。Claude 在 Claude Code 中審查。Sol 透過 Codex CLI 審查。
內部評審員,.claude/agents/fresh-eyes-reviewer.md:
1---2name: fresh-eyes-reviewer3description: 程式碼審查者,每次 Agent 改動後執行。不繼承撰寫者的任何歷史記錄,直接讀取 diff,可以編輯嗎?不可以。4model: haiku # 若 diff 重要性高,可換成 opus5effort: medium6tools: Read, Grep, Glob, Bash7---89你對這個改動如何被寫出來毫無記憶,而這正是重點。不要詢問作者的推理過程。不要相信任何摘要。只看證據。1011 1. 執行 git diff HEAD~1(或指定的範圍),並讀取每個 hunk。12 2. 讀取每個受影響檔案的**完整內容**,而不僅僅是 hunks。錯誤常常藏在改動周圍未變動的行中。13 3. 執行 README 或 CLAUDE.md 中指定的測試套件。14 4. 尋找三種經典的 Agent 失敗模式:15 - 懶惰:部分實作、TODO、僅處理單一情況16 - 自我評分:測試被弱化、assertion 被刪除、測試套件被跳過17 - 偏離:超出所聲明任務範圍的變更18 5. 判決,格式必須完全如下:19 VERDICT: PASS 或 FAIL20 BUGS: 編號清單,每個包含 file:line 和一句理由21 RISK: 一句話說明此變更觸及的最危險部分2223嚴格規則:你不得編輯檔案,不得重新執行撰寫者的任務,且空的 BUGS 清單搭配 VERDICT: FAIL 是無效的。如果測試無法執行,則自動判定為 FAIL 並附上理由。
跨供應商的裁判 .claude/agents/sol-reviewer.md 是一個管道,執行一條命令並逐字傳遞判決。Sol 是審查者;這個檔案將其納入自己的架構:
1---2name: sol-reviewer3description: 跨供應商審查者。將最新提交透過 Codex CLI 發送給 GPT-5.6 Sol,使用 Sol 的原生架構,並逐字傳遞判決。4model: haiku # 僅是管道。Sol 才是審查者。5effort: low6tools: Bash, Read7---89你是管道,不是審查者。同一個模型家族的模型共享盲點;這個通道之所以存在,是因為 Sol 沒有 Claude 的盲點。1011 1. 檢查 CLI:codex --version。如果缺失,輸出 VERDICT: FAIL 並附上理由 "codex CLI 未安裝",以及設定路徑(或官方外掛:/plugin marketplace add openai/codex-plugin-cc, /plugin install, /codex:review)。12 2. 以高強度在 Sol 自己的架構中執行審查:1314 codex --profile deep exec "Review the latest commit (git show HEAD) as a15 hostile senior engineer who has never met the author. Read every touched16 file IN FULL, not just the hunks. Hunt: partial implementations, weakened17 or deleted tests, changes outside the stated task scope. End with exactly18 'VERDICT: PASS' or 'VERDICT: FAIL' followed by numbered findings, each with19 file:line and a one-sentence reason."2021 3. 將完整輸出儲存到 .review_sol_<short-hash>.md。22 4. 向上傳遞:先輸出 VERDICT 行,然後逐字輸出發現。不要摘要發現,不要添加安慰,不要與 Sol 爭論。如果判決是 FAIL,由上層決定修復什麼。你什麼都不決定。2324嚴格規則:永遠不要編輯檔案,永遠不要重新執行撰寫者的任務,永遠不要用自己的審查取代。如果 codex 在執行過程中出錯,將其報告為 FAIL 並附上 stderr,而不是悄悄重試超過一次。
對於 CI,loop/two_lane.sh 驅動整個交換,最多三輪:
1claude -p "Implement: $TASK. Run the tests. Commit when green."2review=$(codex exec "Review HEAD ... VERDICT: PASS or FAIL plus findings.")3grep -q "VERDICT: PASS" <<< "$review" && exit 04claude -p "A reviewer from another model family found these issues.5 Fix every one, rerun tests, commit: $review"
在 Claude Code 中,你可以完全跳過這個腳本。
OpenAI 為 Claude Code 發布了一個官方 Codex 外掛,自 2026 年 3 月起上線,並在九週內獲得約兩萬個 GitHub 星號。這表明市場已經接受跨供應商審查成為主流。 安裝一次即可:
1/plugin marketplace add openai/codex-plugin-cc2/plugin install codex@openai-codex3/codex:setup
在任何 Claude 會話中執行三個指令:
- /codex:review 用於標準審查
- adversarial 模式,會故意攻擊你的設計決策
- background handoff 交給 Codex
在關鍵部分使用 adversarial 模式。當工作涉及大量終端操作時使用 handoff,因為那是 Sol 最強的地方。
現在越來越多的開發者透過 BUILD 7 的代理,在 Claude Code 中執行 GPT-5.6 Sol,並且在日常工作中更偏好它而非 Codex。
這驗證了一個論點:租用權重,擁有架構。
問題在於原生架構法則,因為 Sol 在 Claude Code 中是在其主場之外運行的。請在你自己的評估集上確認。如果你的評估顯示外來架構更好,那麼你的評估優於基準。
三個特性讓這個審查者值得擁有:
- 乾淨的上下文。 它到來時沒有撰寫者的任何歷史。
- 不同的血統。 它不共享撰寫者的盲點。
- 原生架構。 它以全強度進行判斷。
一個弱化的判決就是一個壞掉的驗證器,所以傳遞是逐字的。第三次 FAIL 會通知人類,而不是進行第四次嘗試。
CHECK 6:執行 two_lane.sh,或對你最後一次提交執行 /codex:review。判決會出現在 .review 檔案中,FAIL 會路由回撰寫者通道。
BUILD 7:可選的扇出(條件出現時安裝)
偵察兵群。當研究或程式碼考古每天消耗超過 30 分鐘時安裝。在單獨的切片上平行生成三個:
1---2name: scout3description: 用於研究扇出的廉價平行讀取器。可同時生成多個,用於程式碼庫調查、依賴審計、日誌考古、文件研究。原則上唯讀;讀取扇出,寫入保持單執行緒。4model: haiku5effort: low # 繼承保護(BUILD 4):一個繼承最大 effort 的群體會在一條訊息中清空視窗6tools: Read, Grep, Glob, Bash7---89你可能是多個平行運行的讀取器之一。調查你的切片,然後回報簡潔而精準。只有你的最後一條訊息會返回給父進程,所以請控制在 400 字以內,並讓每個字都有其價值。1011 1. 自己將任務縮小到一個切片(一個目錄、一個子系統、一個問題),並說明你縮小到了什麼。12 2. 僅讀取:Read, Grep, Glob 和唯讀 shell(ls, git log, git show, rg)。永遠不要編輯、安裝或刪除。如果任務需要寫入,報告它,不要執行它。13 3. 先廣度,然後在兩三個最熱點上深入。1415報告格式,僅此而已:16 FINDINGS:最多 10 個要點,每個要點包含一個事實及其證據(file:line、commit hash 或 URL)17 GAPS:你無法確定的內容及原因,以便父進程知道哪些區域仍然未知18 HOTSPOT:最值得深入查看的單一檔案或函式,以及一句原因1920不要發表評論,不要提議實作,不要填充。一個回傳 300 個有用詞彙的偵察兵勝過一個回傳 3,000 個混雜詞彙的,因為你發出的所有內容都會進入父進程的上下文視窗,而父進程正在為此付費。
讀取扇出是因為平行讀取器會疊加效果。字數限制的存在是因為每份報告都會進入父進程付費的上下文視窗。
寫入永遠不會扇出。 2026 年的一項預算對等研究發現,在 token 數量固定的情況下,單一 Agent 在推理能力上與多 Agent 設定相當。這個通道僅用於讀取。
夜間批次處理器。當 TASKS.md 包含十個或更多小型可驗證項目時安裝。夜間批次處理器技能會設定好檔案,確認兩個上限,驗證測試命令可以執行,然後啟動 ralph.sh。早晨介面:git log、progress.log、勾選標記。
計畫分割。當計畫 token 佔據會話帳單的大部分時安裝。Claude Code 中的一個設定使用 Opus 級別的模型進行計畫,使用 Sonnet 進行執行。按 gram 購買前沿計畫,批量執行。
三人評審台。當一個棘手的變更需要三個視角時安裝。兩個角色讀取,一個角色寫入,第四個窗格是陷阱。管道位於下方。
混合車隊的管道
兩個開源組件將雙供應商設定轉變為任意供應商設定。僅在條件要求第三方供應商時安裝。
claude-model-switch(開源,Rust 語言,運行於 localhost:4000)。一個位於 Claude Code 與任何 Anthropic 或 OpenAI 相容端點之間的本地代理。
- 將 Claude Code 的三個內部層級(haiku、sonnet、opus)重新映射到你的供應商提供的任何模型
- 無需重啟即可通過配置重新載入切換供應商
- 作為 Claude Code 外掛提供,帶有斜杠命令
1claude-model-switch init # 將 Claude Code 指向代理2claude-model-switch add openrouter sk-or-xxx3claude-model-switch add glm \4 --haiku glm-4.5-air --sonnet glm-4.7 --opus glm-55claude-model-switch use glm # 每次會話,任務中不可切換6claude-model-switch orchestrate start --preset trio # 規劃者/編碼者/審查者
trio 預設配置是 BUILD 7 的評審台物理化:三個 tmux 窗格,每個角色使用不同的供應商,每個都可定址(orchestrate send coder "implement milestone 1"),並可在會話中重新分配角色(如果某個供應商性能下降)。
CLIProxyAPI(開源)。同樣的技巧,方向相反。
它將 ChatGPT Codex、Claude Code、Gemini 和 Grok 的 OAuth 登入包裝成 OpenAI、Claude 和 Gemini 相容的 API 端點。
翻譯:你已經付費的訂閱席位變成了可路由的 API 目標,供 ralph.sh 和 two_lane.sh 等腳本使用,無需額外的 API 金鑰。社群分支將其擴展到 Factory 和 Amp,像 ccs 這樣的包裝器增加了多帳戶切換。
兩者都遵循的法則,來自 BUILD 6 的數據:重新映射的模型在外部架構中運行。
自由地重新映射讀取器和審查器通道。它們廉價且可驗證。
將編寫程式碼的通道保留在其架構的原生模型上,直到你自己的評估集證明相反。
CHECK 7:每個已安裝的扇出都應在其旁邊寫有觸發條件。投機性地安裝任何這些東西是堆疊膨脹的原因。
BUILD 8:工廠(完成變為資料庫事實)
到目前為止,所有內容都證明了即時工作。閘門、判決和評估集都在運行期間觸發。
一旦多個 Agent 在多個會話中觸及一個專案,你就需要能夠在運行之後存活的證據:誰做了什麼工作,以什麼順序,以及最後一次審查週期是否通過。

這個模式來自 pi-factory 示範(github.com/xpriment626/pi-factory)。核心思想只有一句話:
一條執行緒是一個追蹤。一行資料是證據。閘門讀取資料行。
progress.log 是日記。黑板是分類帳。SQLite 是分類帳,因為它在所有人停止對話後仍然可查詢。
建立 factory/factory_gate.py。它包含四個表格(tickets、briefs、evidence、verdicts),一個每個 Agent 在工作時呼叫的記錄命令,以及完成閘門。閘門的失敗條件映射到工作本身:
1checks = [2 (tickets == 0, "未記錄任何 ticket。"),3 (done != tickets, "並非所有 ticket 都已完成。"),4 (first_brief is None, "未記錄任何架構簡報。"),5 (first_brief > first_code, "實作證據早於簡報。"),6 (code_ev == 0, "未記錄任何實作者程式碼證據。"),7 (build_ok == 0, "未記錄任何通過的建置命令證據。"),8 (test_ok == 0, "未記錄任何通過的測試命令證據。"),9 (latest("architect") != "green", "最新的架構師判決不是綠色。"),10 (latest("reviewer") != "green", "最新的審查者判決不是綠色。"),11]
這個清單編碼了整個原則。
- 順序被強制執行。 簡報晚於第一個程式碼證據是違規行為,這使得「先計畫後建置」成為一個可檢查的事實,而不是一個習慣。
- 兩個評審席位必須在同一個最新週期中都是綠色。 一個過時的批准不能承載一個較新的 diff。
- 沒有通過的測試行就無法完成, 無論對話記錄聽起來多麼自信。
建立 factory/factory.sh,它將你已經建置的席位連接到運行順序中,並在每一步之間記錄行:
1G ticket "看板" "欄位渲染,拖曳持久化" # 規劃者行2G brief "$BRIEF" # 在任何程式碼之前3../loop/ralph.sh && G evidence code pass "迴圈完成" # BUILD 3 工作4npm test && G evidence test pass "npm test 通過"5G verdict 1 architect green "佈局符合簡報" # Claude 席位6G verdict 1 reviewer green "測試通過,範圍乾淨" # Sol 席位,透過 codex7python3 factory_gate.py gate factory.db # 資料行決定
沒有僱用任何新東西。
Fable 切割 ticket 並撰寫簡報(唯讀)。BUILD 3 迴圈負責實作。Claude 和 Sol 各自從自己的架構返回判決。這個週期最多重複三次,直到兩者都變綠。
工廠是你已經擁有的員工的組織圖表。
一個真實的運行,而不是模擬。第二次呼叫閘門是整個建置的論證:
1$ factory_gate.py record demo.db ticket "kanban-board" "欄位渲染,拖曳持久化"23$ factory_gate.py gate demo.db4GATE: REFUSED5 - 並非所有 ticket 都已完成。6 - 未記錄任何架構簡報。7 - 未記錄任何實作者程式碼證據。8 - 未記錄任何通過的建置命令證據。9 - 未記錄任何通過的測試命令證據。10 - 未記錄任何審查週期。11 exit: 11213... Agent 工作。每一步都寫入一行 ...1415$ factory_gate.py record demo.db brief "技術棧:node+sqlite。/tasks CRUD。"16$ factory_gate.py record demo.db evidence code pass "src/board.js 已撰寫"17$ factory_gate.py record demo.db evidence build pass "npm run build 退出碼 0"18$ factory_gate.py record demo.db done "kanban-board"19$ factory_gate.py record demo.db verdict 1 architect green "佈局符合簡報"20$ factory_gate.py record demo.db verdict 1 reviewer green "範圍乾淨"2122$ factory_gate.py gate demo.db23GATE: REFUSED24 - 未記錄任何通過的測試命令證據。25 exit: 12627$ factory_gate.py record demo.db evidence test pass "npm test 33/33"2829$ factory_gate.py gate demo.db30GATE: COMPLETE (1/1 tickets, 週期 1 綠色 x2)31 exit: 0
兩位審查者都說是綠色。架構師確認佈局符合簡報。審查者確認範圍乾淨。
而閘門仍然拒絕,只因為一行:未記錄通過的測試命令證據。沒有人執行過測試。
判決是意見。兩個意見仍然不是事實。 添加一行測試通過證據後,同一個閘門返回 COMPLETE 並退出 0。
模型會令人信服地為自己的工作辯護,而對話記錄捕捉的是論證而不是真相。資料行無法被爭論。
當閘門拒絕時,它會指出確切缺少的工件。這將「運行失敗」轉變為「產生一個通過的測試行。」一個任務,而不是一個謎題。
安裝條件:每天超過一個撰寫者會話,跨越多天的審查週期,或需要在事後證明發生了什麼。對於只有一個夜間迴圈的個人倉庫,BUILD 3 就足夠了,而這是多餘的。
CHECK 8:重現螢幕截圖。記錄所有內容,除了測試行,閘門必須只以一個理由拒絕。添加該行後,它必須返回 COMPLETE。一個沒有測試行就通過的閘門是一個對話記錄讀取器。
BUILD 9:群體(Fable 規劃,艦隊執行,Fable 評分)
一個驅動者搭配一個顧問涵蓋一個任務。一個可以分成四個獨立部分的目標需要四個工作者。
但是一個艦隊只有當一個模型規劃每個目標並評分每個結果時才能保持其方向。這正是這個建置存在的全部原因,也是群體通常沒有它就會失敗的原因。
Rung 3 變得具體。Fable 撰寫目標,艦隊執行它們,Fable 根據自己的檢查評分每個結果,下一個週期只重新規劃未達標的部分。
它的中止條件是週期上限。當上限觸發時仍有未達標的項目,這是一個需要人類介入的規格問題,而不是運行第四個週期的理由。
建立 swarm/swarm.sh。三個設定承載了原則:
1FLEET=4 # 寫入永不衝突:每個工作者一個工作目錄2WORKER_MODEL=claude-sonnet-5 # 或 haiku / luna / kimi 用於純執行3WORKER_EFFORT=low # 永遠不要繼承指揮者的 effort4CONDUCTOR=claude-fable-5 # 或 opus-4-8 如果保留規則咬人
這三行是明確的,因為預設值不是這樣。
一個繼承的艦隊會繼承指揮者的模型和指揮者的 effort 兩者。一個高 effort 的 Fable 指揮者生成四個高 effort 的 Fable 工作者來執行機械性工作,是用最昂貴的方式做最便宜的事情。
設定它們。永遠不要讓它們使用預設值。
跨架構扇出是允許的,而且它看起來不像違反 ROUTING.md 的第一法則。
- 一個 Fable 指揮者透過 shell 呼叫 codex exec,在 Codex 內部原生運行 Sol。這是遵守法則,而不是彎曲法則。
- 違反法則的是 Claude 端的子 Agent 使用 GPT 模型字串,或者反過來。
架構隨著工作者移動,而不是指揮者。
指揮者撰寫目標,永遠不寫程式碼,每個目標都攜帶自己的檢查命令,因此完成與否保持為事實:
1{"id":"strip-legacy-auth","spec":"從 routes/ 中移除 v1 認證路徑","check":"npm test -- tests/auth"}2{"id":"migrate-sessions","spec":"將 session 儲存遷移到新適配器","check":"npm test -- tests/session"}
然後分派、評分和重新規劃:
1# 分派:每個目標一個 git worktree,最多 FLEET 個平行執行2claude --model "$WORKER_MODEL" --effort "$WORKER_EFFORT" -p "精確執行此規格。3 不要擴大範圍。執行測試。僅在通過時提交。"45# 評分:指揮者根據自己的檢查命令對每個目標評分。6# 工作者的信心不是證據。退出碼才是。7bash -c "$chk" && echo "$id" >> passed.txt || misses=$((misses+1))89# 重新規劃:下一個週期看到 passed.txt,只重新規劃未達標的項目
逐個席位:
- Sonnet 5 用於編碼執行
- Haiku 或 Luna 用於純機械性工作
- 像 Kimi 這樣的開放權重工作者,當工作重複且權重免費時
- Sol 當工作涉及大量終端操作時
- Opus 4.8 在工作者席位,僅當子 Agent 需要推理時
保留 Fable 用於兩個沒有廉價模型能勝任的工作:撰寫目標,以及評分它們。
艦隊是成本策略,永遠不是智慧策略。
多 Agent 運行消耗的 token 是等效工作的 3 到 10 倍,而 2026 年的一項預算對等研究發現,在 token 數量固定的情況下,單一 Agent 在推理能力上與多 Agent 設定相當。
一個群體只有在目標獨立且主要為機械性工作時才值得它的成本。每個工作目錄的寫入保持單執行緒,合併按順序進行,人類負責最後一次提交。
CHECK 9:在一個可以分成三部分的目標上運行群體。一個失敗的目標必須在 results.tsv 中以 FAIL 返回,並在週期 2 中重新規劃,永遠不會被宣告完成。
BUILD 10:Rung 4(曾經通過的事項,永遠不會被忽略)
到目前為止,所有內容都在工作進行中驗證它。目前為止沒有任何內容注意到六週後完成的工作不再成立。你驗證過一次的目標只是一個帶有時間戳的假設。
Rung 4 有兩部分,其中止條件與其退出條件同樣重要:如果本週沒有提案通過閘門,系統不會改變,而這本身就是一個成功。
第一部分,持續目標。每個完成的事項都晉升為一個不變量,帶有一個謂詞,每天重新驗證,永遠如此。在 goals/ 中為每個完成的事項建立一個檔案:
1predicate: npm test -- tests/auth 2>&1 | tail -1 | grep -q passing2born: 2026-07-133status: satisfied4last-pass: 2026-07-135on-violation: 叫我。不要自動修復。
然後 system/verify_goals.py 執行所有這些,如果任何不變量被破壞則退出 1,並指明目標名稱、它上次成立的日期以及你設定的策略:
1held = subprocess.run(["bash","-c",predicate], timeout=60).returncode == 02g["status"] = "satisfied" if held else "VIOLATED"3# 超時是違規,不是通過:昂貴的謂詞是壞掉的謂詞
謂詞規則故意嚴格:一個 shell 命令,退出碼 0 表示不變量成立,廉價且唯讀。
禁止形容詞。如果 shell 無法檢查它,模型也無法。
非程式碼目標也以同樣方式工作。test -s reports/$(date +%Y-%m)-review.md 對於月度報告來說是一個很好的持續目標。
第二部分,堆肥。每週一次,讀取系統已經產生的廢棄物:BLOCKED 任務、失敗的閘門運行、被拒絕的工廠閘門、被還原的 PR、被違反的目標。
然後提出最多三個變更。憲法中的一條新法則。對一個持續以相同方式失敗的技能的修復。或者一個你缺少的持續目標。
只提案。你簽署。
1claude --model claude-fable-5 --effort high --allowedTools "Read,Grep,Glob" \2 -p "閱讀本週的廢棄物:progress.log 中的 BLOCKED 行、GATE REFUSED 條目、3 VIOLATED 目標、未合併關閉的 PR。提取最多 3 個提案:4 一條新法則(引用事件)、一個技能修復(相同錯誤重複出現)、或一個我們缺少的5 持續目標。只提案,不編輯任何內容。乾淨的一週是有效答案,說出來並停止。"
這個 rung 只有在評估和裁判說系統變得更好了時才關閉。這意味著系統需要記住自己的失敗才能改進。
堆肥運行是將腳本轉變為制度的原因。
持續目標是讓完成變得安全的原因。哨兵檢測,正常管線修復,沒有東西在沉默中腐爛。
CHECK 10:verify_goals.py 示範命名被破壞的不變量及其最後通過日期,同時保持健康的不變量不變。然後為你最後完成的一件事撰寫一個真實的持續目標。
BUILD 11:Rung 5(你的席位,以及為什麼它永遠不會空著)
Rung 5 以你的名字命名,出於機械性原因,而不是情感原因。
一個迴圈可能達到其停止條件,但仍然可能是錯的。 測試通過,閘門變綠,兩位審查者簽署,而最後一次提交仍然是個錯誤。
這個建置以下的所有內容都是為了縮小這個風險。沒有一個能消除它。
你的常規職責,都很廉價:
- 喝杯咖啡閱讀佇列:BLOCKED 任務、GATE REFUSED 行、VIOLATED 目標,廉價層級的部分。十分鐘。
- 檢查最後一次提交,在它合併之前。不是每個 diff,而是最後一個,系統最有信心的那個。
- 簽署或拒絕三個堆肥提案。這是法則進入憲法的唯一方式。
三個劇本按節奏運行,而不是按需運行,因為它們花費真金白銀,而且回報是方向而不是 diff:
劇本一,專案反饋迴圈,每月一次。
將 Fable 指向你已經交付的內容,唯讀,讓它撰寫一個詳細的改進計畫。然後將該計畫的執行交給 Opus 4.8 或 Sol。
昂貴的模型做能夠複利的部分,即判斷什麼需要改變,而永遠不做不能複利的部分,即打字。
1claude --model claude-fable-5 --effort high --allowedTools "Read,Grep,Glob" \2 -p "從頭到尾審查此專案。撰寫一個按槓桿作用排序的改進計畫:什麼是脆弱的、3 什麼是過度設計的、什麼是缺少的、什麼應該被刪除。不要寫程式碼。輸出帶有4 驗收標準的任務。" \5 > plans/$(date +%F)-improvement.md
第二幕:行為分析,每月執行。
將你在兩個工作平台上的對話與專案歷史輸入,請它分析你的建構模式與瓶頸所在。
這是系統中唯一以你為分析對象的報告,通常也是變動最大的那份。
第三幕:第二大腦審計,每季執行。 將你的筆記、文件與待辦事項指向它,詢問你的思考本身認為接下來值得建構什麼、應該刪除什麼。將輸出視為一份提案,就像堆肥一樣。
接下來的階梯專注於優化執行,而執行在當今已是廉價環節。方向才是稀缺資源,而方向正是前沿模型值得付費之處。以克為單位購買判斷力,以噸為單位購買執行力,並保留最終簽署權。
檢查 11:在自己的倉庫上執行第一幕。 如果計畫中沒有提到你已知的脆弱環節,表示你的上下文檔案過於薄弱,這屬於 BUILD 1 的問題。
BUILD 12:營運
Agent 消耗的 token 量是聊天對話的 10 到 100 倍,其中輸入部分約佔 100 比 1 的壓倒性比例。
善用 BUILD 0 的四個槓桿(拆分、快取、批次、壓縮),團隊回報可較未優化基準降低 70% 到 90% 的成本。
合理基準:每位開發者每個活躍日的成本約為 13 美元,這是 Claude Code 的企業平均值,而 90% 的使用者成本低於 30 美元。
與其建立新子系統,不如一條簡單紀律:任務類別必須在 20 次記錄運行中達到 95% 通過率,方可自動合併;一旦低於 90%,則立即撤銷其權限。
1awk -F'\t' '$2=="fix-lint"{r++; if($3=="pass")p++}2 END{printf "%d runs, %.0f%%\n", r, (r?p/r*100:0)}' progress.log
每週花費,可直接從 ralph.sh 已記錄的每次 tick 成本中取得:
1grep '^cost' progress.log | awk -F'\t' \2 -v d="$(date -d '7 days ago' +%F)" \3 '$2>=d{s+=$3} END{printf "week: $%.2f\n", s}'
在設定自動排程前,先計算你的運作代謝率。每日成本等於 tick 次數乘以平均每次 tick 成本。
處理安靜無工作 tick 的那個席位,決定了最終帳單金額。 廉價方案只需幾美分,而使用前沿模型處理高強度任務,即使回答「無事可做」,成本也可能高達數美元。
在限制內運作
這些模型消耗 token 的速度極快,你的使用方式決定了在觸及上限前能完成多少工作量。
首先,了解你的上限在哪裡。
- 如果是 API 金鑰, 上限就是帳單金額。progress.log 已經在監控這項數據。
- 如果是訂閱席位, 上限則由五小時的時間窗口與每週的窗口共同決定。上述日誌中並未顯示這兩項資訊。
請務必監控你實際使用的配額:Codex 設定中的用量面板、Claude 端的 /usage,或是螢幕角落的 ccusage 或 codexbar 等監控工具。
一個你從未查看的限制,就只會在時限內只剩四小時、且無任務可執行時,才讓你發現它的存在。
六個槓桿,從最便宜開始。大多數作用於 token 消耗量最大的 0 到 2 階梯:
- 精簡 CLAUDE.md 和 AGENTS.md 至核心內容。 每次提示都會讀取這些檔案,以及你啟用的所有技能和工具。關閉未使用的項目;一個未使用的 MCP 伺服器,就是對每則訊息課徵的稅金。
- 在不需要最高強度時,降低運算強度。 預設使用中等或高強度。將最高強度保留給需要它的問題。同時確認已關閉快速模式,因為它會放大你設定的任何強度。
- 為模型設定明確的停止點。 這些模型設計上傾向長時間運作。讓它們先完成計畫並回報,然後再執行,這正是計畫模式真正的功用。
- 保持子 Agent 使用較低強度。 它們會繼承父項目的模型與強度設定,一個最高強度的群組在一次訊息中就能耗盡整個窗口。最簡單的修復方式是在兩份約章中都加入規則:除非被要求,否則不生成子 Agent。
- 讓昂貴模型遠離大量工作。 無論 Fable 是作為低 token 消耗的指揮者,還是作為隨傳隨到的顧問,它的價值展現在決策點上,而非在撰寫第千行程式碼時。
- 查看一則訊息的成本,然後根據這個數字調整上述五個槓桿。 這是唯一能告訴你其他五個槓桿中哪個是問題所在的槓桿。
這些槓桿共同決定了你可以在被限制停止前,使用最佳模型運作多久。
第二週開始時,設定自動排程:
1# 任務循環:每日 tick,設定兩個上限20 7 * * 1-5 cd /path/to/repo/loop && BUDGET_USD=5 ./ralph.sh >> ../progress.log 2>&134# 系統循環:已通過的內容不會被忽略530 7 * * * cd /path/to/repo && python3 system/verify_goals.py goals/ >> progress.log 2>&167# 系統循環:失敗轉化為規則,每週一次,僅提案80 9 * * 1 cd /path/to/repo && codex --profile deep exec \9 "$(cat ~/.codex/prompts/compost.md)" >> proposals/$(date +\%F).md 2>&1
操作手冊。每項警報及其應對措施:

30 天排程。不要跳過升級階段;每個階段都解鎖下一個階段。

指揮中心
此處的每個循環都能透過一個按鍵操作直達。斜線指令存放在 Codex 端的 ~/.codex/prompts/ 目錄下,檔案名稱即為指令名稱;在 Claude 端則存放在 .claude/skills/ 目錄下。CLI 片段則是 cron 和 CI 執行的無頭版本。
Codex 斜線指令

/plan-stop 和 /effort 的投資報酬率最高。 兩者都只花費幾百個 token,就能阻止你花費數十萬個 token。
這些模型運作時間長,因此你需要的檢查點是在花費發生之前。/plan-stop 會回傳計畫、完成條件指令、影響範圍、成本,以及它會向人類提出的一個問題。然後停止。
將兩個檔案放入 ~/.codex/prompts/ 目錄,檔案名稱即成為指令名稱。
effort.md 成為 /effort,即明確化的路由選擇器:
1# /effort - 在花費之前選擇運算強度23先不要執行任務。先為它路由。45為它評分。每項一分:6 - 包含原因、除錯、競賽條件、死結、重構、安全問題或最佳化7 - 觸及多個子系統8 - 先前的嘗試已失敗9 - 變更不可逆或會影響使用者1011然後對應:1213| 分數 | 強度 | 席位 |14|---|---|---|15| 0-1 | 低 | codex -e low,或使用快速設定檔 (Luna)。絕對不要使用前沿席位。 |16| 2 | 中 | 使用 Terra 的中等強度席位。 |17| 3+ | 高 | 實際工作的預設值,也是最佳平衡點。 |1819只有在高強度「已經」嘗試過但失敗時:才建議使用最高強度,並清楚說明額外思考預期能帶來什麼好處。你反對的基本機率是,成本約翻倍,但收益通常無法彌補成本。2021在建議升級前,有兩個提醒:22 1. 較低強度下的較好模型,通常勝過最高強度下的較弱模型。先更換席位,再調整強度。23 2. 如果這個任務會生成子 Agent,請明確指定它們的強度(除非有證據顯示需要更高,否則使用低強度。子 Agent 會繼承父項目的設定,一群最高強度的 Agent 會在單次訊息中耗盡上下文窗口。2425輸出格式:26 強度:低 | 中 | 高 | 最高27 席位:<模型>28 原因:<一行,說明得分點>29 子 Agent:<指定強度,或無>30然後停止。人類將以你指定的強度執行任務。
實際的回答範例如下,花費幾百個 token 以避免花費數十萬個:
1EFFORT: high2SEAT: gpt-5.6-sol3WHY: contains "why", touches auth and sessions, prior attempt failed4SUBAGENTS: low
plan-stop.md 成為 /plan-stop,即花費前的檢查點:
1# /plan-stop - 規劃工作,然後停止23這些模型運作時間長。當計畫正確時,這是個優點;但當計畫錯誤時,這會是一個昂貴的錯誤。這個指令能讓你在花費之前獲得檢查點。45規劃任務。不要編輯任何檔案。不要執行建置。不要開始。67產出:8 目標:<一行>9 假設:<你的預設前提;如果這些前提錯誤,計畫也會錯誤>10 步驟:<編號,每個步驟代表一次提交的工作量>11 完成條件:<能證明每個步驟已完成的確切 shell 指令>12 影響範圍:<受影響的檔案和系統;明確指出認證、付款、遷移、正式環境設定>13 成本:<粗略的 token 數或美元數,以及每個步驟使用的席位>14 未知事項:<如果你只能問人類一個問題,你會問什麼>1516然後停止並等待。1718規劃時的規則:19 - 不確定事項放入「未知事項」。不要猜測並繼續執行。一個在執行階段才暴露的猜測,成本是提問的一百倍。20 - 如果計畫需要一個未記錄在此倉庫中的憑證、端點或慣例,請停止並說明。不要自行發明。21 - 如果任何「完成條件」不是 shell 指令,請重寫該步驟直到符合條件。如果 shell 無法檢查,審查者也無法檢查。22 - 如果影響範圍觸及 AGENTS.md 中的禁止清單,請在開頭說明,並建議排隊等待人類處理。2324你在此處的價值是提供計畫,而非程式碼差異。一個簡短誠實、帶有真實未知事項的計畫,勝過一個自信但悄悄假設錯誤的計畫。
fable-advice.md 和 review-hostile.md 分別成為 /fable-advice 和 /review-hostile。兩者都是你已撰寫檔案在 Codex 端的對應版本:BUILD 5 的顧問簡報,以及 BUILD 6 的敵意審查合約。相同的規則,相同的上限,只是方向跨越了供應商界線。
compost.md 成為 /compost,即階梯 4 的每週制度建構者:
1# /compost - 將本週的失敗轉化為下週的規則23閱讀本週的所有產出,僅限於此:4 - progress.log 中的 BLOCKED 行(經過三次顧問諮詢仍未解決的任務)5 - GATE:REFUSED 條目(無法證明完成的運行)6 - VIOLATED 常設目標(已完成的項目不再有效)7 - 斷路器和預算退出(代碼 2 和 3)8 - 由循環開啟但未合併關閉的 PR(人類默默反對)9 - 任何通過率低於 90% 的任務類別1011最多提取三項提案。三項是硬性上限,而非目標。一週乾淨無事是有效的發現,說出來比製造工作更有用。1213每個提案必須是以下三類之一:14 1. 為 CLAUDE.md 或 AGENTS.md 新增的「規則」。引用它本可預防的事件。只有單一事件支持的規則只是巧合;等待第二次發生。15 2. 當相同失敗在同一個地方重複發生時的「技能修正」。指出技能名稱、模式,以及能打破此模式的最小編輯。16 3. 當某件事默默腐壞時,你所缺少的「常設目標」。將斷言條件寫成 shell 指令,否則不要提出。1718輸出:19 週次:<日期>20 產出:<數量:受阻、拒絕、違規、回退>21 提案 n:<規則 | 技能修正 | 常設目標>22 證據:<引用的事件>23 變更:<要新增的確切文字或斷言條件>24 不做的成本:<一行>25 結論:<如果你只能做一件事,你會先做什麼>2627硬性規則:28 - 僅「提案」。不要編輯 CLAUDE.md、AGENTS.md、任何技能或任何目標檔案。需要人類簽署,否則不執行。29 - 不要提出會放寬閘門、提高預算或放鬆禁止事項的規則。那些是系統在要求允許自己更舒適地失敗。30 - 無產出:說「乾淨的一週」並停止。不要為了證明運行的價值而去找工作。
CLI 片段
將這些保存在一個暫存檔案中。它們是整個系統,可從終端機存取:
1# 每日 tick,在兩個維度設上限2BUDGET_USD=5 MAX_ITERS=20 ./loop/ralph.sh34# 先規劃,後花費(這裡最高槓桿的習慣)5codex -e high exec "$(cat ~/.codex/prompts/plan-stop.md)67TASK: migrate the session store off the legacy adapter"89# 跨供應商審查上一次提交,在 Sol 的原生工作平台10codex --profile deep exec "$(cat ~/.codex/prompts/review-hostile.md)"1112# 鏡像通道:Codex 卡住,Claude 提供建議13claude --model claude-fable-5 --effort high -p "$(cat ~/.codex/prompts/fable-advice.md)"1415# 目標循環:Fable 規劃,群組執行,Fable 評分16CYCLES=3 FLEET=4 WORKER_EFFORT=low ./swarm/swarm.sh "split the auth migration"1718# 系統循環:已通過的內容不會被忽略19python3 system/verify_goals.py goals/ # exit 1 指出腐壞的項目20python3 gate/eval_gate.py eval/cases.jsonl # exit 1 阻止路由變更2122# 階梯 3,工廠:由資料列決定,而非對話記錄23./factory/factory.sh "build the kanban and notes app per PRD.md"24python3 factory/factory_gate.py gate factory.db2526# 每週的制度建構運行27codex --profile deep exec "$(cat ~/.codex/prompts/compost.md)"2829# 唯一能說明這一切是否有效的數字30grep '^route' progress.log | awk -F'\t' \31 '{n++; if($3!="frontier") c++} END{printf "cheap share: %.0f%%\n", c/n*100}'
完整政策位於 BUILD 4 的 ROUTING.md 中,兩個工作平台都會讀取。
規則(請列印此頁)
- 規則,而非提示:一個數字、一個禁止事項,或一個可檢查的指令。
- 模型是租來的。循環是你的。你活在階梯 5。
- 沒有中止機制的循環就是一張帳單。每個循環都需要兩個上限:迭代次數和花費金額。
- 證據向上流,控制向下流。沒有階梯可以根據下層的報告來關閉。
- 循環可以停止,但仍然可能是錯的。在合併前檢查上一次提交。
- 在邊界處路由。先決定強度,再選擇模型。快取會反對切換。
- 預設使用高強度。最高強度是深度,極致是廣度,快速模式是 2.5 倍的稅金,子 Agent 會繼承父項目的席位和強度設定。
- 路由器在被證明優於你評估中最優秀的單一模型之前,都是有罪的。
- 節省來自流量分流。關注廉價請求的佔比,而非定價表。
- 執行是大量工作,建議是少量工作。將諮詢次數上限設為三次。
- 沒有人能為自己的功課評分。使用全新的上下文、不同的來源、原生的工作平台。
- 執行緒是軌跡。資料列是證據。閘門讀取資料列。
- 絕不為了通過測試而編輯測試。絕不繞過受阻的閘門進行合併。
- 你只驗證一次的目標,只是一個帶有時間戳的假設。
- 一次只進行一個升級。每個月,刪除一些東西。
結語
三十天後,如果你完成了檢查:
- 一個循環能在無需監管的情況下,通過確定性閘門自動交付例行工作
- 一個廉價的驅動程式只會在卡住時,才呼叫前沿專家
- 每個有意義的程式碼差異,都會由一個非撰寫者的模型進行評判
- progress.log 中的一個數字,就能告訴你經濟效益是否在持續累積
模型從來都不是困難的部分。一個在你不再監視時仍能保持誠實的系統,才是困難的部分,這也是為什麼階梯 5 上仍然留著你的名字。
今晚就從那能證明這一切的 20 分鐘開始。BUILD 2 的 verify.sh。BUILD 3 的一次手動 tick。對你上一次提交,從另一個來源進行一次審查。
當一個與撰寫者沒有共享任何上下文的審查者,在你確信已完成的工作中發現真正的錯誤時,你就不再需要為其餘部分被說服了。
今晚就建構你的閘門。回覆它在第一次運行時捕捉到了什麼。
免責聲明
本文根據作者的研究筆記和經過驗證的來源撰寫,並藉助 Claude 進行起草和事實查核。所有價格和模型行為已在發表當週根據官方定價和說明文件進行了核對;這些資訊會變動,因此在預算規劃前請務必再次確認。
本文根據前述段落中提到的作者筆記撰寫,並使用 Claude Opus 4.7 進行編輯。
如果您想補充任何其他修正,請在評論中新增。

![成田悠輔的天才 AI 應用技巧 [保存版]](/cdn-cgi/image/width=1920,quality=90,format=auto,metadata=none/https%3A%2F%2Fcms-assets.youmind.com%2Fmedia%2F1784137658627_u4bwry_HNMS89bbsAAUPJI.jpg)



