Phương pháp Fable: skill cho mọi model
Repo fable-method biến thói quen của Claude Fable 5 thành agent skill. Xem từng file, phần có thể dùng cho model khác và cách A/B trên VPS.
Điều mà phương pháp Fable thực sự khẳng định
Phương pháp Fable là một tập hợp nhỏ các agent skill, ghi lại thói quen làm việc của một model thành một quy trình có thứ tự để model khác có thể chạy cùng quy trình đó. Repo là Sahir619/fable-method, được cấp phép MIT. Mô tả một dòng của chính repo là “cách Claude Fable 5 đã làm việc, được chắt lọc thành các skill mà mọi model đều có thể chạy, cùng eval để kiểm chứng tính trung thực của phương pháp”. Phần thứ hai của câu này là điều đáng để kiểm tra.
Không ai bên ngoài Anthropic có thể kiểm tra một file văn bản có thực sự ghi lại cách một model cụ thể suy nghĩ hay không. Nhưng bạn có thể tự kiểm tra xem một model rẻ hơn có hành xử khác đi khi đọc file đó hay không, chỉ với một VPS trong một buổi chiều. Đó là mục đích của toàn bộ phần bên dưới: chạy cùng một task 2 lần, có và không có phương pháp, rồi đếm số lần gọi tool và chi phí.
Nếu từ skill còn mới với bạn, hãy bắt đầu tại agent skill thực sự là gì: một thư mục chứa file SKILL.md, trong đó phần mô tả frontmatter cho agent biết khi nào cần load phần nội dung. Model được dùng để đặt tên cho repo này được đề cập trong Claude Fable 5 có giá bao nhiêu và phù hợp với việc gì.
Cài các skill và cố định version đã kiểm thử
Có 2 cách cài đặt. Trong Claude Code, cách cài qua plugin gồm 2 lệnh:
/plugin marketplace add Sahir619/fable-method
/plugin install fable@fable-methodTrên VPS, nếu muốn lưu một bản cố định trên disk, hãy clone repo rồi checkout một tag trước:
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 không cần sudo vì lệnh này chỉ ghi vào $HOME/.claude/skills. Sau khi chạy xong, ls ~/.claude/skills sẽ liệt kê fable-judge, fable-loop và fable-method. Hãy xem những gì không xuất hiện. Repo có 4 skill, còn shell installer chỉ copy 3 skill, nên user cài độc lập sẽ không có fable-domain trừ khi tự copy skill đó:
cp -r ~/fable-method/skills/fable-domain ~/.claude/skills/Cố định tag và ghi lại tag đó bên cạnh các kết quả bạn nhận được. Repo này đã phát hành 5 release trong khoảng từ 2026-07-06 đến 2026-07-15, từ v1.0.0 đến v1.4.0. v1.4.0 đã thay đổi chính method bằng cách thêm một routing gate mới. Tính đến tháng 8 năm 2026, v1.4.0 vẫn là tag mới nhất. Nếu control run đọc một version của rules còn test run đọc version khác, bạn không đo được gì cả.
Điều mỗi trong bốn skill yêu cầu model thực hiện
File quan trọng nhất là skills/fable-method/SKILL.md. File này có hai gate và bảy bước được đánh số. Các rule đủ cụ thể để có thể kiểm tra và phản biện.
Triviality gate được áp dụng trước: xử lý trực tiếp, không cần nghi thức, khi thay đổi chỉ tác động đến một file, thực hiện trong khoảng dưới 10 dòng, không thêm behavior mới và bạn đã biết chính xác cần thay đổi gì. Có hẳn một skill riêng dựa trên trực giác này, Ponytail, hướng agent đến thay đổi nhỏ nhất nhưng vẫn hoạt động, với core rule đủ ngắn để bạn chép vào instruction của mình mà không cần cài thêm gì. Tiếp theo là fit gate, định tuyến yêu cầu theo nơi chứa câu trả lời: source có thể mở được, kỹ thuật cần research trước, hoặc suy luận của chính bạn. Nhánh cuối phải được đánh dấu là có độ tin cậy thấp, không được trình bày như sự thật. Nhánh ở giữa chỉ hoạt động nếu agent thực sự truy cập được web. Trên một VPS bị giới hạn truy cập, bạn phải cấp cho agent một search backend riêng, chẳng hạn như một instance SearXNG tự host được expose dưới dạng JSON search tool.
Tiếp theo là loop: phân loại yêu cầu, định nghĩa điều kiện hoàn tất, thu thập bằng chứng, quyết định, thực hiện, xác minh, báo cáo. Bước 2 yêu cầu định hướng bằng cách liệt kê directory trước khi chọn file, ưu tiên primary source thay vì dựa vào trí nhớ, và dừng sau hai lần lookup liên tiếp không trả về thông tin mới. Bước 4 yêu cầu viết một dòng INTENT: trước mọi lần edit, nêu code đang làm gì, check bị fail đang mong đợi gì và spec quy định gì. Không được edit khi ba nội dung này không khớp, vì chính sự không khớp đó mới là phát hiện thực tế. Bước 5 giới hạn số lần retry: sau ba chu kỳ fix-and-verify thất bại cho cùng một issue, hãy dừng và trả lại output thực tế.
Phần dễ kiểm tra nhất của file là bốn report token. Thay đổi behavior phải có một dòng INTENT:. Action hướng ra bên ngoài phải có AUTH: user said "<exact words>", trích dẫn user, vì repo nêu rõ rằng documentation không phải authorization. Action được yêu cầu nhưng chưa thực hiện phải có một dòng PENDING:. Defect đã được sửa phải có TWINS: searched <pattern> - found <N> other sites. Bạn không cần tin mọi thứ về method này để kiểm tra xem bốn chuỗi đó có xuất hiện đúng lúc hay không. Điều này khiến toàn bộ quy trình có thể đo lường, thay vì chỉ dựa vào cảm nhận.
fable-loop là cùng method đó, được chạy như một orchestration gồm bốn stage: lập plan bằng các evidence subagent chạy song song, execute trên main thread, verify bằng một đến ba attacker subagent, trong đó mỗi subagent dùng một góc kiểm tra khác nhau, rồi audit và report. Method này giả định dùng model rẻ cho role evidence và attacker, đồng thời dùng model mạnh hơn cho quyết định và edit.
fable-judge là phần đáng cài ngay cả khi bạn bỏ toàn bộ phần còn lại. Quan điểm của nó là: "một report là tập hợp các claim, không phải bằng chứng." Nó thu thập các claim từ report đã hoàn tất, xác lập ground truth từ git diff và git status, chạy lại mọi verification mà report nói là đã chạy, rồi tìm các dạng gian lận được đặt tên: check bị làm yếu, hoàn tất giả, scope creep, action không được cấp quyền, phản bội spec và debris còn sót lại. Nó trả về VERIFIED, VERIFIED WITH CAVEATS hoặc REFUTED, đồng thời đánh dấu mọi thứ không thể reproduce là UNVERIFIABLE thay vì mặc định cho là đã pass. Dòng kết của installer cũng trỏ đến skill này: "Hãy thử: mở Claude Code và nhập /fable-judge sau khi bất kỳ agent nào tuyên bố đã hoàn tất công việc." Nếu muốn tích hợp check đó vào quy trình thay vì chạy sau cùng, skill Old Coder yêu cầu agent tạo một SPEC để bạn approve và một EVIDENCE report mà bạn có thể tự chạy lại, trong đó mutation testing thay cho coverage để chứng minh test thực sự bắt được regression.
fable-domain tạo các domain adapter bundle kèm trap fixture và smoke eval. Có tám adapter được phát hành: marketing, research, data analysis, business và ops, finance, legal và compliance, design và UX, và devops. Medical và clinical work được chủ ý để không có adapter.
Những phần nào chuyển sang model khác được, phần nào không
Repo nói trực tiếp về việc này trong AGENTS.md. File này mở đầu bằng câu: "Phiên bản portable cho mọi coding agent hoặc harness (Codex, Cursor, aider, một system prompt thô). Phương pháp giống hệt SKILL.md; dán file này vào phần chỉ dẫn của agent hoặc đặt nó ở thư mục gốc của repo với tên AGENTS.md." File dài khoảng 2,600 từ và giữ nguyên các gate, bước thực hiện và mode. Nếu bạn đã duy trì các file chỉ dẫn ở thư mục gốc của repo, quy ước AGENTS.md và HUMAN.md sẽ nêu rõ file đó được đặt ở đâu và ai đọc nó.
Có 2 phần chuyển sang model khác một cách trực tiếp. Phần mô tả phương pháp là một prompt có thứ tự và không chứa code phụ thuộc model cụ thể. Vì vậy, mọi model tuân thủ instruction đều có thể thực hiện theo. Thesis được repo nêu ra là mức công sức cần bỏ ra tỉ lệ nghịch với tier của model. Judge cũng chuyển được, miễn là agent có shell và một repository, vì mọi thao tác của nó chỉ là git diff rồi chạy lại các command mà người đọc cũng có thể chạy.
Có 1 phần không chuyển đổi hoàn toàn được. fable-loop giả định harness có thể spawn các subagent song song và route chúng đến những model khác nhau. Agent không có subagent sẽ chạy tuần tự các stage đó trên một model. Điều này loại bỏ tính song song và khoản tiết kiệm chi phí vốn là lý do thiết kế này được tạo ra. Phần còn lại chỉ là fable-method với thêm thuật ngữ.
Có 2 chi tiết nhỏ phụ thuộc harness và dễ bị bỏ qua. Trigger /fable-method là một slash command của Claude Code. Vì vậy, trên harness khác, bạn phải gọi phương pháp này bằng cách mô tả nó. Phần mô tả frontmatter SKILL.md cho phép agent chỉ load phần nội dung khi nội dung đó khớp với task. Nhờ vậy, một skill đã cài gần như không tốn chi phí cho đến khi được kích hoạt. Nếu bạn dán AGENTS.md vào system prompt, 2,600 từ đó sẽ nằm trong mọi request bạn gửi, dù task chỉ là sửa typo một dòng hay refactor. Đây là khác biệt chi phí thực tế và cũng là lý do chính khiến skill packaging tồn tại.
Cách A/B trên VPS: cùng một tác vụ, chạy 2 lần
Thiết lập 2 bản sao làm việc giống hệt nhau để mỗi lần chạy không nhìn thấy các chỉnh sửa của lần còn lại. Thay YOUR_ORG/YOUR_REPO bằng repository bạn muốn kiểm thử; 2 bản clone phải xuất phát từ cùng một 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/methodChọn một tác vụ có kết quả quan sát được mà không phụ thuộc ý kiến: một test đang fail và phải pass, hoặc một script phải thoát với mã 0. Tác vụ không rõ ràng sẽ cho phép so sánh không rõ ràng, vì bạn sẽ phải chấm phần văn bản thay vì kết quả.
Chạy nhánh đối chứng bằng --bare. Tùy chọn này bỏ qua việc tự động phát hiện hook, skill, plugin và CLAUDE.md. Đây là yếu tố biến nó thành nhánh đối chứng: các skill bạn đã cài trước đó không thể ảnh hưởng vào lần chạy này. Chế độ bare không dùng thông tin đăng nhập subscription của bạn, nên trước tiên hãy đặt API key từ Claude Console.
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.jsonlNhánh dùng phương pháp chạy cùng command nhưng thêm một tùy chọn, để nạp phương pháp portable dưới dạng phần bổ sung vào 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.jsonlCùng binary, cùng model, cùng tool, cùng cây thư mục ban đầu. Chỉ khác 1 tùy chọn. Đây là điều kiện cần để phép so sánh có ý nghĩa.
Thiết kế này đo lường nội dung của phương pháp. Nó không đo lường cách đóng gói skill, vì đó là một câu hỏi riêng. Để đo lường cách đóng gói, bỏ --bare, cài các skill như trên và đặt tên skill trong chuỗi prompt, vì skill được người dùng gọi sẽ được mở rộng trong print mode: claude -p "/fable-method $task". Hãy dự kiến profile chi phí sẽ khác với nhánh dùng system prompt, ngay cả khi hành vi quan sát được có vẻ giống nhau.
Đếm số bước và chi phí
Cả hai lần chạy đều ghi một luồng sự kiện JSON. Dòng cuối là một message result chứa văn bản cuối cùng, chi phí và metadata của session. Hãy in dòng này một lần và đọc nó trước khi viết script dựa trên dữ liệu đó, vì tên field có thể thay đổi giữa các bản phát hành Claude Code.
tail -1 ~/ab/control.jsonl | jq .Chi phí của mỗi lần chạy lấy từ dòng đó. Đây là giá trị cần so sánh:
for f in ~/ab/control.jsonl ~/ab/method.jsonl; do
printf '%s ' "$f"
jq -r 'select(.type=="result") | .total_cost_usd' "$f"
doneSố bước thực hiện được tính bằng cách đếm số lần gọi tool trong cùng file:
jq -r 'select(.type=="assistant") | .message.content[]? | select(.type=="tool_use") | .name' \
~/ab/control.jsonl | sort | uniq -c | sort -rnChạy lệnh đó cho cả hai file. Hình dạng của chênh lệch cho bạn nhiều thông tin hơn tổng số. Một lần chạy theo method đọc nhiều file hơn và sửa ít file hơn đang thực hiện đúng yêu cầu của method, và đó là sự đánh đổi bạn đang chấp nhận. Nếu một lần chạy theo method tạo ra cùng số thay đổi nhưng tốn thêm 40% chi phí, thì method đó không đem lại lợi ích gì cho task này.
Có 2 điểm cần lưu ý về các con số. Thứ nhất, đừng cộng output_tokens trong các session transcript bên dưới ~/.claude/projects/ rồi coi đó là tổng chi phí: các block usage theo từng message chỉ là snapshot được ghi trong quá trình streaming, và đã có các báo cáo cho thấy chúng có thể đếm thiếu. Hãy tin vào dòng result. Thứ hai, chạy mỗi phương án 1 lần chỉ là một giai thoại. Hãy chạy mỗi phương án 3 hoặc 4 lần trên cùng task trước khi kết luận về một khoảng chênh lệch, vì ngay cả 2 lần chạy cùng agent trên cùng task cũng đã có thể cho kết quả khác nhau. Để theo dõi chi phí trong thời gian dài, các tool theo dõi chi phí Claude Code và cách Claude Code đếm token giải thích vì sao các dòng cache chiếm phần lớn tổng số thô.
Đảm bảo agent không thể truy cập bất kỳ thứ gì quan trọng trong khi chạy unattended. chạy Claude Code an toàn trên VPS trình bày về user account và các permission flag.
Đọc trung thực phần eval của chính repo
Tiêu đề README là "Fifteen eval rounds, more than 260 agent runs, blind LLM judges that verify by diffing and executing." Đây là nhiều bằng chứng hơn hầu hết mọi skill repo công bố, và eval/RESULTS.md được ghi lại theo từng round, giữ nguyên cả các lỗi. Tuy nhiên, khi xem từng ô dữ liệu phía sau các hàng tiêu đề, phần này mỏng hơn con số trong tiêu đề gợi ý.
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"
}
]Hàng lớn nhất trong số 4 hàng đó dựa trên 4 lần chạy. Ba hàng còn lại mỗi hàng dựa trên 2 lần chạy. Repo cũng tự nói rõ điều này trong phần giới hạn cố định ở đầu log: "Small n throughout (1-4 runs per cell), LLM judges (blind where multiple outputs are compared, but built on the same frontier model that appears as a baseline), synthetic fixtures, research ground truth only as current as its run date." Và nói trực tiếp hơn: "This log exists so method edits are tested, not so anyone mistakes it for a benchmark."
Hãy ghi nhận điểm này. Tác giả công khai n của mình và chỉ ra vấn đề là judge được xây dựng trên cùng model được dùng làm baseline. Điều đó trung thực hơn mặt bằng chung của nhóm này. Hãy đọc các con số như bằng chứng cho thấy tác giả thực sự đã chạy các thử nghiệm và giữ lại các lỗi. Chính phép A/B của bạn mới cho biết điều gì về codebase của bạn.
README cũng nói rất rõ phương pháp này không có tác dụng ở đâu, và đó là đoạn hữu ích nhất. Tài liệu ghi nhận không có mức cải thiện nào đối với các task nhỏ thông thường trên những model đủ năng lực. Tài liệu nêu rằng "the method cannot make a model's facts fresher; bare frontier wins knowledge-heavy research". Tài liệu cũng xác định giá trị nằm ở "traps (authority conflicts, false completion claims, weak executors, unattended runs), not everywhere". Nếu công việc với agent của bạn chỉ là các chỉnh sửa nhỏ trên một model mạnh và bạn theo dõi trực tiếp, hãy kỳ vọng không đo được khác biệt nào. Nếu đó là một model rẻ hơn chạy unattended, đây là nơi khoảng cách có thể xuất hiện. Điều đó cũng khiến việc chọn giữa Opus, Sonnet và Haiku trở thành một phần của cùng quyết định.
Khi việc đóng gói chỉ là làm theo mẫu
Có 4 điểm đáng phê bình, nhưng không điểm nào là lý do để bỏ qua repo.
Cách trình bày đi xa hơn bằng chứng. “Claude Fable 5 đã hoạt động như thế nào” là một tuyên bố về nội bộ của một model mà không ai bên ngoài Anthropic có thể xác minh. Chính câu cốt lõi của repo cũng làm suy yếu tuyên bố đó: “Chất lượng nằm ở cấu trúc, bằng chứng và sự trung thực, không nằm ở model.” Nếu chất lượng nằm ở cấu trúc, câu chuyện về nguồn gốc chỉ là phần trang trí. Quy trình này tự đứng vững và không cần một huyền thoại về nguồn gốc.
4 skill mang tính bề mặt nhiều hơn mức nội dung cần. fable-loop lặp lại phần lớn nội dung của fable-method, chỉ bọc thêm orchestration, và trên một harness không có subagent thì nó rút gọn lại thành fable-method. Hãy đọc 2 file cạnh nhau trước khi cài cả hai.
8 domain adapter tạo ra độ phủ mà bộ eval không kiểm tra. Chỉ 2 trong 8 adapter xuất hiện ở bất kỳ đâu trong log: marketing ở round 9 và devops ở round 12. Các adapter finance, legal, design và data được release nhưng không có round nào đi kèm. Adapter cho lĩnh vực của bạn vẫn có thể tốt. Tuy nhiên, nó mới chỉ là bản nháp của tác giả, chưa phải thứ đã vượt qua một trap fixture.
Installer cũng không thống nhất với repo về những gì nó release, vì nó copy 3 trong 4 skill vào ~/.claude/skills. Đây là một vấn đề nhỏ. Nhưng nó cũng cho thấy việc đóng gói đã tiến nhanh hơn quá trình review. Hãy nhớ điều này khi quyết định mức độ áp dụng các thành phần này ngay từ đầu.
Những điều cần giữ lại nếu không giữ gì khác
Bỏ phần nhận diện thương hiệu đi, vẫn còn 4 quy tắc có thể tự đứng vững, bất kể bạn chạy agent nào.
- Trích dẫn ủy quyền. Hành động không thể hoàn tác hoặc hướng ra bên ngoài phải có chính lời người dùng viết rõ dưới dạng một dòng
AUTH:. Agent không tìm được trích dẫn thì không được thực hiện. - Kiểm tra song song. Sau khi sửa một lỗi, hãy tìm trong toàn bộ project cùng cấu trúc sai đó và báo cáo số lượng, kể cả khi kết quả là 0.
- Xác minh bằng quan sát. Một targeted check màu xanh nằm trên một build bị hỏng là xác minh thất bại, không phải đạt.
- Báo cáo ưu tiên kết quả, đồng thời nêu rõ những gì đã bỏ qua hoặc chưa được xác minh dưới dạng caveat thay vì âm thầm bỏ đi.
Bạn không mất chi phí nào khi áp dụng 4 quy tắc này và có thể dùng grep để kiểm tra việc tuân thủ. Hãy bắt đầu từ đó, đo bằng harness ở trên, rồi quyết định phần còn lại của repo có xứng đáng chiếm context budget của bạn hay không. Nếu muốn cung cấp cho agent context cố định của project thay vì một phương pháp làm việc, một file DESIGN.md mà agent đọc trước khi chỉnh sửa là lựa chọn bổ sung phù hợp.
FAQ
Phương pháp Fable có hoạt động với các model khác ngoài Claude không?
Phần nội dung phương pháp thì có. Đây là một prompt theo thứ tự, không có code dành riêng cho model. Repo cung cấp AGENTS.md dưới dạng bản sao portable để dùng với Codex, Cursor, aider hoặc system prompt thuần. Có 2 thành phần không chuyển sang môi trường khác. Các trigger /fable-method và /fable-judge là slash command của Claude Code, nên ở nơi khác bạn gọi phương pháp bằng cách mô tả nó. Còn fable-loop giả định harness có thể spawn các subagent chạy song song trên những model khác nhau. Nếu không có khả năng đó, phương pháp sẽ chạy tuần tự và tạo ra fable-method với nhiều bước hơn.
Chạy các skill này có tốn thêm token không?
Có. Mức tăng phụ thuộc vào cách bạn load chúng. Khi được cài dưới dạng skill, phần nội dung chỉ được load khi description khớp với task, nên request không liên quan gần như không tốn thêm gì. Nếu dán vào system prompt, khoảng 2,600 từ của AGENTS.md sẽ đi kèm trong mọi request. Bản thân quá trình chạy cũng tốn thêm, vì phương pháp yêu cầu định hướng trước khi chỉnh sửa, thu thập bằng chứng trước khi quyết định và verification thực tế sau đó. Hãy đo trực tiếp: chạy cùng một task với --output-format json trong cả 2 nhánh, rồi so sánh trường total_cost_usd.
Nên cài phiên bản nào của fable-method, và tại sao phải pin phiên bản?
Chạy git checkout v1.4.0 trước khi cài. Tag đó có ngày 2026-07-15 và vẫn là tag mới nhất vào tháng 8 năm 2026. Repo đã phát hành 5 release trong 9 ngày trước đó, và v1.4.0 đã thay đổi chính các routing rule. Nếu theo dõi main trong lúc đo, control run và test run có thể đọc các instruction khác nhau, khiến việc so sánh không còn giá trị. Hãy ghi lại tag cùng với kết quả.
Eval trong repo có phải là benchmark đáng tin cậy không?
Hãy xem nó như change log của phương pháp, đúng như tác giả gọi nó: "This log exists so method edits are tested, not so anyone mistakes it for a benchmark." Các giới hạn được nêu ở đầu file: 1 đến 4 lần chạy cho mỗi cell, fixture tổng hợp và các LLM judge được xây dựng trên cùng frontier model cũng được dùng làm baseline. Các round là dữ liệu thực và các experiment thất bại vẫn được giữ lại. Đây là mức minh bạch cao hơn phần lớn repo công bố. Tuy vậy, eval này vẫn không đo được điều sẽ xảy ra trên codebase của bạn. Vì vậy, hãy tự chạy comparison 2 nhánh.