SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-22

Fable 方法:让任何模型复用 Claude 的工作习惯

了解 fable-method 仓库的4项技能、安装遗漏与 v1.4.0 路由变化,并在 VPS 上用相同任务对比工具调用次数和成本,验证它是否适用于其他模型。

Fable 方法实际声明了什么

Fable 方法是一组简短的 agent 技能。它将一个模型的工作习惯写成有序流程,以便其他模型执行相同的流程。该仓库是 Sahir619/fable-method,采用 MIT 许可证。仓库自身的一行描述是:“Claude Fable 5 的工作方式,提炼为任何模型都能运行的技能,并配有确保结果可靠的评估。”值得验证的是这句话的后半部分。

特定文本是否确实记录了某个模型的思考方式,Anthropic 之外的任何人都无法核实。读取该文本后,成本更低的模型是否会表现不同,则可以自行验证:只需一台 VPS,在一个下午内完成。下面所有内容都围绕这一测量展开:在有无该方法的情况下各执行一次相同任务,并统计工具调用次数和成本。

如果您不熟悉 skill 这个词,请先阅读agent skill 的实际含义:它是一个目录,其中包含一个 SKILL.md 文件;该文件的 frontmatter 描述会告诉 agent 何时加载正文。该仓库名称所指的模型介绍见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/skills

install.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个编号步骤,规则足够具体,可以据此进行核对。

首先是琐碎性门槛:如果变更只涉及一个文件、执行量约少于10行、不引入新行为,并且你已经明确知道要改什么,就直接处理,不要增加流程。一个独立技能完全建立在这一判断上:Ponytail 会引导代理采用能工作的最小变更。它的核心规则很短,可以直接复制到自己的指令中,无需安装任何内容。接下来是适配性门槛,根据答案所在的位置分流请求:可以直接打开的源、必须先研究的技术,或只能依靠自身推断的内容。后者必须标记为低置信度,不能当作事实陈述。中间分支只有在代理确实可以访问 Web 时才有效。对于受限 VPS,这意味着要为它提供独立的搜索后端,例如将自托管 SearXNG 实例作为 JSON 搜索工具暴露出来。

然后是循环流程:分类请求、定义完成条件、收集证据、作出决定、执行、验证并报告。步骤2要求先列出目录来了解环境,再选择文件;优先使用一手资料,而不是依靠记忆;如果连续两次查询都没有返回新内容,就停止查询。步骤4要求在任何编辑前写入一行 INTENT:,说明代码的作用、失败检查所期望的结果,以及规范的要求。如果这三者不一致,就不要进行编辑,因为不一致本身才是实际发现。步骤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 报告;其中使用变异测试代替覆盖率,用于证明测试确实能够捕获回归问题。

fable-domain 会生成包含陷阱测试装置和冒烟评估的领域适配器包。它提供8个适配器:营销、研究、数据分析、业务与运营、金融、法律与合规、设计与 UX,以及 DevOps。医疗和临床工作则有意不提供适配器。

哪些部分可以移植到其他模型,哪些不可以

仓库通过 AGENTS.md 直接回答了这个问题。该文件开头写道:“适用于任何编码代理或运行框架的可移植版本(Codex、Cursor、aider、原始系统提示)。方法与 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 粘贴到系统提示中,那么无论任务是修复一处拼写错误,还是执行一次重构,这 2,600 个单词都会出现在您发送的每个请求中。这是实际的成本差异,也是 skill 采用这种打包方式的主要原因。

如何在 VPS 上进行 A/B 测试:相同任务运行两次

设置两个完全相同的工作副本,确保其中一次运行看不到另一次运行的修改。将 YOUR_ORG/YOUR_REPO 替换为要测试的仓库;两个克隆必须来自同一个提交。

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 模式不使用订阅登录,因此请先在 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

方法组使用相同的命令,只增加一个选项,用于将可移植方法作为系统提示补充内容加载:

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

二进制文件、模型、工具和初始目录树都相同。只有一个选项不同;只有这样比较才有意义。

这种设计测量的是方法文本,而不是 skill 打包方式。后者是另一个问题。要测量打包方式,请删除 --bare,按上述方式安装 skills,并将 skill 名称放入提示字符串中,因为用户调用的 skills 会在打印模式下展开:claude -p "/fable-method $task"。即使可见行为相同,也应预期其成本特征与系统提示方式不同。

统计步骤数和成本

两次运行都会写入一串 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

对两个文件都执行上述操作。差异的形态比总数更有参考价值。某种方法读取的文件更多、编辑的文件更少,说明它确实遵循了该方法,而这正是你要付出的取舍。如果某种方法的编辑次数相同,但成本高出百分之四十,那么这次任务中你没有获得任何收益。

需要注意两个数字问题。第一,不要把 ~/.claude/projects/ 下会话记录中的 output_tokens 相加后当作总数:这些逐消息使用量区块是在流式传输期间生成的快照,已有报告指出它们可能少计。应以 result 行中的数字为准。第二,每个方案只运行一次只能算个例。不要仅凭一次差异就下结论,应在相同任务上分别运行每个方案三到四次,因为即使是同一代理执行相同任务,两次运行之间也可能存在差异。若要长期了解支出,跟踪 Claude Code 支出的工具和Claude Code 如何统计令牌可以解释为什么缓存行会主导原始计数。

确保代理在无人值守运行期间无法访问任何重要资源。在 VPS 上安全运行 Claude Code介绍了用户账户和权限标志。

仓库自身的评测:如实解读

README 的标题是“15 轮评测、超过 260 次代理运行,以及通过差异比较和执行结果进行验证的盲测 LLM 评审”。这比几乎任何 skill 仓库发布的证据都更充分,而且 eval/RESULTS.md 按轮次记录,并保留了失败结果。不过,查看标题行背后的单个单元格后,会发现实际证据没有标题中的数字看起来那么充分。

ChartRuns per cell behind the repo's headline eval rows, v1.4.0
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 评审(比较多个输出时采用盲测,但评审模型与作为基线的模型相同);使用合成测试装置;研究基准事实只与运行日期一致。”日志还更直接地说明:“创建此日志是为了测试方法修改,而不是让任何人误以为它是一个基准测试。”

这一点值得肯定。作者公开自己的样本量,并指出评审模型与基线模型相同这一问题,比这一领域的常见做法更加诚实。应将这些数字理解为:作者确实运行了测试,并保留了失败结果。至于你的代码库,只有你自己的 A/B 测试才能说明问题。

README 同样清楚地说明了该方法在哪些情况下不起作用,而这也是其中最有用的一段。对于能力较强的模型执行普通的小任务,它没有记录到任何提升。README 指出,“该方法无法让模型掌握更新的事实;在知识密集型研究中,直接使用前沿模型更有效”。它还将价值范围限定为“陷阱(权威冲突、虚假的完成声明、能力较弱的执行器、无人值守运行),而不是所有场景”。如果你的代理只是在强模型上执行小规模修改,并且由你监看,预计完全测不到提升。如果使用成本更低的模型执行无人值守任务,差距才可能显现;这也意味着 在 Opus、Sonnet 和 Haiku 之间进行选择 属于同一个决策。

包装存在盲目照搬的问题

有4点批评值得提出,但没有任何一点足以成为跳过该仓库的理由。

论述框架超出了证据支持的范围。“How Claude Fable 5 worked”是在声称某个模型的内部机制,但 Anthropic 以外没有人能够验证这一点,而仓库自己的核心表述也削弱了这一说法:“质量来自结构、证据和诚实,而不是模型。”如果质量来自结构,那么来源故事只是装饰。流程本身可以独立成立,不需要一个起源神话。

