Skip to content

fix(desktop): show readable Claude Code model names and descriptions - #8053

Merged
wpfleger96 merged 8 commits into
mainfrom
duncan/claude-code-model-labels
Oct 2, 2026
Merged

wpfleger96 merged 8 commits into
mainfrom
duncan/claude-code-model-labels

Conversation

@wpfleger96

@wpfleger96 wpfleger96 commented Oct 2, 2026 •

Copy link
Copy Markdown
Member

Claude Code agents' model dropdown showed raw IDs (opus[1m], claude-fable-5-1[1m], haiku) and its effort choices showed low/xhigh. Claude Code's ACP adapter labels config options and choices with name, but Buzz read displayName, which no adapter sends.

Adapter labels and descriptions

  • normalize_agent_models reads name, keeps each model's description, and uses the model option's currentValue as the agent's default model (ahead of the unstable currentModelId).
  • parse_config_options / parse_option_values read name for option and choice labels, so effort shows "Low"/"Xhigh".
  • The create (PersonaModelCombobox) and edit (PersonaDropdownField) model pickers show the description as a muted second line, through both option builders (modelDropdownOptions and buildTemplateModelDropdownOptions).

Generated names for full Claude model IDs

  • Claude Code's own names drop versions ("Sonnet" for claude-sonnet-5). The desktop's Databricks label grammar already parses a bare Claude ID once its wrapper is removed, so that body parse is exposed as generateBareModelLabel; Databricks entry points and outputs are unchanged.
  • For the claude runtime, claudeCodeModelLabel formats full IDs and keeps a [1m] suffix as "(1M context)". Short names (opus, haiku, opus[1m]), unknown bracket suffixes, and IDs containing any non-ASCII character keep the adapter's name.
  • This applies to the model dropdowns in the create and edit dialogs and the Agent defaults editor. The "Default model (…)" row appears in the edit dialog and the Agent defaults editor; the create dialog still requires an explicit model and shows no Default row. Model labels on agent cards are unchanged.
  • In the edit dialog, the Default row keeps the discovered label (e.g. "Default model (Opus)") unless a global default model is set, in which case it shows that model. When the adapter's default is its own default entry (e.g. "Default (recommended)"), the row reads plain "Default model" and keeps that entry's description.

models debug command

  • The harness's readable models output reads option and choice labels from name and the option id from id (falling back to configId), so it no longer prints raw IDs for Claude Code. JSON output is unchanged.
Model ID Before After
opus[1m] opus[1m] Opus · Opus with 1M context · …
claude-fable-5-1[1m] claude-fable-5-1[1m] Claude Fable 5.1 (1M context) · Fable 5.1 · …
claude-sonnet-5 claude-sonnet-5 Claude Sonnet 5 · Sonnet 5 · …
claude-sonnet-4-6 claude-sonnet-4-6 Claude Sonnet 4.6 · Previous Sonnet version
claude-sonnet-4-6[1m] claude-sonnet-4-6[1m] Claude Sonnet 4.6 (1M context) · Sonnet 4.6 for long sessions · …
haiku haiku Haiku · Haiku 4.5 · …

🤖

claude-agent-acp labels config options with `name`, but discovery and the
session-config parser read `displayName`, so model rows and effort choices
showed raw IDs ("opus[1m]", "low"). Discovery also dropped each model's
description and ignored the stable option's `currentValue` as the default.
The create and edit pickers now show the description as a second line.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
@wpfleger96
wpfleger96 requested a review from a team as a code owner October 2, 2026 15:07
@wpfleger96
wpfleger96 deployed to codex-review October 2, 2026 15:08 — with GitHub Actions Active
@github-actions github-actions Bot added the codex-security-review-current The posted Codex security review matches its recorded range. label Oct 2, 2026
@github-actions

github-actions Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

🔐 Codex Security Review

Note: This is an automated, security-focused review generated by Codex.
Use it as a supplement to human review; false positives are possible.

Scope

  • Exact PR diff: 133fb9869228dab4c00cb2b9e259bf834a55dbf7...473e97b9469a50e4f4eb851449ff8e0c689e2b50
  • Model: gpt-5.6-sol

💡 Click "edited" above to see earlier reviews for this PR.


Review Summary

Overall Risk: LOW

One backward-compatibility regression affects ACP adapters using the previously supported displayName field.

Findings

[LOW] Preserve displayName compatibility when normalizing ACP models

  • Category: Reliability
  • Location: desktop/src-tauri/src/commands/agent_models.rs:746 (source)
  • Description: Stable configOptions now read only name, although the existing supported ACP shape uses displayName. These entries are added to seen_ids before unstable models are processed, so a matching unstable entry cannot restore its human-readable name.
  • Impact: Affected model pickers display raw, potentially cryptic model IDs instead of adapter-provided labels. The same field replacement in session configuration also removes friendly effort labels.
  • Recommendation: Prefer name but fall back to displayName in model normalization, session configuration parsing, and human-readable CLI output. Add mixed-schema compatibility tests.

Notes

  • Per review constraints, no builds or tests were executed.

Generated by Codex Security Review |
Requested by: @wpfleger96 |
Workflow run

