SSD Nodes Learn 🎉 VPS $5.50/月起
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-13

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

fable-method 将 Claude Fable 5 的工作习惯拆成代理技能。本文解释四个文件、v1.4.0 的路由门控,以及如何在 VPS 上做 A/B 测试并统计工具调用和成本。

Fable 方法实际声称的内容

Fable 方法是一组小型代理技能。它将一个模型的工作习惯记录为有序流程,以便其他模型执行相同的流程。该仓库是 Sahir619/fable-method,采用 MIT 许可证。仓库自己的单行描述是:“Claude Fable 5 的工作方式,提炼为任何模型都能运行的技能,并配有用于保持客观性的评估。”值得测试的是这句话的后半部分。

文本文件是否真的记录了特定模型的思考方式,Anthropic 之外的任何人都无法验证。但更便宜的模型读取该文本文件后是否会表现不同,您可以在一台 VPS 上用一个下午自行检查。下面所有内容都围绕这一测量展开:使用和不使用该方法,各执行一次相同任务,并统计工具调用次数和成本。

如果您不了解 skill 一词,请先阅读代理技能的实际含义:它是一个包含 SKILL.md 文件的目录,该文件的 frontmatter 描述会告诉代理何时加载正文。该仓库所使用的模型介绍请参阅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-judgefable-loopfable-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。其中包含两个门槛和七个编号步骤,规则具体到足以据此进行审查。

首先是琐碎变更门槛:如果变更只涉及一个文件、执行内容约 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 diffgit status 建立事实基准,重新执行报告声称已经执行的每项验证,并检查一份明确列出的欺诈清单:弱化检查、虚假完成、范围蔓延、未经授权的操作、违背规范,以及残留垃圾。它返回 VERIFIED、VERIFIED WITH CAVEATS 或 REFUTED;对于无法重现的内容,它会标记为 UNVERIFIABLE,而不是默认其通过。安装程序最后一行也指向这一点:“试用方法:打开 Claude Code,在任意代理声称工作已完成后输入 /fable-judge。”

fable-domain 生成带有陷阱 fixture 和冒烟评估的领域适配器包。它提供 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 中的 description 用于让代理仅在任务匹配时加载正文,因此已安装的 skill 在触发前几乎不产生开销。相反,如果将 AGENTS.md 粘贴到 system prompt 中,那么您发送的每个请求都会包含这 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 无法泄漏到测试中。裸模式不会使用订阅登录,因此请先从 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 次运行。其他三行各基于 2 次运行。仓库本身也在日志顶部的长期限制说明中明确写道:“整体样本量较小(每个单元格 1-4 次运行);使用 LLM 评审(比较多个输出时采用盲测,但评审模型与作为基线的模型相同);使用合成 fixture;研究基准事实仅在运行日期时有效。”它还更直接地写道:“保留此日志是为了测试方法修改,而不是让任何人把它误认为基准测试。”

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

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

打包部分带有“照搬”痕迹

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

文章的论述超出了证据范围。“How Claude Fable 5 worked”声称说明模型内部如何工作,但 Anthropic 之外没有人能够验证这一点。仓库自己的核心表述反而削弱了这一说法:“质量取决于结构、证据和诚实,而不是模型。”如果质量取决于结构,那么来源叙事只是装饰。该流程本身即可成立,不需要一套起源神话。

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

八个领域适配器只是评测未覆盖的广度。日志中只有两个适配器出现过:第 9 轮的 marketing 和第 12 轮的 devops。finance、legal、design 和 data 适配器都没有对应的评测轮次。面向您所在领域的适配器可能仍然不错,但它只是作者的草稿,并不是经过陷阱测试固件验证的版本。

此外,安装程序与仓库对其实际提供内容的描述不一致,只将四项技能中的三项复制到 ~/.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 则假设运行环境能够在不同模型上并行启动多个子代理;如果不具备此能力,它会串行运行,并通过额外步骤提供 fable-method

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

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

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

安装前运行 git checkout v1.4.0。该标签的日期为 2026-07-15,截至 August 2026 仍是最新版本。在此之前的九天内,仓库发布了五个版本,其中 v1.4.0 直接修改了路由规则。测量期间跟踪 main 会导致对照运行和测试运行读取不同的指令,从而使比较失去意义。请将标签与结果一并记录。

仓库中的 eval 是值得信任的基准测试吗?

请将其视为该方法的变更日志,这也是作者对它的称呼:“此日志用于测试方法编辑,而不是让任何人将其误认为基准测试。”文件开头说明了其局限性:每个单元运行 1 到 4 次、使用合成测试固件,并采用基于同一前沿模型构建的 LLM 评审器,而该模型同时也作为基线。各轮测试是真实执行的,失败的实验也被保留下来,这已经超过大多数仓库公开的内容。但它仍无法测量该方法在您自己的代码库上会产生什么结果,因此请自行运行两组对比测试。