cmux NEXT composer: a short + menu, a few recent commands and one Commands and skills… row
Leo (2026-11-01): "our + button results are still really bad". His + listed Attach, Plan, Goal and then every skill and slash command (/aws-, /cloudflare-, /cmux:* …) running off the screen, with "PlanPlan" (title and description run together in the native escape panel).
Builds on #28798 ("one + menu for chat and New Tab, ChatGPT's shape, skills under /"), which already took the skill rows out of the web + menu and fixed "PlanPlan" (popupHost draws "title — description"). His screenshot shows the menu from before that change. This PR finishes the short menu the coordinator specified, without removing anything:
What changed
-
- is: attach (files, screenshot, window) | Plan, Goal, Mention (Choose project on a new chat) | at most three recent commands, then one "Commands and skills…" row | Search files, chats, pages. No other skill or command is a + row, however many the agent advertises; all of them stay under / (the searchable slash list), which "Commands and skills…" opens with the draft kept.
- Recents (
recentCommands.ts): the commands the person picked last (from / or from +) that this chat's agent still lists; Goal is never one (it has its own row). Local UI memory in localStorage, never sent to the host. The menu reads them again as it opens (PickeronOpen), so a command used in another pane shows up. - "Skills…" is now "Commands and skills…" (the list it opens holds both), in every shipped language; its redundant description is gone (the row shows its
/hint). - Height: still 340 px wide, at most 360 px tall, scrolls inside (#28798); opens on the click with no fade.
Gallery
Entry agent-pane.composer-plus (ComposerPlusMenu.gallery.ts), variants recent-commands, one-recent, no-recents; experiment composer-plus-commands with arms recents-then-row (shipped), row-then-recents, row-only. Picked recents-then-row: the recents are what a person picks most, and the row closes the group like ChatGPT's "More".
Design spec: leo-workspace design/composer.md rule 19 (new, the short + menu), with rule 17 (the + menu's glass, unchanged).
Tests
bun test src/agent-session/acpmux/composerPlusRegistry.test.ts(12 pass): at mostPLUS_RECENT_COMMANDScommand rows with 40 skills, the row opens / (composer.commands), a recent row writes its command, the three arms, the store.bun test test/composer-suggested-prompt.test.tsx(19 pass): the rendered commands group is/skill3, /skill1, /skill9, Commands and skills…; clicking a recent writes/skill9and moves it first; "Commands and skills…" opens the slash list.bun test test/new-tab-gallery-reached.test.ts src/agent-session/acpmux/newtab/NewTabScreen.test.tsxpass.scripts/web-lint.shpassed;bun run typecheckno type errors.- Gallery stills taken locally (Chromium, 2x, light and dark) for every variant and arm.
Observed / Not run
test/gallery-coverage.test.ts: 3 failures, all from entries this PR does not touch (red on base); this PR adds no line to them.test/composer-plus-menu-shape.browser.test.ts(labels updated) not run here.
Changelog
Changed: the composer's + menu lists a few recent commands and one "Commands and skills…" row instead of every skill.
Follow-up (not built): pinned commands in +.
Agent session: agent session
🤖 Generated with Claude Code