Add Opus 5 (1M) to the curated Claude Code model list#866
Merged
Conversation
Claude Code 2.1.219 advertises Opus 5 only in 1M form (resolvedModel "claude-opus-5[1m]", via the opus[1m] alias and the default row), with the full low->max effort ladder. Add it to the curated catalog and make it BB's product default so the preloaded and probe-failure lists agree with what a successful probe reports. The selected-only opus[1m] alias was labelled "1M, Legacy" with the Opus 4.6 effort ladder, which lacks xhigh/ultracode. That alias now resolves to Opus 5, so a stored opus[1m] selection was denied efforts the model actually supports; relabel it "Current" with the xhigh-capable ladder. Opus 4.8 (1M) stays as an explicit curated row: the list is offered unfiltered, so accounts that can still run it keep the labelled entry. Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
claude-opus-5[1m]) toCLAUDE_CODE_ACTIVE_CATALOGand pointDEFAULT_CLAUDE_CODE_MODELat itopus[1m]alias as current and give it the xhigh-capable effort ladder, since it now resolves to Opus 5Ground truth
Probed the installed Claude Code (2.1.219) via the SDK's
initializationResult().modelsrather than assuming the id shape. Opus 5 is advertised only in 1M form, with the fulllow→maxladder:defaultclaude-opus-5[1m]opus[1m]claude-opus-5[1m]claude-fable-5[1m]claude-fable-5sonnetclaude-sonnet-5haikuclaude-haiku-4-5-20251001claude-opus-4-8[1m]is no longer advertised at all.Why the default moves
Claude Code's own
defaultrow already resolves toclaude-opus-5[1m], andmarkDefaultModelprefers the discovered default. So once the curated row exists, a successful probe marks Opus 5 as default regardless of BB's constant. LeavingDEFAULT_CLAUDE_CODE_MODELon Opus 4.8 would only desync the preloaded/probe-failure list from the probe result, making the picker's default visibly jump from 4.8 to Opus 5 once discovery lands.Opus 4.8 (1M) stays in the catalog rather than moving to selected-only: the curated list is deliberately offered unfiltered, so accounts that can still run it keep a labelled row.
The opus[1m] alias fix
CLAUDE_CODE_SELECTED_ONLY_CATALOGlabelledopus[1m]"Opus Alias (1M, Legacy)" withOPUS_4_6_REASONING_EFFORTS, which omits xhigh and ultracode. That alias now resolves to Opus 5, so a user with a storedopus[1m]selection was being offered a strictly narrower effort ladder than the model supports. Relabelled "Current" withCLAUDE_XHIGH_CAPABLE_REASONING_EFFORTS, matching the siblingopusentry and the probe's reportedsupportedEffortLevels.Verification
Fed the real probe output through
buildClaudeCodeModelsand the strictparseAvailableModelListthe adapter runs:Tests:
@bb/agent-providers,@bb/agent-runtime(799),@bb/app(2079),@bb/server(1254) pass; typecheck clean on all four.apps/server/test/internal/internal-skill-trees.test.tsfails identically on a stashed clean tree — pre-existing onmain, unrelated to this change.Protocol version
Not bumped. This is catalog data only: no field shapes, requiredness, or
provider.list_modelssemantics change, so a previously shipped daemon stays wire-compatible. An older daemon simply returns a probe list without the curated Opus 5 label, which the server's own fallback already supplies.🤖 Generated with Claude Code