cmux NEXT composer: a short + menu, a few recent commands and one Commands and skills… row

Merged
TE
5d ago
+431-66

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 (Picker onOpen), 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 most PLUS_RECENT_COMMANDS command 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 /skill9 and 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.tsx pass.
  • scripts/web-lint.sh passed; bun run typecheck no 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