4项技能的表面范围超出了内容的实际需要。fable-loop 在很大程度上重复了 fable-method,只是外面增加了编排;在不支持子代理的 harness 中,它会退化回 fable-method。在同时安装这两个文件之前,先并排阅读它们。

8个领域适配器提供的广度并未得到评测覆盖。日志中只有2个适配器出现过:第9轮出现 marketing,第12轮出现 devops。finance、legal、design 和 data 适配器随包发布时,没有对应的评测轮次。针对你的领域的适配器仍然可能很好。但它目前只是作者的草稿,并不是经过陷阱测试固件验证的组件。

此外,安装程序与仓库对发布内容的定义不一致:它会将4项技能中的3项复制到 ~/.claude/skills。这个问题本身很小。但这类缺口说明打包进度快于审查进度。在决定一次采用其中多少内容时,应记住这一点。

无论其他内容都不保留,也应保留的内容

去掉品牌相关内容后,仍有四条规则适用于任何运行中的 agent。

  • 授权原文。不可逆或面向外部的操作必须使用用户亲自写出的原话,并写成一行 AUTH:。如果 agent 找不到授权原文,就不得执行操作。
  • 双重检查。修复缺陷后,在整个项目中搜索相同的错误构造,并报告计数,包括计数为 0 的情况。
  • 通过观察进行验证。建立在已损坏构建之上的定向检查即使通过,也属于验证失败,而不是验证通过。
  • 结果优先报告。将跳过的内容或未验证的内容作为限定说明明确写出,不得静默省略。

采用这四条规则不需要任何成本,也可以使用 grep 检查是否符合要求。先从这里开始,使用上面的 harness 进行度量,然后再决定代码库的其余内容是否值得占用你的上下文预算。如果你想让 agent 获得固定的项目上下文,而不是一套工作方法,那么让 agent 在编辑前读取 DESIGN.md是配套做法。

FAQ

Fable 方法适用于 Claude 以外的模型吗?

方法文本适用。它是一个有序提示,不包含特定模型的代码;仓库还提供了 AGENTS.md,可作为 Codex、Cursor、aider 或原始系统提示的可移植副本。有两点无法直接迁移。/fable-method 和 /fable-judge 是 Claude Code 的斜杠命令;在其他环境中,您需要通过描述来调用该方法。fable-loop 假设所用 harness 能在不同模型上并行启动子代理;如果不具备此能力,它会串行运行,并需要额外步骤才能实现 fable-method。

运行这些 skill 会消耗更多 token 吗?

会,具体增加多少取决于加载方式。作为 skill 安装时,只有任务描述匹配才会加载正文,因此无关请求几乎不会产生额外开销。如果粘贴到系统提示中,约 2,600 个词的 AGENTS.md 会随每个请求一同发送。运行本身也会消耗更多,因为该方法要求先了解上下文再编辑、先收集证据再决策,并在完成后执行实际验证。请进行测量:在两组测试中使用 --output-format json 运行同一任务,然后比较 total_cost_usd 字段。

我应该安装哪个版本的 fable-method?为什么要固定版本?

安装前运行 git checkout v1.4.0。该 tag 的日期为 2026-07-15,截至 2026 年 8 月仍是最新版本。在此之前的九天内,仓库发布了五个版本,而 v1.4.0 直接更改了路由规则。测量期间跟踪 main,意味着控制运行和测试运行可能读取不同的指令,这会使比较失去意义。请将 tag 与结果一并记录。

仓库中的 eval 是可以信任的基准测试吗?

应将它视为该方法的变更日志,这也是作者对它的定义:“此日志用于测试方法编辑,而不是让任何人误以为它是基准测试。”文件开头说明了限制条件:每个单元运行 1 到 4 次、使用合成 fixture,并由基于同一前沿模型构建的 LLM judge 进行评估,该模型也同时充当基线。测试轮次是真实的,失败的实验也被保留,这已经超过大多数仓库的公开程度。但它仍不能衡量该方法在您的代码库上会产生什么结果,因此请自行运行两组对比。