The Edit dialog always passes `globalModel`, which routes options through
`buildTemplateModelDropdownOptions`; that mapping dropped `description`.
Mounted tests open the real create and edit menus.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
@github-actions github-actions Bot removed the codex-security-review-current The posted Codex security review matches its recorded range. label Oct 2, 2026
@wpfleger96
wpfleger96 deployed to codex-review October 2, 2026 15:28 — with GitHub Actions Active
…tter

Claude Code's own names drop versions ("Sonnet" for claude-sonnet-5). The
Databricks label grammar already parses bare Claude ids once its wrapper is
removed, so expose that body parse and use it for the claude runtime, keeping
[1m] as "(1M context)". Short names like opus stay as the adapter labels them.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
@github-actions github-actions Bot added codex-security-review-current The posted Codex security review matches its recorded range. and removed codex-security-review-current The posted Codex security review matches its recorded range. labels Oct 2, 2026
@wpfleger96
wpfleger96 deployed to codex-review October 2, 2026 15:32 — with GitHub Actions Active
@wpfleger96 wpfleger96 changed the title fix(desktop): show Claude Code model names and descriptions fix(desktop): show readable Claude Code model names and descriptions Oct 2, 2026
@github-actions github-actions Bot added the codex-security-review-current The posted Codex security review matches its recorded range. label Oct 2, 2026
Duncan and others added 2 commits October 2, 2026 11:40
The readable models output read displayName and configId, which no ACP adapter sends, so it printed raw IDs. The doc comment and test data carried the same wrong field name.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
trim() strips Unicode whitespace before the formatter's ASCII check, so padded ids got generated labels. Reject on the raw id, including the default row, and cover the hook's runtime wiring with a mounted test.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
@wpfleger96
wpfleger96 deployed to codex-review October 2, 2026 16:08 — with GitHub Actions Active
@github-actions github-actions Bot removed the codex-security-review-current The posted Codex security review matches its recorded range. label Oct 2, 2026
The template option builder relabeled every empty-ID option with the inherited label, which is the generic "Default model" when no global model is set, hiding the adapter's "Default model (Opus)".

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
@wpfleger96
wpfleger96 deployed to codex-review October 2, 2026 17:05 — with GitHub Actions Active
@github-actions github-actions Bot added the codex-security-review-current The posted Codex security review matches its recorded range. label Oct 2, 2026

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

No material correctness or security blockers found. One optional wording suggestion is inline; this is a comment review, not approval.

Reviewed head 39e8e7d69db7bed3c81a3fa67d3bb35d44294cf2 against base/merge-base 448407a972ca9da0c1e13d49ee2c2170821be8a2.

  • Traced discovery, default precedence, and create/edit/defaults label propagation. Targeted source-extracted probes preserved Databricks grammar outputs on 378 inputs and checked Claude fallback/ID preservation; these are not package-suite or live-UI results.
  • The existing bot’s Cursor compatibility claim does not hold for Cursor 2026.10.01-e373342: its ACP builders translate internal displayName into wire name (buildModelSelectOption, buildVariantModelConfigOptions, getConfigOptionValues in 3351.index.js, published bundle). Claude v0.36.1 and the ACP v1 schema also use name. Other adapter/version combinations were not exhaustively checked.
  • Current CI has passed Rust unit tests/lint and desktop Windows/macOS builds; Desktop Core, remaining smoke/integration jobs, and Windows Rust are still running. Let those finish. No native picker or VoiceOver session was exercised in this review.

Comment thread desktop/src/features/agents/ui/usePersonaModelDiscovery.ts
When the adapter's default is its own "default" entry (named e.g. "Default (recommended)"), the row read "Default model (Default (recommended))". Show plain "Default model" and keep that entry's description.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
…del-labels

* origin/main:
  fix(acp): steer running turns with edited mentions (#6132)
  fix(mcp): support Goose discovery handshake (#8037)
  test(agent): synchronize handoff steering with tool approval (#8042)

Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
@github-actions github-actions Bot removed the codex-security-review-current The posted Codex security review matches its recorded range. label Oct 2, 2026
@wpfleger96
wpfleger96 deployed to codex-review October 2, 2026 17:42 — with GitHub Actions Active
@github-actions github-actions Bot added the codex-security-review-current The posted Codex security review matches its recorded range. label Oct 2, 2026
@wpfleger96
wpfleger96 enabled auto-merge (squash) October 2, 2026 17:58
@wpfleger96
wpfleger96 merged commit 5a4b2d3 into main Oct 2, 2026
198 of 205 checks passed
@wpfleger96
wpfleger96 deleted the duncan/claude-code-model-labels branch October 2, 2026 19:29
ArnaudLafosse92100 added a commit to ArnaudLafosse92100/buzz that referenced this pull request Oct 4, 2026
Brings 16 upstream block/buzz commits (a14107a) into the fork
integration branch: ACP mention/edit steering (block#6131, block#6132), quiet-host
recovery wakes (block#7459), relay NIP-FI shadow mode (block#8034, block#8062), writer
lock foundations (block#7706), Goose MCP handshake (block#8037), Claude model names
(block#8053), summarized thinking (block#8051) and mobile iOS changes.

Merged cleanly without textual conflicts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Arnoldinh0 <arnaudlafosse92100@gmail.com>

This branch was successfully deployed

1 active deployment
codex-review — 473e97b9 Deployed Oct 2, 2026 by wpfleger96 via Run Codex Security Review #6586
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

codex-security-review-current The posted Codex security review matches its recorded range.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants