cmux NEXT model picker: one row per model; effort is a vertical side dropdown beside it
Leo, 2026-10-30: "we dont like horizontal text for effort. just make it vertical. hell, why not do a vertical slider?"
Leo, 2026-10-30: "imagine instead of this, you had it vertical... so you have a top horizontal harnesses (like it was before... god darn it why did it get changed... we liked that...) then the slider can be... hm. actually you could fit a slider in the popover area for the effort, no? slider AND/OR the vertical text..."
Leo, 2026-10-30, on the target picker: "you can merge it if you want, but we're going to go with the harness symbols at the top. like this, but symbols at the top, and themed, and combined with the effort side dropdown inside it"
This is PR 1 of 2: the P0 alone, so it isn't waiting on the redesign. The target picker (themed harness symbols on top, stars, āN, Legacy models) is #27889, rebased on this one.
What was wrong (P0)
#26521 put a row of every effort level (Low ⦠Ultra) under every model in the model menu. Codex's eight models took sixteen rows: a wall of horizontal effort words. #27849 shortens that to trailing words on each row, which is still horizontal text; it is on HOLD and closes against this PR.
What this changes
- One row per model. Each model is one 28 px row again, with no effort words on it.
- Effort is something you select into, beside the model. Leo, 2026-10-29: "we prev had a t3 code (but with effort as the thing you can select into)/claude code hybrid". Each model row ends with an effort item: the running model's level and a chevron.
- Pointing at the item, or pressing Right (Enter works too), opens that model's levels as a side dropdown beside the row: one level per line, the recommended one named.
- The dropdown is a
Submenu, the same component the Provider rows use, so it is its own popup. Nothing clips it, nothing covers it, and it grows up from its row at the window's foot. - Picking a level lands the model and its effort together, as before.
- Clicking the model still picks the model only.
- Versions (
effortLook, galleryagent-pane.inline-model-effort):list(picked: one level per line, the recommended one named);plain(levels alone);slider(a vertical slider inside the dropdown, never on a row). - Kept: the Effort row, Ultracode and other session-only levels, the searched-combo path, Fast, Provider.
- CSS: the rail-width rules are keyed on the new effort item, and the dropdown is only as wide as its levels.
Design: leo-workspace design/model-picker.md (teamleaderleo/leo-workspace#1591).
Gallery: agent-pane.inline-model-effort/list, agent-pane.inline-model-effort/plain, agent-pane.inline-model-effort/slider, agent-pane.inline-model-effort/chat, new-tab.quick-model-menu/claude-many-harnesses-inline-effort
Tests
quick-model-menu-layout:- every model row is 28 px and the menu itself draws no level;
- from the running model, Right on its effort item opens the levels one under another, in a popup beside the row, whole inside the window, with nothing covering the last level;
- the bottom model's dropdown is whole, and moving to another model closes it.
- Tests that read effort levels now open the model's dropdown first (
test/support/effortDropdown.ts); their assertions about what lands and what is checked are unchanged. - At ebca771 the 25-file picker / effort / popup set is 375 pass, 2 fail. The 2 ("a menu row takes a press anywhere on it", chromium and webkit) are on the + menu's "Search pages" row. They fail the same way with this PR's files reset to the merge base 72dd65f, so they are a base red. Runs: https://github.com/manaflow-ai/cmux/actions/runs/41025118214 and https://github.com/manaflow-ai/cmux/actions/runs/41028506609 (base).
Risk
Medium-low: the webview layout of the compact model menu's effort control. No state, protocol or Swift change.
Agent session: agent session
š¤ Generated with Claude Code