Skip to content

feat(claude): add Claude Fable 5.1 model - #9078

Merged
juliusmarminge merged 3 commits into
pingdotgg:mainfrom
q1:feat/claude-fable-5-1
Sep 1, 2026
Merged

feat(claude): add Claude Fable 5.1 model#9078
juliusmarminge merged 3 commits into
pingdotgg:mainfrom
q1:feat/claude-fable-5-1

Conversation

@q1

@q1 q1 commented Sep 1, 2026

Copy link
Copy Markdown

Supersedes #9077 (closed by @juliusmarminge). The catalog commit here is #9077's verbatim, with his authorship; the follow-up commits add what it left for later.

What Changed

  • Catalog entry claude-fable-5-1 ("Claude Fable 5.1") above Fable 5, gated on Claude Code v2.1.257 — the first published build with Fable 5.1 (the changelog entry is under 2.1.257; the docs' "2.1.255" never shipped to npm, releases jump 2.1.252 → 2.1.257). Same Fable-style effort ladder (low → max, ultracode, ultrathink, default high) and 200k / 1M context option (1M default). No fastMode — fast mode is Opus 5 / 4.8 only. xhigh is not downgraded to max. Older CLIs get the usual "too old, upgrade to v2.1.257" nudge first in the upgrade-message chain.
  • Model manifest: claude-fable-5-1 is current and claude-fable-5 moves to legacy (per review — it is superseded, same treatment as Opus 4.8). Legacy classification is manifest-driven, so without this line the new model would render under "Legacy models". Note the remote manifest on main propagates to every install immediately, so between merge and a release that carries the catalog entry, installs without Fable 5.1 will see Fable 5 in the legacy section (still selectable).
  • Slug aliases fable, fable-5.1, claude-fable-5.1claude-fable-5-1, matching Claude Code's own fable alias (/model fable resolves to Fable 5.1 as of 2.1.257). Existing aliases untouched.

No SDK bump: Claude Code is spawned from the user's install, and the pinned @anthropic-ai/claude-agent-sdk 0.3.170 drives 2.1.257 fine (verified below). Default model is unchanged: the picker's fallback order (isDefault → first listed → DEFAULT_MODEL_BY_PROVIDER) already had Fable 5 first, so the first-listed slot moving from Fable 5 to 5.1 is the same behavior as when Opus 5 / Fable 5 landed.

Why

Claude Code 2.1.257 makes Fable 5.1 the default Fable model. Without a catalog entry it cannot be selected from T3 Code, and users on a current CLI have no way to get to it. Fable 5.1 keeps Fable 5's per-token price with cache reads at $0.25/MTok, 1M context by default (Claude Code strips the [1m] suffix for it, so resolveClaudeApiModelId works unchanged), and the same effort ladder.

Testing

  • ProviderRegistry.test.ts: shown at v2.1.257, hidden with the Fable 5.1 upgrade message at v2.1.256; existing Opus 5 / Fable 5 gating tests still pass.
  • ClaudeAdapter.test.ts: xhigh reaches the SDK unchanged for claude-fable-5-1.
  • ModelManifest.test.ts (5.1 current, 5 legacy) and packages/shared/src/model.test.ts (fable alias).
  • tsgo --noEmit for apps/server, packages/contracts, packages/shared; vp lint and vp fmt --check clean on the touched files. CI green on the previous push.
  • End to end on macOS with Claude Code 2.1.257 (Claude Max): booted the dev server from this branch against a scratch home, confirmed server.getConfig lists claude-fable-5-1 as non-legacy with status ready and no upgrade message, created a thread on it with effort: low / contextWindow: 1m, and ran a turn. The turn completed, the assistant replied, context-window.updated reported maxTokens: 1000000, and the Claude Code transcript records "model":"claude-fable-5-1".

Notes

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (n/a — no UI code changed)
  • I included a video for animation/interaction changes (n/a)

Claude Fable 5.1 via Claude Code (catalog commit: gpt-5.6-sol via Codex, from #9077).

🤖 Generated with Claude Code


Note

Low Risk
Catalog, manifest, and alias changes only; no auth or session logic. Remote manifest may label Fable 5 legacy before releases ship the new catalog entry.

Overview
Adds Claude Fable 5.1 (claude-fable-5-1) to the Claude agent catalog so users on Claude Code v2.1.257+ can select it from the model picker, with the same reasoning ladder and 200k/1M context options as Fable 5. xhigh effort is passed through for this model (via normalizeClaudeCliEffort), and older CLIs see a Fable 5.1 upgrade nudge at the top of the existing version-message chain.

The bundled model manifest treats Fable 5.1 as current and Fable 5 as legacy (superseded). Slug aliases fable, fable-5.1, and claude-fable-5.1 resolve to claude-fable-5-1, aligned with Claude Code’s /model fable behavior.

Tests cover version gating, manifest legacy flags, alias normalization, and SDK effort forwarding for Fable 5.1.

Reviewed by Cursor Bugbot for commit 267b090. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add claude-fable-5-1 model to Claude provider with version gating

  • Registers a new built-in model claude-fable-5-1 in CLAUDE_MODEL_CATALOG with effort and contextWindow option descriptors, gated to CLI version >= 2.1.257 via supportsClaudeFable51.
  • Extends normalizeClaudeCliEffort to preserve xhigh effort for claude-fable-5-1 instead of mapping it to max.
  • Adds slug aliases fable, fable-5.1, and claude-fable-5.1 mapping to claude-fable-5-1 in MODEL_SLUG_ALIASES_BY_PROVIDER.
  • Replaces claude-fable-5 with claude-fable-5-1 in the non-legacy models list in model-manifest.json, and checkClaudeProviderStatus emits an upgrade message when the CLI is too old.
  • Behavioral Change: claude-fable-5 is no longer listed as a current model in the bundled manifest; claude-fable-5-1 takes its place, so systems relying on that manifest will treat claude-fable-5 as legacy.

Macroscope summarized 267b090.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Sep 1, 2026
@q1
q1 force-pushed the feat/claude-fable-5-1 branch from d02fd03 to efc77fe Compare September 1, 2026 18:49
@q1 q1 changed the title feat(claude): add Claude Fable 5.1 model feat(claude): add Claude Fable 5.1 model with manifest entry and aliases Sep 1, 2026
@q1
q1 force-pushed the feat/claude-fable-5-1 branch from efc77fe to 7a26b24 Compare September 1, 2026 18:52
@q1 q1 changed the title feat(claude): add Claude Fable 5.1 model with manifest entry and aliases feat(claude): keep Claude Fable 5.1 out of the legacy section and add fable aliases Sep 1, 2026
"gpt-daybreak-blue-latest",
"gpt-daybreak-red-latest"
],
"claudeAgent": ["claude-fable-5", "claude-opus-5", "claude-sonnet-5"]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shouldn't 5 be demoted to legacy now that it's superseded by 5.1?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 267b090: claude-fable-5 is out of the current list, so it lands under Legacy models like Opus 4.8. One heads-up since the manifest is fetched live from main: between merge and a release that carries the catalog entry, installs without Fable 5.1 will show Fable 5 in the legacy section (still selectable). Also rebuilt the branch so your catalog change is a single commit under your authorship with the manifest/alias follow-ups on top.

@macroscopeapp

macroscopeapp Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — Adds a new user-facing Claude model with version-gated runtime behavior, new aliases, and changed legacy classification. Because it becomes the first fallback model for supported Claude installations and changes effective product defaults, human review is required.

You can add or adjust custom eligibility rules. Learn more.

@q1
q1 force-pushed the feat/claude-fable-5-1 branch from 7a26b24 to 60cb5f2 Compare September 1, 2026 19:03
@q1 q1 changed the title feat(claude): keep Claude Fable 5.1 out of the legacy section and add fable aliases feat(claude): add Claude Fable 5.1 model Sep 1, 2026
juliusmarminge and others added 3 commits September 1, 2026 12:04
… fable aliases

Follow-up to the Claude Fable 5.1 catalog entry. Legacy classification is
manifest-driven, so with the catalog entry alone claude-fable-5-1 renders
under "Legacy models" until model-manifest.json names it. List it as current
(Fable 5 stays current until a release ships the entry, since the remote
manifest propagates immediately), add fable / fable-5.1 / claude-fable-5.1
slug aliases matching Claude Code's own fable alias, and cover xhigh effort
passthrough for the new model in the adapter test.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Fable 5.1 supersedes Fable 5, so drop claude-fable-5 from the manifest's
current list and let it render under "Legacy models" like Opus 4.8.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@q1
q1 force-pushed the feat/claude-fable-5-1 branch from 60cb5f2 to 267b090 Compare September 1, 2026 19:04
@q1

q1 commented Sep 1, 2026

Copy link
Copy Markdown
Author

Ready for another look.

  • Addressed the review: claude-fable-5 is demoted to legacy in the manifest (267b090), test updated.
  • Branch is three commits on main: the feat(claude): add Claude Fable 5.1 #9077 catalog change as a single commit under @juliusmarminge's authorship, then the manifest/alias follow-up, then the demotion. Net diff is the seven files in the description; none of the usage-pricing experiment from feat(claude): add Claude Fable 5.1 #9077's branch is included.
  • Local: touched tests, typecheck, lint, and fmt pass on this exact tree. CI went green on the previous head; the new head is waiting on the first-contributor workflow approval again.

Happy to squash to one commit if you'd prefer that on merge.

@juliusmarminge
juliusmarminge merged commit c17d02c into pingdotgg:main Sep 1, 2026
26 checks passed
fireboltdude1357 added a commit to fireboltdude1357/t3code that referenced this pull request Sep 1, 2026
Catalog entry, Claude Code 2.1.257 gate, manifest listing, and fable slug
aliases. Byte-identical to upstream pingdotgg#9077 + pingdotgg#9078 so it drops out cleanly
once those merge.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Andrey170170 pushed a commit to Andrey170170/t3code that referenced this pull request Sep 1, 2026
NoahHendrickson pushed a commit to NoahHendrickson/t3code that referenced this pull request Sep 1, 2026
NoahHendrickson added a commit to NoahHendrickson/t3code that referenced this pull request Sep 1, 2026
feat(claude): add Claude Fable 5.1 model (cherry-pick upstream pingdotgg#9078)
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 1, 2026
## What's Changed
* Add mobile composer attachment menu with video support by @juliusmarminge in pingdotgg/t3code#8843
* fix(web): restore unified activity logs and composer banners by @t3dotgg in pingdotgg/t3code#8734
* fix(web): address composer banner review follow-ups by @juliusmarminge in pingdotgg/t3code#8850
* fix(web): widen sync banners and simplify the working timer by @juliusmarminge in pingdotgg/t3code#8855
* fix(preview): improve browser recording quality by @maria-rcks in pingdotgg/t3code#8839
* fix(web): mark pull request links as external by @juliusmarminge in pingdotgg/t3code#8856
* fix(mobile): replace Callstack glass with Expo glass by @juliusmarminge in pingdotgg/t3code#8862
* fix(server): skip IDE detection in Claude probes by @yashranaway in pingdotgg/t3code#8634
* chore(macroscope): review diagnostic overrides by @t3-code[bot] in pingdotgg/t3code#8917
* fix(contracts): accept CLI event origins by @nateEc in pingdotgg/t3code#8905
* fix(web): hide invalid slash skill completions by @nateEc in pingdotgg/t3code#8904
* fix(mobile): defer draft navigation until submission completes by @juliusmarminge in pingdotgg/t3code#8914
* chore: disable CodeRabbit review status by @juliusmarminge in pingdotgg/t3code#8933
* Delete app.json by @juliusmarminge in pingdotgg/t3code#8934
* fix(web): show scrollbar for wide markdown tables by @UtkarshUsername in pingdotgg/t3code#8868
* fix(mobile): shimmer active tool rows by @juliusmarminge in pingdotgg/t3code#8932
* chore(deps): bump Electron to 43.4.1 by @StiensWout in pingdotgg/t3code#8626
* fix(chat): smooth worktree setup status by @juliusmarminge in pingdotgg/t3code#8922
* feat(mobile): add video playback with native iOS controls by @juliusmarminge in pingdotgg/t3code#8919
* fix(web): prevent chat metadata overlap by @MatthewFeroz in pingdotgg/t3code#8851
* fix(server): preserve usage cache outside walked roots by @Lucenx9 in pingdotgg/t3code#8540
* feat(mobile): add native image and PDF previews by @juliusmarminge in pingdotgg/t3code#8959
* fix(server): allow long thread IDs in HTTP routes by @nateEc in pingdotgg/t3code#8898
* fix(shared): preserve Windows shell PATH priority by @UtkarshUsername in pingdotgg/t3code#8748
* fix(web): make WSL settings searchable by @UtkarshUsername in pingdotgg/t3code#8881
* feat(web): add expand/collapse all control to the files surface by @UtkarshUsername in pingdotgg/t3code#8889
* feat(mobile): upload attachments while composing by @juliusmarminge in pingdotgg/t3code#8978
* fix(chat): keep agent activity visible between actions by @maria-rcks in pingdotgg/t3code#8984
* fix(server): isolate remote web session cookies by @Bil0000 in pingdotgg/t3code#8085
* feat(pull-requests): link GitHub references in markdown by @maria-rcks in pingdotgg/t3code#8812
* perf(server): reduce frequency of full tool call output being loaded into memory from db by @t3dotgg in pingdotgg/t3code#8988
* feat(web): add pull request list filters by @maria-rcks in pingdotgg/t3code#8809
* feat(web): search individual settings by detail by @maria-rcks in pingdotgg/t3code#8831
* feat(client): render viewed images in work logs by @maria-rcks in pingdotgg/t3code#8936
* fix(client): use package import for markdown image helpers by @juliusmarminge in pingdotgg/t3code#9010
* test: remove static presentation snapshots by @t3-code[bot] in pingdotgg/t3code#9008
* perf(server): bound snapshot activity payload memory by @t3dotgg in pingdotgg/t3code#9000
* perf(server): cut idle CPU use and stop provider event leaks by @t3dotgg in pingdotgg/t3code#8187
* perf(server): scan only appended transcript bytes for usage summaries by @StiensWout in pingdotgg/t3code#9024
* perf(server): cut chatty tool-update frames by 90% by @Adamulek123 in pingdotgg/t3code#8368
* fix(server): settle threads server-side by @t3dotgg in pingdotgg/t3code#8600
* fix(clients): dedupe skills in composer menus by @Adamulek123 in pingdotgg/t3code#8043
* fix(server): stop OpenCode child sessions by @t3dotgg in pingdotgg/t3code#9005
* perf(web): defer pull request line stats until visible by @Adamulek123 in pingdotgg/t3code#6471
* perf(server): skip full-message reads while streaming by @t3dotgg in pingdotgg/t3code#9032
* perf(client-runtime): halve server config bootstrap traffic by @Adamulek123 in pingdotgg/t3code#8367
* fix(web): align un-settle banner action by @StiensWout in pingdotgg/t3code#9033
* fix(web): block type-to-focus behind open dialogs by @Lucenx9 in pingdotgg/t3code#8139
* feat(shortcuts): copy active thread reference by @maria-rcks in pingdotgg/t3code#8994
* fix(mobile): keep thread scroll bounds current after animations by @juliusmarminge in pingdotgg/t3code#9013
* fix(server): cache project favicon resolution by @willsheldon in pingdotgg/t3code#9080
* feat(claude): add Claude Fable 5.1 model by @q1 in pingdotgg/t3code#9078
* fix(preview): restore recording and macOS rendering after Electron 43 by @StiensWout in pingdotgg/t3code#9001
* feat(desktop): add configurable quit shortcut confirmation by @juliusmarminge in pingdotgg/t3code#9076
* feat(web): open project settings from thread menus by @SunkenInTime in pingdotgg/t3code#8925
* fix(chat): reuse one row for live activity by @maria-rcks in pingdotgg/t3code#9062
* feat(models): discover Claude models from remote manifest by @juliusmarminge in pingdotgg/t3code#9084
* Revert "fix(chat): reuse one row for live activity" by @maria-rcks in pingdotgg/t3code#9096
* fix(web): sync sidebar PR state from open panel by @t3-code[bot] in pingdotgg/t3code#9092
* fix(web): changing projects no longer creates a draft by @extoci in pingdotgg/t3code#9097
* fix(web): keep theme placeholder text dimmer than entered text by @flamboh in pingdotgg/t3code#9104
* fix(web): keep the selected environment when changing projects by @t3dotgg in pingdotgg/t3code#9102

## New Contributors
* @willsheldon made their first contribution in pingdotgg/t3code#9080
* @q1 made their first contribution in pingdotgg/t3code#9078

**Full Changelog**: pingdotgg/t3code@v0.0.37...v0.0.38

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants