cmux NEXT New Tab: optional widget view with Projects and Needs you cards
Leo wanted an optional, widget-style view for the New Tab / new chat page, like the rounded cards in his reference: a list card of places to run, and a "Blocked" chat with an × and a hover card.
With the Debug Settings toggle New tab widgets (newTab.widgets) on, the New Tab page shows two soft cards under its create actions. Off, which is the default, the page is unchanged.
- Projects: this Mac (the host's machine name), a hairline, then up to four of its projects, ordered by each folder's newest local chat. The folder a prompt starts in gets a check. A click picks that project, the same as a pick in the location strip, and the strip and Return follow it. The card leaves out the tab's inherited folder unless a prompt starts there, because picking it is no pick. It also leaves out private agent-home folders and other machines' folders, because a New Tab chat starts on this Mac.
- Needs you: up to four chats that ask for input, whose last turn failed, or that lost their agent, with input first, then newest. Each row shows the state in amber or red and the title. A click opens the chat. The × dismisses it until the chat changes again (the key is the session id plus its
updatedAt). Dismisses live in the agent pages' shared localStorage: every New Tab page sees them, and they last until cmux quits, because agent pages use a non-persistent data store. A pointer over a row shows a hover card with the whole title and the chat's last line. The All chats templates (Threads, Console) don't show this card, since they already list those chats.
Every row comes from data the page already has: the composer's project list and the acpmux sessions. A card with nothing to show isn't drawn. The cards use the composer's fill, a hairline edge, 20 px corners and 14 px rows, the same tokens as the rest of the page.
The toggle is a Debug Settings tunable, AgentPaneTunables.newTabWidgets in the Tabs section, next to New tab design. It applies to the next new tab. AgentPaneNewTab's init reads it, so the page and the prewarmed spare page both carry widgets: true, and CmuxNextApp is unchanged (its size cap allows no growth). newTabHost reads the flag and NewTabScreen draws WidgetCards.
This includes #21850's commits (the gallery advisory samples the states a PR adds first, and each stage renders its own manifest). Without them, this PR touches every gallery entry and the receipt captured 16 unrelated states. The widget commits are e0c3ce63804, cb6c41266e3, 7b785d1dd2e and ac9f866125e.
Proof
From this PR's gallery advisory run (run 39186217829, Linux Chromium, 420 px): the same chats and projects with the toggle off, then on, then a pointer over the failed chat, then on in a light theme. The hover card was caught partway through its fade-in.


Testing
bun test test/new-tab-widgets.test.tsx(4 pass) covers:- the Needs you order and states, and a dismiss that holds until the chat changes;
- the Projects order, with agent-home and the inherited folder left out;
- the handshake flag;
- a render of
NewTabScreenoff and on: a project pick moves the check and the location strip, a click opens the chat, and the × hides the row, holds on the next page and keeps another page's dismiss.
test/tooltip-rules.test.tspasses. The hover card carries atooltip-allownote because the reference asks for it.bun run typecheck,bun run lint,vp fmt --check,check-type-scale.pyandgen-strings.mjs --checkpass locally.- CI at
ac9f866: thecmux-nextrun (fast tier, checks, size cap) and the web run (react-apps-check) pass. - Swift:
NewTabWidgetsTestsin CmuxNextAgentPaneTests checks that the context carrieswidgetsonly when it's on and that the tunable ships off. The path routing skippedcmux-next swift teston this PR, so the test is added but hasn't run, and nothing has compiled the Swift change yet. Only Swift syntax passed locally. - A review subagent found five issues. Four are fixed in
ac9f866and the base-ordering one in #21850. - Localization: two new pane keys,
newTab.widgets.attentionandnewTab.widgets.dismiss, in all 21 locales (en and ja translated, the rest needs_review, the same as their neighbours). The state labels reuse existing keys.
Changelog
Added: An optional widget view on the New Tab page (Debug Settings, New tab widgets), with your recent projects and the chats that need you
🤖 Generated with Claude Code