2026 年 7 月 27 日核实

在 OpenCode 里使用 Claude Fable 5

看起来最周到的那份配置,恰恰是把它弄坏的那份。

一句话结论

OpenCode 1.17.0 及以后支持 —— 在 opencode.json 里把 model 设成 anthropic/claude-fable-5 就完事了。重要的指令是一条否定式的:不要为了自定义 name、limit 或 thinking 而加 provider.anthropic.models.claude-fable-5 这个块。自定义条目会走不到 Fable 的推理处理路径,结果是空响应,且没有任何报错。

支持状态

支持,但有一个不小的陷阱,2026 年 7 月 27 日核实。Fable 的推理支持落在一个标题为 fix(opencode): support Claude Fable reasoning 的提交里,日期 2026 年 6 月 9 日,改动在 provider transform 层,随 1.17.0 发布。模型选择是标准写法:完整 ID 是 provider_id/model_id,也就是 anthropic/claude-fable-5。陷阱记录在 issue #31738:当 claude-fable-5 不是从 models.dev catalog 解析出来的 —— 要么因为它得作为手工 provider model 添加,要么因为你的 opencode.json 用自定义的 name、limit 或 variants 覆盖了 catalog 条目 —— OpenCode 就会把它当成一个通用 Anthropic 模型,跳过自适应推理的处理。结果是:流跑十几到二十秒,agent 循环干净地退出,任何日志级别都不打,界面上什么也不渲染。

配置步骤

三步跑起来,第四步是让它一直能跑。

  1. 1

    升级到 1.17.0 或更新版本

    对 Fable 推理的处理是在 1.17.0 里加的,建立在 1.15.12 和 1.16.0 引入的 Opus 4.7+ 自适应推理控制之上。更旧的版本仍然能发出请求,但不会正确处理这个模型的推理输出。

  2. 2

    给 Anthropic provider 做认证

    跑 opencode auth login --provider anthropic,填入你的 API key。凭据会存在项目配置之外,这正是你要的 —— model ID 该放进提交进仓库的 opencode.json,key 不该。

  3. 3

    在 opencode.json 里设置模型

    加一个 model 键,值写 anthropic/claude-fable-5,旁边保留指向 https://opencode.ai/config.json 的 $schema 那一行。临时升级用命令行 -m anthropic/claude-fable-5 —— 这个 flag 的优先级高于配置文件,而配置文件又高于「上次用过的模型」。

  4. 4

    别去动 catalog 里的定义

    忍住给这个模型加 provider 块的冲动。文档里那些带 thinking 对象的 provider.anthropic.models 示例是给更老的 Claude 模型的;把那个写法照搬到 Fable 5 上,正好会触发静默失败那条路径 —— 顺带还发出了一个模型会拒绝的 budget。

坑

第一条会让你搭进一个下午,因为它压根不像个错误。

  • 空响应,零 token,没有报错

    issue #31738 把特征描述得很精确:流启动,跑八到十七秒,循环干净退出,存下来的消息 finish 是 unknown,所有分类的 token 都是零,error 是 null,thinking 和 text 部分一个都没有。它在同一个会话里是间歇性的 —— 简单 prompt 往往正常渲染,长的就死掉 —— 所以很容易被误判成网络问题。把你的模型 override 删掉,它就不出现了。

  • 用订阅要装插件,而且它会改变拒答时的行为

    想用 Claude Pro 或 Max 订阅而不是 API key,社区插件会拿 Claude Code 存的凭据注册一个基于 OAuth 的 provider。其中一个被广泛使用的插件默认开启了 Anthropic 的服务端拒答回退,所以 Fable 5 拒答时会由 Opus 4.8 在同一次往返里作答。这很方便,同时也意味着你有一部分回合是被 Opus 静默地推理和计费的。

  • 文档里那个 thinking 示例不是给这个模型的

    OpenCode 的模型配置文档里有一个 Anthropic 示例,写着 thinking 的 type enabled 和一个 budgetTokens 值。那种写法属于 Sonnet 时代的模型。Fable 5 移除了 budget_tokens,并且对 enabled 和 disabled 两种 thinking type 都返回 400,所以照抄示例换来的是报错,不是更深的推理。

成本注意事项

OpenCode 的模型解析顺序 —— 命令行 flag,然后配置文件,然后上次用过的 —— 让「按任务升级」这个习惯很容易养成:在 opencode.json 里把中档模型设成默认,只在值得的任务上敲 -m anthropic/claude-fable-5。有两笔账容易被漏掉。一是如果你的环境开了拒答回退到 Opus 4.8,那部分是按 Opus 计费的。二是 issue #31738 那种静默失败会真实消耗时间却什么也没产出,所以开长会话之前,先确认头几个回合确实渲染出了内容。

在定下来之前,先比比这些终端 agent

OpenCode、Aider、Claude Code 都能在终端里跑 Fable 5,而三者的失败方式各不相同。集成总览页把每一个到底怎么处理这个模型摆了出来。

常见问题