Skip to content

fix(daemon): add current-generation Claude models to the picker#6051

Open
sphinxcode wants to merge 1 commit into
nexu-io:mainfrom
sphinxcode:fix/claude-current-gen-models
Open

fix(daemon): add current-generation Claude models to the picker#6051
sphinxcode wants to merge 1 commit into
nexu-io:mainfrom
sphinxcode:fix/claude-current-gen-models

Conversation

@sphinxcode

Copy link
Copy Markdown

Why

While working on #6046 (Claude Code reasoning-effort passthrough), a user asked why Fable 5 wasn't selectable in the model picker. Confirmed it's a real model the installed CLI supports fine (claude --model claude-fable-5 completes a real turn) -- it's just missing from claudeAgentDef's hardcoded fallbackModels, which was stuck on the 4.5 generation (claude-opus-4-5 / claude-sonnet-4-5 / claude-haiku-4-5). Opus 4.8, Sonnet 5, and the whole 4.6/4.7 tier were all missing too.

This PR is independent of #6046 -- it only touches the static model list, not the reasoning-effort logic -- so it's based directly on main rather than stacked on that branch.

What users will see

  • Claude Code's model dropdown in the model switcher now offers claude-fable-5, claude-opus-4-8, claude-sonnet-5, claude-haiku-4-5-20251001, claude-opus-4-7, claude-sonnet-4-6, and claude-opus-4-6, in addition to the existing aliases and 4.5-generation entries (kept for anyone still pinned to them).

Surface area

  • UI -- more entries appear in the existing model dropdown for Claude Code. No new UI code; this only changes what a static, already-rendered list contains.
  • Default behavior change -- not checked: the default model choice (sonnet alias / DEFAULT_MODEL_OPTION) is unchanged; this is purely additive to the selectable list.

Screenshots

Same limitation as #6046 -- no browser/screenshot tool available in the environment I used. Verified via the daemon's own /api/agents response instead, on a local build of this branch:

["default","sonnet","opus","haiku","claude-fable-5","claude-opus-4-8","claude-sonnet-5","claude-haiku-4-5-20251001","claude-opus-4-7","claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-5","claude-sonnet-4-5","claude-haiku-4-5"]

Bug fix verification

  • Test path: apps/daemon/tests/runtimes/agent-args.test.ts -- claude fallback models include the current generation, not just 4.5
  • Went red on main / green on this branch? Yes -- on main (f2760fd), claude.fallbackModels only contains the 4.5-generation ids, so this test's assertions for claude-fable-5 / claude-opus-4-8 / claude-sonnet-5 / etc. fail; they pass on this branch.

Validation

  • pnpm --filter @open-design/daemon test (vitest, this file only) -- 46/46 passed
  • tsc -p tsconfig.json --noEmit and tsc -p tsconfig.tests.json --noEmit (apps/daemon) -- clean
  • Manually confirmed claude --model claude-fable-5 completes a real, successful turn against the actual Anthropic API before adding it to the list
  • Rebuilt and locally deployed this exact branch and confirmed via /api/agents that all seven new ids are now served for claude, matching the screenshot section above

claudeAgentDef's fallbackModels was stuck on the 4.5 generation
(claude-opus-4-5/claude-sonnet-4-5/claude-haiku-4-5) -- Fable 5, Opus 4.8,
Sonnet 5, and the 4.6/4.7 tier were all missing, even though the CLI
itself supports them (confirmed live: `claude --model claude-fable-5`
completes a real turn) and clampClaudeReasoning already encodes per-model
effort support for exactly these names.

Added the current generation to the fallback list -- kept the old 4.5
entries for anyone still pinned to them, since this list is additive
hints, not an exhaustive catalog. Added a test asserting every model
clampClaudeReasoning's matrix names by id is also selectable, so the two
lists can't drift apart again silently.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@lefarcen

Copy link
Copy Markdown
Contributor

Thanks @sphinxcode — keeping the Claude Code picker aligned with the currently supported model generation is a useful fix. I’m routing this through reviewer assignment now, and because this changes a user-facing runtime capability we’ll also queue it for QA before merge.

@lefarcen
lefarcen requested a review from mrcfps July 24, 2026 09:14
@lefarcen lefarcen added size/S PR changes 20-100 lines risk/high High risk: apps/desktop, daemon, auth, migration, workflows, package deps type/bugfix Bug fix needs-validation Runtime change detected; needs human or /explore agent validation. labels Jul 24, 2026

@mrcfps mrcfps left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks @sphinxcode — the picker additions and focused regression coverage look sound, and the targeted daemon tests, daemon typecheck, and repository guard all pass locally. I left one non-blocking maintainability note about a synchronization claim that is not true on this standalone head; the functional change itself looks solid. Appreciate the focused fix and clear verification. 🙏

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

Comment on lines 9 to +11
{ id: 'opus', label: 'Opus (alias)' },
{ id: 'haiku', label: 'Haiku (alias)' },
// Current generation. Kept in sync with the model support matrix

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Non-blocking: clampClaudeReasoning is not present anywhere on this PR head; shared.ts only defines clampCodexReasoning. These changed lines therefore document a synchronization invariant that cannot currently be followed or verified, and the new test hard-codes the same model IDs rather than deriving them from the referenced matrix. That matters because a future maintainer may reasonably assume the picker is already coupled to an existing source of truth. Since this PR is intentionally independent of #6046, please either rewrite this comment and the test rationale to describe an explicit supported-model list, or use a shared Claude model constant that the picker and future clamp can both consume when that clamp lands.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

@lefarcen

Copy link
Copy Markdown
Contributor

Thanks @sphinxcode@mrcfps’s maintainability note on the sync comment looks like the only follow-up worth addressing on this head right now. Once that wording is tightened up (or moved behind a shared constant later), this should be in good shape for the next pass.

💡 To drive this PR to merge hands-free, paste this to your AI coding agent (Claude Code / Codex / opencode / Cursor …):
Take over nexu-io/open-design#6051 until it merges — read https://raw.githubusercontent.com/nexu-io/looper/main/skills/pr-takeover/SKILL.md and follow it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-validation Runtime change detected; needs human or /explore agent validation. risk/high High risk: apps/desktop, daemon, auth, migration, workflows, package deps size/S PR changes 20-100 lines type/bugfix Bug fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants