cmux NEXT: Chief Settings as grouped glass cards, names not ids, a styled last turn
What
The Chief Settings popover (the header's name pill) was cramped pickers, raw ids (claude-sr2-pipe, claude-opus-5-5) and a Diagnostics text dump (#89 item 2). It is now a settings page of grouped glass cards, wider (380 pt), each card only where it has something real:
- Identity: avatar (menu to change it), name, where the Chief runs (display only), and the pet rows (Show Chief Pet, its character) that used to sit in a separate Appearance section.
- Brain: Backend, Model, Effort and Speed, each with a one-line "what this means" under it. Every value reads by a name: official engines keep their titles, models their catalog names, and any other id is made readable by the new
ChiefNames(claude-sr2-pipeโ "Claude (SR2 Pipe)",claude-crโ "Claude (CodeRouter)",claude-opus-5-5โ "Claude Opus 5.5"). The raw id stays only in the popup item's tooltip. - Memory (this Mac's brain): what the Chief remembers, and Show Memory.
- Diagnostics: a styled last turn: the engine by name, when it ended, then four measures (time, cost or tokens when the harness gives no price, cache %, tool calls with failures), the turn's error if it failed, Show Traces, and the recent replies behind the closed disclosure.
Behavior, Permissions and Notifications have no per-Chief setting on base, so they get no card (follow-up list below). The cards use the sidebar cards' glass (CardSurfaceView: a veil with the top-lit rim, opaque under Reduce Transparency) over the popover's overlay glass, and the shared Metrics and Typography tokens.
Data: chief.engine.get's recent already sends ts, effort, error and usage output (engine_control.rs turn_summary); ChiefEngineReport.Turn now decodes them when present, so an older brain still decodes. This Mac's trace lines give the same fields.
debug.chief_settings (DEBUG builds) shows a fixed brain answer in the open popover, since capture minis run no Chief brain; the chief-settings tour uses it.
No settings wire op here (#22639 has one). "Where it runs" stays display only.
Tests
Red, then green:
- Red: fleet step
c4f2516bf58298d895742b32(chief-settings-cards-red-fdc6b7f0, the new tests on the old code): 3 of 3 suites failed.ChiefBackend.title(for: "claude-cr")gaveclaude-cr(want "Claude (CodeRouter)"), the Backend popup listedclaude-sr2-pipewith no tooltip, and the last turn readclaude-sr2-pipe ยท claude-opus-5-5with no "Opus 5.5". - Green: fleet step
86e1ddd615a2e8be294c4763(chief-settings-cards-green-5de20346at 5de2034631): all 4 suites passed (ChiefNamesTests,HomeChiefTurnSummaryTests,HomeChiefSettingsViewTests,ChiefBackendTests; 6, 7, 9 and 9 tests). After it: e699b348 renamesChiefNamestoString.chiefHarnessName/String.chiefModelName(same assertions, for the iOS package conventions gate), and a20bcef5 / 8a621b49 add acpmux's harness names and drop dashed snapshot dates, with their tests.
New: ChiefNamesTests (harness and model names, catalog name first, the Backend popup's tooltip), HomeChiefTurnSummaryTests (newer and older Turn decoding, cache %, cost, tokens, seconds, the card's last turn). Updated: ChiefBackendTests, HomeChiefSettingsViewTests (names instead of ids, the name field's edge inside the Identity card).
Capture
No capture: the media-tour run (cmux-next media, run 39706513337) is still queued and has posted no stills, and a capture from cmux16 could not lease capture-host. cmux-ci capture stops with "needs a manaflow-ai/cmuxterm-hq checkout (build-fleet/pr-capture and capture-host)". The chief-settings tour (scripts/cmux-next/media/tours/chief-settings.json, using debug.chief_settings) will post the stills when the media run gets a host.
Follow-up: settings the backend still lacks
- Behavior, Permissions, Notifications: no per-Chief setting exists on base, so they get no card until the brain has one.
- Where it runs: display only. Changing it needs a settings wire op (#22639 has one).
Changelog
- Chief Settings is now a page of grouped cards with readable model and backend names and a last-turn summary (time, cost, cache, tools).
๐ค Generated with Claude Code
Agent session: cosmic-gray
![View with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v3-3x.png)
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Rewrites the Chief Settings popover from cramped pickers showing raw ids and a Diagnostics text dump into a settings page of grouped glass cards โ Identity, Brain, Reactions, Memory, Diagnostics โ each shown only where it has a per-Chief setting to offer. Every engine and model now displays a readable name (String.chiefHarnessName/chiefModelName): official engines keep their titles, acpmux's built-in harnesses read as acpmux names them (Pi, OpenCode, Gemini CLI, Aider, Muse Code), a known model keeps its catalog name, and a model id drops a trailing snapshot date (only a real date). The raw id stays only in tooltips, and Diagnostics shows a styled last turn: engine by name, when it ended, time, cost (or tokens when the harness gives no price), cache %, and tool calls, plus the error when a turn failed and the recent replies behind a disclosure.
Compatibility and testing
ChiefEngineReport.Turndecodes the newerts,effort,error, and usageoutputfields only when present, so an older brain's summary still decodes.- The popover scrolls when the cards exceed the room on screen, so tall content like the pet rows and an open Diagnostics stays reachable.
- New
debug.chief_settings(DEBUG builds) shows a fixed brain answer in the open popover, since capture minis run no Chief brain; the body lives inHomeChiefSettingsView.handleCaptureControlinCmuxNextHomeEngine. - New tests cover naming (including acpmux's harness names and dashed snapshot dates), turn decoding from older and newer brains, and updated existing tests for the named values and scrolling.