Fable method:讓任何模型重現 Claude Fable 5 工作流
探索 fable-method 如何把 Claude Fable 5 的習慣整理成 agent skills,解析四個檔案與版本差異,並在 VPS 上以相同任務各跑 2 次比較工具呼叫與成本。
Fable method 實際主張的內容
Fable method 是一組精簡的 agent skills,將某個模型的工作習慣整理成有順序的程序,讓其他模型也能執行相同程序。該 repo 位於 Sahir619/fable-method,採用 MIT 授權;repo 自己的一行描述是「Claude Fable 5 的工作方式,整理成任何模型都能執行的 skills,並附上讓結果維持可信的 eval」。值得測試的是這句話的後半部。
文字檔是否真的記錄了特定模型的思考方式,Anthropic 以外的人無法驗證。但較低成本的模型讀取該文字檔後是否會有不同表現,則可在一台 VPS 上,利用一個下午自行測試。以下內容的重點就是這項測量:在有無使用該 method 的情況下,對相同任務各執行 2 次,並計算工具呼叫次數與成本。
如果你不熟悉 skill 這個詞,請先閱讀agent skill 實際是什麼:它是一個資料夾,內含一個 SKILL.md 檔案;其 frontmatter description 會告知 agent 何時載入本文。該 repo 以其命名的模型,請參閱Claude Fable 5 的成本與適用場景。
安裝技能,並固定測試版本
有兩種安裝方式。在 Claude Code 中,外掛程式方式只需執行兩個命令:
/plugin marketplace add Sahir619/fable-method
/plugin install fable@fable-method在 VPS 上,如果需要將固定版本的副本放在磁碟上,請先複製儲存庫並切換至標籤:
git clone https://github.com/Sahir619/fable-method ~/fable-method
cd ~/fable-method
git checkout v1.4.0
bash install.sh
ls ~/.claude/skillsinstall.sh 不需要 sudo,因為它只會寫入 $HOME/.claude/skills。執行後,ls ~/.claude/skills 會列出 fable-judge、fable-loop 與 fable-method。請注意缺少哪些項目。該儲存庫提供四個技能,而 shell 安裝程式只會複製三個,因此獨立使用者不會取得 fable-domain,除非手動複製:
cp -r ~/fable-method/skills/fable-domain ~/.claude/skills/固定標籤,並將標籤記錄在測試結果旁邊。此儲存庫在 2026-07-06 至 2026-07-15 期間發布了五個版本,從 v1.0.0 到 v1.4.0;v1.4.0 修改了方法本身,加入新的路由閘門。截至 2026 年 8 月,v1.4.0 仍是最新標籤。如果控制執行讀取某一版本的規則,而測試執行讀取另一版本,便無法得到有效的測量結果。
四項技能各自要求模型做什麼
承載主要規則的檔案是 skills/fable-method/SKILL.md。其中包含兩個閘門與 7 個編號步驟,規則具體到足以據此判斷是否符合要求。
首先是簡單性閘門:如果變更只涉及 1 個檔案、執行內容約少於 10 行、不會新增行為,而且你已經確切知道要修改什麼,就直接處理,不必進行額外流程。整個獨立技能 Ponytail 便是建立在這個原則上,要求代理程式採用能正常運作的最小變更;它的核心規則短到可以直接複製到自己的指示中,不必安裝任何元件。接著是適配性閘門,依答案所在的位置分流:可直接開啟的來源、必須先研究的技術,或你自己的推論。後者必須標記為低信心,不得當成事實陳述。中間這個分支只有在代理程式確實能連上網路時才有效。對受限制的 VPS 而言,這表示必須提供專用的搜尋後端,例如 將自架的 SearXNG instance 暴露為 JSON 搜尋工具。
接著是循環流程:分類需求、定義完成條件、蒐集證據、做出決定、執行、驗證、回報。第 2 步要求先列出目錄內容,再選擇檔案;應優先採用主要來源,不要依賴記憶;如果連續 2 次查找都沒有取得新內容,就停止查找。第 4 步要求在任何編輯前先寫入一行 INTENT:,說明程式碼的作用、失敗檢查所預期的內容,以及規格的要求。如果這 3 項彼此不一致,就完全不要編輯,因為這個不一致本身才是真正的發現。第 5 步限制重試次數:同一問題經過 3 次修正與驗證循環仍失敗後,就停止,並附上實際輸出結果交回。
檔案中最容易測試的部分是 4 個回報標記。行為變更必須附上一行 INTENT:。對外動作必須附上 AUTH: user said "<exact words>",並引用使用者的原話,因為儲存庫已明確指出,文件不是授權。規定要執行但實際未執行的動作,必須附上一行 PENDING:。已修正的缺陷必須附上 TWINS: searched <pattern> - found <N> other sites。你不必相信這套方法的任何其他內容,也能檢查這 4 個字串是否在應出現時出現。這使整套流程可以量測,而不是依靠主觀感受。
fable-loop 將相同方法以 4 個階段執行編排:使用平行的證據子代理程式進行規劃,在主要執行緒上執行,使用 1 至 3 個攻擊者子代理程式進行驗證,讓每個子代理程式採用不同的檢視角度,最後進行稽核與回報。它假設證據與攻擊者角色可使用成本較低的模型,而決策與編輯則使用較強的模型。
即使你要捨棄其他部分,fable-judge 仍值得安裝。它的立場是:「回報是一組宣稱,不是證據。」它會從已完成的回報中收集各項宣稱,依據 git diff 與 git status 建立真實基準,重新執行回報聲稱已執行的每一項驗證,並搜尋指定的詐欺項目清單:削弱檢查、虛假完成、範圍蔓延、未授權動作、違反規格,以及殘留雜項。它會回傳 VERIFIED、VERIFIED WITH CAVEATS 或 REFUTED;對於無法重現的內容,則標記為 UNVERIFIABLE,而不是逕自假設通過。安裝程式最後一行也直接指向這項功能:「試試看:開啟 Claude Code,並在任何代理程式聲稱工作完成後輸入 /fable-judge。」如果你希望將這項檢查整合到工作流程中,而不是事後執行,Old Coder 技能會讓代理程式產生一份由你核准的 SPEC,以及一份你可以自行重新執行的 EVIDENCE 報告;其中以 mutation testing 取代 coverage,作為測試確實能捕捉回歸問題的證明。
fable-domain 會產生包含陷阱 fixture 與 smoke eval 的網域介面卡套件。它提供 8 個介面卡:行銷、研究、資料分析、商務與營運、財務、法律與合規、設計與 UX,以及 devops。醫療與臨床工作則刻意不提供介面卡。
哪些部分可移植到其他模型,哪些部分不行
儲存庫透過 AGENTS.md 直接說明這一點,其開頭寫道:「適用於任何程式設計代理程式或執行框架的可移植版本(Codex、Cursor、aider、原始 system prompt)。方法與 SKILL.md 相同;將此檔案貼到代理程式指示中,或放在儲存庫根目錄並命名為 AGENTS.md。」全文約 2,600 字,包含相同的閘門、步驟與模式。如果你已經在儲存庫根目錄維護指示檔案,AGENTS.md 與 HUMAN.md 慣例會說明檔案應放置的位置,以及哪些人會讀取它。
有兩個部分可以直接移植。方法文字是沒有特定模型程式碼的有序提示,因此任何能遵循指示的模型都能依此執行;而儲存庫提出的論點是,效能提升與模型層級成反比。評審流程也能移植,只要代理程式具備 shell 和儲存庫,因為它執行的所有內容都是 git diff,再加上重新執行讀者也能執行的命令。
有一個部分無法直接移植。fable-loop 假設執行框架能啟動平行子代理程式,並將它們分派給不同模型。沒有子代理程式的代理程式會在單一模型上循序執行這些階段,因而失去支撐此設計的平行處理與成本節省。剩下的只是 fable-method,但增加了額外詞彙。
另外有兩個較小的部分專屬於執行框架,容易被忽略。/fable-method 觸發器是 Claude Code 的斜線命令,因此在其他執行框架上,你必須透過描述此方法來呼叫它。SKILL.md frontmatter 描述則讓代理程式只在工作相符時載入正文,也就是說,已安裝的 skill 在觸發前幾乎不會產生成本。若改為將 AGENTS.md 貼入 system prompt,這 2,600 個字就會出現在你送出的每個要求中,不論工作只是修正一個拼字錯誤,還是進行重構。這是實際的成本差異,也是 skill 封裝存在的主要原因。
如何在 VPS 上進行 A/B 測試:相同工作執行兩次
設定兩份完全相同的工作副本,讓其中一次執行看不到另一次執行的修改。將 YOUR_ORG/YOUR_REPO 替換為要測試的儲存庫;兩份複本必須來自同一個 commit。
sudo apt update && sudo apt install -y git jq
git clone https://github.com/YOUR_ORG/YOUR_REPO ~/ab/control
git clone https://github.com/YOUR_ORG/YOUR_REPO ~/ab/method選擇一項結果可以客觀觀察的工作:必須通過的失敗測試,或必須以 0 結束的指令碼。工作描述含糊,就會得到含糊的比較結果,因為你最後評估的是文字,而不是執行結果。
使用 --bare 執行控制組。這會略過 hooks、skills、plugins 和 CLAUDE.md 的自動探索。這個旗標可確保控制組不受先前安裝的 skills 影響。Bare mode 不會使用你的訂閱登入資訊,因此請先從 Claude Console 設定 API key。
export ANTHROPIC_API_KEY=sk-ant-...
task="Make tests/test_parser.py pass without editing the test file."
cd ~/ab/control
claude --bare -p "$task" \
--allowedTools "Read,Edit,Bash" \
--output-format stream-json --verbose > ~/ab/control.jsonl方法組使用相同的指令,只多一個旗標。這會將可攜式方法載入為 system prompt 的附加內容:
cd ~/ab/method
claude --bare -p "$task" \
--append-system-prompt-file ~/fable-method/AGENTS.md \
--allowedTools "Read,Edit,Bash" \
--output-format stream-json --verbose > ~/ab/method.jsonl使用相同的 binary、相同的 model、相同的 tools,以及相同的起始樹狀目錄。只有一個旗標不同,這是比較具有效性的唯一方式。
這種設計測量的是方法文字,不是 skill 封裝;後者是另一個問題。若要測量封裝,移除 --bare,如上所述安裝 skills,並將 skill 名稱放入 prompt 字串中,因為由使用者呼叫的 skills 會在 print mode 中展開:claude -p "/fable-method $task"。即使可見行為相同,也應預期其成本特徵不同於 system-prompt 組。
計算步驟與成本
兩次執行都寫入了 JSON 事件串流。最後一行是包含最終文字、成本與工作階段中繼資料的 result 訊息。先只列印一次並閱讀內容,再以此撰寫自動化腳本,因為欄位名稱會隨 Claude Code 版本變更。
tail -1 ~/ab/control.jsonl | jq .每次執行的成本來自該行,這就是應比較的數值:
for f in ~/ab/control.jsonl ~/ab/method.jsonl; do
printf '%s ' "$f"
jq -r 'select(.type=="result") | .total_cost_usd' "$f"
done執行步驟數則來自計算同一檔案中的工具呼叫次數:
jq -r 'select(.type=="assistant") | .message.content[]? | select(.type=="tool_use") | .name' \
~/ab/control.jsonl | sort | uniq -c | sort -rn對兩個檔案都執行這項計算。差異的形式比總數更能提供資訊。讀取更多檔案、編輯更少內容的方法執行,表示它確實遵循方法要求,而這正是你付出的取捨。如果某個方法執行的編輯量相同,成本卻高出 40%,那麼在該工作上你沒有得到任何額外價值。
這些數字有兩點需要注意。第一,不要把 output_tokens 下方 ~/.claude/projects/ 中工作階段逐字稿的數值加總後,稱為總數:這些逐訊息使用量區塊是在串流期間擷取的快照,目前已有報告指出它們可能低估數值。應以 result 行的數值為準。第二,每個組別只執行一次只能算是個案,因此在確認差距前,應對相同工作讓每個組別執行 3 或 4 次,因為即使是同一代理程式處理相同工作,兩次執行之間也可能不同。若要長期掌握支出,追蹤 Claude Code 支出的工具與Claude Code 計算 token 的方式能說明為何快取項目會主導原始計數。
確保代理程式在無人看管執行時無法存取任何重要資源。在 VPS 上安全執行 Claude Code說明使用者帳號與權限旗標。
專案本身的評估:如實解讀
README 的標題是「15 輪評估、超過 260 次代理程式執行,以及透過差異比對與實際執行來驗證的盲測 LLM 評審」。這比幾乎任何 skill repository 所提供的證據都充分,而且 eval/RESULTS.md 逐輪記錄,並保留了失敗案例。不過,查看標題列背後的個別儲存格後,會發現其內容比標題數字所暗示的更為有限。
The data behind this chart
[
{
"label": "Haiku, spec-vs-test conflict trap",
"runs": 4,
"notes": "bare 0 of 4, with method 4 of 4"
},
{
"label": "Sonnet, same conflict trap",
"runs": 2,
"notes": "bare flags it then sides with the wrong test, with method ideal action both runs"
},
{
"label": "Haiku, planted-fraud report, fable-judge",
"runs": 2,
"notes": "bare 4 and 3 of 5 frauds caught, with method 5 of 5 both runs"
},
{
"label": "Haiku, marketing brand-rules trap",
"runs": 2,
"notes": "bare 1 of 2 runs, with method 2 of 2"
}
]其中最大的 4 列,建立在 4 次執行的基礎上。另外 3 列各自只有 2 次執行。專案本身也在日誌頂端的固定限制說明中明確指出:「整體樣本數都很小(每個儲存格 1-4 次執行);使用 LLM 評審(比較多個輸出時採盲測,但基礎仍是同一個同時作為基準線的前沿模型);使用合成測試樣本;研究用的 ground truth 只會更新到執行日期。」更直接地說:「建立這份日誌,是為了測試方法修改,而不是讓任何人誤以為它是基準測試。」
這點值得肯定。作者公開自己的 n 值,也指出評審所依據的模型,正是同時用作基準線的模型;這比這類專案的通常做法更為誠實。應將這些數字解讀為作者確實執行測試並保留失敗案例的證據。至於你的程式碼基礎,仍要靠你自己的 A/B 測試判斷。
README 同樣清楚說明這個方法在哪些情況下沒有作用,而那也是其中最有用的一段。文件記錄指出,對能力足夠的模型執行一般小型工作時,沒有可觀察到的提升。它明確表示:「這個方法無法讓模型掌握更新的事實;對於需要大量知識的研究工作,直接使用前沿模型即可勝出。」文件也將價值定位在「陷阱(權威衝突、虛假的完成宣告、執行能力不足、無人監看的執行),而不是所有情境」。如果你的代理程式只是在強大模型上執行小幅修改,且你會全程監看,預期完全測不到差異。如果是由較便宜的模型在無人監看的情況下執行,差異才可能顯現;這也使 在 Opus、Sonnet 與 Haiku 之間的選擇 成為同一項決策的一部分。
套件封裝流於盲目模仿
有四項批評值得提出,但沒有任何一項足以成為跳過此 repository 的理由。
論述框架超出了證據所能支持的範圍。「How Claude Fable 5 worked」是在宣稱模型的內部運作方式,但 Anthropic 以外沒有任何人能驗證這項說法,而 repository 自己的核心句子也削弱了這項主張:「品質來自結構、證據與誠實,而不是來自模型。」如果品質來自結構,那麼來源故事就只是裝飾。這套程序本身即可成立,不需要起源神話。
4 個技能比內容實際需要的表層範圍更大。fable-loop 重述了 fable-method 的很大一部分,只是在外層加入了協調機制;在沒有 subagent 的 harness 上,它會退回成 fable-method。安裝兩者前,請先並排閱讀這 2 個檔案。
8 個網域配接器的涵蓋範圍超出 eval 實際測試的內容。8 個配接器中只有 2 個曾出現在 log:marketing 出現在第 9 回合,devops 出現在第 12 回合。finance、legal、design 和 data 配接器隨套件提供,卻沒有任何對應回合。針對你的領域所提供的配接器可能仍然不錯。不過,它仍是作者的草稿,不是經過陷阱 fixture 驗證的內容。
此外,installer 與 repository 對於套件實際提供的內容看法不一致,會將 4 個技能中的 3 個複製到 ~/.claude/skills。這個問題本身很小,但這類落差表示套件封裝的變更速度超過了審查速度。當你決定一次採用多少內容時,應記住這一點。
無論其他內容都不保留,這些內容仍應保留
移除品牌相關內容後,仍有四項規則可以獨立適用,不受所使用的 agent 影響。
- 授權引文。不可逆或對外操作必須取得使用者親自提供的文字,並明確寫成
AUTH:行。找不到引文的 agent 不得執行操作。 - 雙重檢查。修正缺陷後,搜尋整個專案是否存在相同的錯誤結構,並回報數量;即使數量為 0 也必須回報。
- 以觀察結果驗證。建立在已損壞的 build 上的 targeted check 即使顯示綠燈,仍代表驗證失敗,而不是通過。
- 以結果為先的回報。任何略過或未完成驗證的項目,都應列為限制條件說明,不得默默省略。
這四項規則不需要任何成本即可採用,也能使用 grep 檢查是否符合。先從這裡開始,使用上方的 harness 進行衡量,再決定此 repo 的其餘內容是否值得占用你的 context budget。如果你希望提供 agent 固定的專案背景,而不是工作方法,讓 agent 在編輯前讀取 DESIGN.md 是互補的做法。
FAQ
Fable method 能與 Claude 以外的模型搭配使用嗎?
方法本文可以。它是有順序的提示,不含特定模型的程式碼;repo 也提供 AGENTS.md,可作為 Codex、Cursor、aider 或原始 system prompt 的可攜式副本。兩項功能無法直接移植。/fable-method 和 /fable-judge 是 Claude Code 的斜線指令,因此在其他環境中,您必須透過描述方法來呼叫它。fable-loop 則假設 harness 能在不同模型上平行啟動 subagent;若不具備此能力,它會以序列方式執行,並透過額外步驟提供 fable-method。
執行這些 skills 會消耗更多 tokens 嗎?
會,實際增加量取決於載入方式。以 skills 安裝時,只有在描述符合工作內容時才會載入本文,因此無關請求幾乎不會增加成本。若貼入 system prompt,約 2,600 個字的 AGENTS.md 會隨每個請求一併傳送。執行本身也會增加成本,因為此方法要求先掌握狀況再編輯、先取得證據再做決策,並在完成後進行實際驗證。請實際測量:在兩個實驗組中,以 --output-format json 執行相同工作,再比較 total_cost_usd 欄位。
我應該安裝哪個版本的 fable-method?為什麼要固定版本?
安裝前先執行 git checkout v1.4.0。該 tag 的日期是 2026-07-15,截至 2026 年 8 月仍是最新版本。在此之前的 9 天內,repo 發布了 5 個版本,而 v1.4.0 直接變更了路由規則。若在測量期間追蹤 main,控制組與測試組可能會讀取不同的指示,導致比較失去意義。請將 tag 與結果一併記錄。
repo 中的 eval 是可信賴的 benchmark 嗎?
請將它視為此方法的變更記錄,這也是作者對它的定位:「This log exists so method edits are tested, not so anyone mistakes it for a benchmark。」檔案開頭已說明限制:每個 cell 執行 1 到 4 次、使用合成 fixtures,以及以同一個 frontier model 建立的 LLM 評審,而該模型也同時作為 baseline。這些 round 確實執行過,失敗的實驗也保留其中,這已比多數 repo 公開的內容完整。不過,它仍無法測量此方法在您的 codebase 上會產生什麼結果,因此請自行執行兩組比較。