[CMUX Next] Add toggleable Chief Dock
Summary
CMUX Next's Quick Composer now has an optional Chief Dock: a compact mascot rail with a priority-sorted stack of active agent chats. People can expand or collapse the stack, switch chats, start a new chat, move a chat into a tab, and toggle the dock between its attached and lifted presentation. The chief-dock experiment defaults on and can be disabled with {"chief-dock":"off"} in cmux.experiments.
Testing
git diff --checkbun scripts/acpmux-protocol-codegen.ts --check(generated ACP code is current)- Gallery coverage: 117 entries / 1057 variants
- Targeted theme-color, caret-selection, subtle-elevation, and gallery coverage checks
- Full-size gallery review at 1024x760 with image-decode readiness, hover, keyboard focus, collapsed, steering, and detached states
The local theme-color fallback scan still hits its existing 5-second test timeout on this Mac; the Chief-specific literal-color and elevation failures were removed. Native dogfood compilation is still delegated to the managed fleet; no artifact is claimed until the controller returns a receipt.
Localization uses existing pane strings; no new localized keys were added.
Changelog
Added: Chief Dock for keeping active agent chats visible beside the Quick Composer
Proof
The agent-pane.chief-dock gallery entry covers the mascot rail, stacked working/attention/quiet cards, attention badge, and the attached/lifted controls.
Visual proof
Fresh full-size captures were taken from the canonical agent-pane.chief-dock gallery at 1024x760 (2x DPR), after waiting for fonts and mascot image decode. Hover leaves the cards quiet; keyboard focus reveals the intentional Move-to-tab and dismiss actions. The live frame is Chief Dock baseline during local review.
| State | Capture |
|---|---|
| Baseline glass stack and mascot rail | ![]() |
| Pointer hover (no action preview) | ![]() |
| Keyboard focus (actions become available) | ![]() |
| Attention stack | ![]() |
| Steering queue count | ![]() |
| Expand/collapse and detached placement | ![]() |
| Detached right-side viewport-safe dock | ![]() |
The Chief cards use a 48px pill radius, the shared pane glass blur, and inline status marks so the title and summary share one text origin. The private reference repo also archives 23 source captures from this design conversation. The live Quick Composer path is wired to composerSnapshot.sessions, the active session id, queue counts and steering ids from App.tsx; the gallery intentionally uses deterministic fixtures. Status marks now use the same icon registry as the sidebar (status.needsinput, status.running, status.disconnected, status.complete). Sanitized reference crops and notes are archived in the private cmux-design-references repository at commits 743a34e, abfa5ee, and 7366254.
Checklist
- Behavior changes have added or updated tests, or Testing says why not
- UI, settings, menu, schema, help-text or user-facing docs change: localization audited, and the result is stated above
- Reviewed with a subagent before merge, and all bot and human review comments resolved
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Adds a toggleable Chief Dock to CMUX Next's Quick Composer: a compact glass mascot rail that keeps the most important active agent chats visible, sorted by urgency.
- Shows up to four agent chats in an overlapping glass stack with status icons, an attention-count badge, queue counts for queued steering prompts, and reduced-motion and reduced-transparency fallbacks; spawned chats stay folded and finished chats show a completion icon.
- Offers controls to expand the stack, switch chats, start a new chat, move a chat into a tab, and toggle attached vs. lifted placement, with keyboard-accessible per-card context menus and viewport-safe detached placement.
- Supports nine mascot variants (orbs, machines, moons, fox) chosen via the
mascotprop. - Backed by the
chief-dockexperiment, on by default; disable with{"chief-dock":"off"}incmux.experiments. - Gallery sidebar focuses on the current entry with a browse-all toggle, defers painting offscreen entries, and waits for mascot image decode.
- Drops unused
.cv-link-previewstyles and removes find-highlight repaint scoping. - Adds Playwright coverage for the Apps page (search, install, lifecycle, and error states), awaiting the rendered filter and installed empty states before asserting, in Chromium and WebKit.
- Fixes transcript scroll math and makes older-history pagination retry while the view stays near the top.






