Fix the composer model picker's harness entries and readability
The composer model picker uses a readable named harness rail, larger model rows and search, and the harness's own model-menu order. Account remains for signed-in identities; launch configurations have readable names in the rail. Unii is hidden from ordinary pickers and retained for an active Unii chat.
Leo, word for word:
this "profile" i have not seen a justification for this in the model picker / what else of the model picker prs are there / why is unii shownig up here / didnt we say something like the recommended default was to put the harnesses up top? or did we want them on the left? why is this so fucking small? or are we styling it now?
but i never said four / i said top relevant ones / which may or may not happen to include 4 / but that's how it is
The selected design is the named left rail: launch configurations stay distinguishable beside the model list. Debug Settings also offers a wrapping top strip and compact named rail. The composer-bottom chip, glass and colours stay quiet. The Claude desktop model menu in cmux-design-references is the reference for selected model rows and More models.
Reported model IDs retain their order through daemon output, alias folding and the picker. Models appear once; the remainder stay under More models. Older daemons fall back to ACP model options or the newest available model in each family. No four-model cap or current/recent promotion is imposed. topModels is optional response metadata on the existing models operation.
A started chat forks to another launch configuration using the same profile-aware handler from pointer, keyboard and Fork-to row. Readable suffix collisions retain every distinct configuration.
| Gallery variant | Dark | Light |
|---|---|---|
| Before | ![]() | light |
| Named left rail, selected | ![]() | light |
| Wrapping top strip | dark | light |
| Compact named rail | dark | light |
These are real Chromium gallery captures: before at base 8711a8ca8333, after from the original visual candidate. The final repair changes interaction handling and tests.
Capture scene-composer at bfa3cecb7169 (fleet build, capture mini, text checked for private data)
| Light | Dark |
|---|---|
![]() | ![]() |
Gallery entries include new-tab.quick-model-menu/{claude,harness-left,harness-top,harness-compact} and agent-pane.model-picker/{reported-claude-menu,reported-codex-menu,relevant-few}. |
Validation at final head bfa3cecb716916a7938cce6d84c15c6f17871fcd:
- Folded-profile keyboard regression: 18 pass / 1 fail before handler repair; 19 pass / 0 fail after. Broader focused suite: 29 tests, 91 assertions, all pass.
- Edited-file Oxfmt and Oxlint: zero findings; package typecheck passes; prepush gate reports no new violations.
- Full package checks reproduce base debt in untouched files: SendScrollSetting.gallery.tsx type-scale, settings channelsCard/store formatting, App/Conversation hook warnings, generated protocol methods.ts. These are not claimed as passes.
- Earlier hosted evidence: 85 focused web/browser tests and two Rust ordering/alias tests passed on implementation
679b3848f1ee; native build9bdfb9c792269d29d06ad253passed ata8211376f847; exact-head fleet scene capture completed above from Mac build jobbd5bea93998f017442062a7b. Current exact-head CI and independent Astra review are recorded in follow-up comments. No nightly verification is claimed.
Supersedes #26288's icon-only radius change and #25828's rail wrapping path. The named top variant retains wrapping and keyboard-selected harnesses scroll into view. It also removes #25796's Profile submenu and replaces #24224's fixed shortlist cap.
Size: The ordered harness menu crosses daemon output, catalog/alias joining and picker interaction; their regression coverage stays together. Five Debug setting keys include all 21 module locales, which account for much of the diff.
Agent session: agent session



