cmux NEXT composer: queued rows show Steer, a trash can and ⋯, as ChatGPT and Codex do
Leo, 2026-10-21, on the queued rows above the composer: "IS THIS REALLY THE RIGHT ORDER? IS THIS LOGICAL? I THOUGHT WE HAD A TRASH CAN" (with ChatGPT's queued rows: "THIS IS WHAT CHATGPT HAS").
Before: each queued row ended in a pencil (Edit), an X (Remove) and an ↑ (Send now).
Now: each row ends the way ChatGPT and Codex draw it: ↪ Steer (a glyph plus the word), a trash can (Delete), and ⋯. All three are plain glyphs that show the soft hover pill only, with no discs or fills.
- Steer takes the same path the ↑ used:
_acpmux/queue_editsend_now. It steers the prompt into the running turn, and for an agent that cannot steer it runs next. It works only by click, so no key can send it. - Delete withdraws the prompt (
chat.queue.remove). The row's Delete/Backspace key does the same, as before. - ⋯ opens a menu in the composer menus' glass look (
acpmux-quick-menu). It has:- Edit message: the existing inline edit. Return on the row still opens it.
- Open in side chat: the app already has a clean path for this (
/btw:chat.btwthenchat.sideChat), so the item takes the prompt out of the queue and asks it in a new side chat. It shows only where/btwworks (behind the side-sessions gate, not in a side chat itself, not in the Quick Composer) and only for a prompt with no images, because/btwcarries text only. If the side chat can't start, its text goes back into the prompt. - Turn off queueing: no such setting existed (the
returnSteersflag is derived per turn, not a setting). I addedqueueing.ts, which stores the choice in the page's local storage for every chat. When it is off, ⌘Return and Send steer too, so nothing new waits; an agent that cannot steer still runs the prompt after the turn. The item then reads Turn on queueing, and while queueing is off the composer row's right-click offers it too. It is not a cmux.json key, because a new setting default needs a defaults call (defaults_guard).
- The keyboard is unchanged: ↑/↓, Return to edit, ⌥↑/⌥↓, Delete, Esc; ⌘↩ on a row still does nothing. The row's right-click menu now names its items Steer, Edit message, Move up/down and Delete.
- Icons: a new
composer.steer(↪) in the icon pack at the composer's 1.5 stroke (design/icons/sourceplus regenerated pack outputs). The trash can is the pack's existingaction.delete, and ⋯ isaction.more. - The queued row's inline editor loses its own 1.5px ring and gets a hairline edge.
- Strings: 7 new keys in the agent pane catalog (all 21 locales; non-English values
needs_review, as the catalog does).
Changelog
- Changed: Queued messages show Steer, a trash can and a ⋯ menu (Edit message, Open in side chat, Turn off queueing), as in ChatGPT and Codex.
Regression test
cd webviews && bun test src/agent-session/acpmux/ComposerQueue.test.tsx
- Red on base: this head's test file run against the base component (1355c9ccbce, plus
queueing.tsso it loads) on huge-blue: 10 pass, 5 fail (Steer/Delete/More order, Steer's steer path, the ⋯ menu's items, Turn off queueing, Open in side chat). - Green on head (f57fc44e292):
bun test src/agent-session/acpmux/ComposerQueue.test.tsx test/queue-row-actions.test.tsx test/hideable-chrome.test.tsx test/new-tab-dictation.test.tsxgives 29 pass, 0 fail on huge-blue.
Observed / Not run
- Observed: the icon pack rebuilt with
scripts/icons/build_pack.py; the catalog parses and passescheck-xcstrings-keys.py. - Observed:
bun run checkin webviews/ passes on huge-blue at f57fc44e292 (format, lint, types, catalog keys, text-focus rings). The only warning,importCards.csssystem blue, is not this PR's. - Observed: before and after stills of
composer/queuedfrom the gallery compare builds (dark): pencil, X, ↑ before; ↪ Steer, trash, ⋯ after, plus the open ⋯ menu. - Not run: the browser (Playwright) tests
agent-pane-queue-steerandagent-pane-queue-collapse. They now click Steer by name and run in CI. - New gallery states:
composer/queued-actionsandcomposer/queued-actions-menu(the open ⋯ menu).
No capture: webview-only change; gallery compare https://cmux-lawrences-mac-mini.tail137216.ts.net:18796/compare/composer-look-queue-actions/?entry=agent-pane.composer The Swift diff is only the generated icon pack members (IconName+Members.swift, IconName+Catalog.swift).
Agent session: cosmic-gray
🤖 Generated with Claude Code