cmux-next: generic New opens the New Tab page; chat titles, New chat focus, tooltips, hover card
Summary
Leo's 2026-10-05 dogfood batch for the agent pane and its New entry points.
A generic New opens the New Tab page. Every "New" that doesn't say "agent" used to open a blank agent chat. Leo: "WHY IS IT EVEN NEW AGENT WHERE IS NEW TAB". Now each one opens the New Tab page, where you pick an agent, terminal or browser. Only agent-labeled actions start a chat directly.
| Entry point | Action | Before | After |
|---|---|---|---|
| Cmd-T, tab strip +, double-click on the empty strip, tab group's New Tab | newTab.sameKind (follows tabs.newTabKind) | Agent chat (agent default) | New Tab page (page default) |
| Cmd-N, sidebar +, New Workspace in menus and the palette | newTab (New Workspace) | Workspace opens on a blank agent chat | Workspace opens on the New Tab page |
| Empty workspace's New button | EmptyWorkspaceView → openFirstPage | Blank agent chat | New Tab page |
| Agent empty state's New button ("What should we build?") | pane action.run | Another empty acpmux session, same screen | New Tab page, beside the chat |
| New Agent Chat (Cmd-I), Search chats' New chat | palette.newAgentChat, chat.new | Agent chat | Agent chat (agent-labeled, unchanged) |
| New Terminal Tab (Ctrl-Shift-Cmd-T), Open Browser | newSurface, openBrowser | Terminal or browser | Unchanged |
A tabs.newTabKind set in cmux.json still wins. "agent" keeps the old Cmd-T behavior.
New chat gives feedback and stops piling up sessions. acpmux names a session after its harness profile (claude-sr, claude-sr-1). The pane showed that name for any chat that hadn't been prompted yet, and each New chat click on an empty chat started another one. Chats now take their title from the agent's title, then the first prompt, else "New chat", never the launch command. This covers Search chats and the Home lists; #17504 has since moved the chat list to the window sidebar. New chat focuses the composer. On a chat that's still empty it focuses that chat instead of creating a duplicate.
Tooltips. The pane used native title tooltips. They waited about a second, drew wherever the pointer was, and ran past the pane's edge ("More: c…"). One in-page tooltip (webviews/src/ui/titleTooltips.ts) now shows every title in the pane: after 350 ms, immediately when moving between controls, flipped and shifted so it stays inside the window. An icon-only control keeps its title as its aria-label.
Workspace hover card. A one-tab workspace listed its only tab ("~ 0.0% · 7.8 MB") under the total line that already said the same thing. The per-tab rows now show only when a workspace has more than one tab.
Not in this PR:
- The "Default (Claude Code's choice)" picker label is covered by op-next-markdown's #17503.
- The "Sessions" pane toggle and the pane's rail were removed by #17504 (op-next-sidebar-merge).
Testing
Red before green for each fix: the test commits come first.
bun testonsessionList.test.tsandtooltips.test.tsran locally. On the test commits: 3 fail and 1 error (the tooltips module was missing). With the fixes: 41 pass, 0 fail, includingSessionSidebar,searchChatsandhomeLists.vp check(format, lint, types) is clean on the changed webview files.build-agent-pane-web.sh --checkreports the bundle is current after mergingfeat-cmux-next, andcheck-webviews-react-compiler.mjspasses.- Swift tests were added and changed but not run locally, since this host can't do Swift builds:
NewTabKindTests,NewTabKindSettingsTests,AgentPaneNewTabTests.aChatCanOpenTheNewTabPageAndNothingElse,ResourceAggregatorTests.aLoneTabIsNotRepeatedUnderTheTotal. CI runs them. The MDM and settings-schema exports were edited by hand to the new default, andManagedPreferencesManifestTestsandSettingsSchemaExportTestsin CI check that. - Swift tests in CI: the six new and changed tests passed on
5ef4ccd. That run's only failures were the stale settings-schema hash, fixed inc53a181, and a signal-11 crash of the test process in unrelated localization tests. - Fleet builds: base
18aed0f(job f437037e) and PRe64412a(job 8b9d4636) both built. The captures below come from those builds on a capture mini, driven by CuaDriver. - Not shown live: the hover card. CuaDriver's cursor move didn't trigger a hover in either build, so
ResourceAggregatorTests.aLoneTabIsNotRepeatedUnderTheTotalis the only evidence for that fix.
Localization: no new strings. The "New chat" fallback reuses sidebar.newChat, which is already translated in every locale.
Changelog
Changed: Cmd-T, the + buttons and New Workspace open the New Tab page, and agent chats are titled from their first prompt instead of the agent's command name
Demo Video
Same steps on both builds, a fresh tagged app with the default settings.
Before (18aed0f) | After (e64412a) | |
|---|---|---|
| Cmd-T | ![]() | ![]() |
| Cmd-N (new workspace) | ![]() | ![]() |
| Empty state's New, clicked | ![]() | ![]() |
Before, clicking New on the agent empty state leaves the same screen, and an extra empty session appears behind it. After, a New Tab page tab opens beside the chat.
🤖 Generated with Claude Code





