cmux NEXT: a chat alone in its pane hides its lone tab, so the page takes the tab row
Leo-ask: ask-f9715c2fb6
Leo (2026-11-03), on the tab row above an agent chat:
well ok this current version the top row area... man what if we could? like just... have even more of that area be not some row blocking it? cuz isn't it kinda arbitrary anyway if you literally only have one tab there? sure you can use it to click and drag the window but like... that's not that big of a deal, is it?
What changes. While a chat's header tools share its pane's tab row (PaneTabRowSharing) and the pane holds exactly one tab (no groups), the pane hides that tab. The chat page shows through the leading part of the row, so only the chat's tools and the pane's toolbar stay up there. A Chromium chat drops the matching occlusion hole. A second tab brings the strip back: a deduped observation of the one-tab condition re-lays out the pane.
Scope. This is opt-in per view (tabRowTakesLoneTab, default false). Only agent chats (AgentPaneView) turn it on, so Home's docked tools, terminals and browsers keep their tab. Panes with the bar at the bottom, vertical tabs or Hide Tab Bar on never reach this path.
What goes with the lone tab (Leo accepted losing the window drag): the strip's empty-space window drag and pane-swap drag, the strip's + and the new-tab chevron (Cmd-T and the pane toolbar still open tabs), and dropping a tab onto that pane's row.
Risk. Small and contained to the pane's layout of the shared row: 4 source files, about 30 lines.
Tests. TabRowToolsStayClickableTests.aLoneChatTabGivesTheChatTheRow covers the strip hiding for a lone chat tab, coming back for a second tab, and staying for a view that doesn't opt in. AgentPaneTabRowHolesTests.aLoneTabLeavesOnlyTheToolbarUncovered checks that a Chromium chat's holes cover only the toolbar.
Design spec: leo-workspace design/tabs.md.
Follow-ups from review (non-blocking):
- A Chromium chat whose lone tab is hidden no longer shows that tab's presence dot; the chat header's own status should cover it.
- The page keeps its row-height header. The transcript scrolls and fades under the leading part of the row, but its resting top doesn't move up yet. Doing that needs the page's row mode to learn
tabsShown.
Agent session: agent session
🤖 Generated with Claude Code
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
A chat alone in its pane now hides its lone tab, so the page shows through the whole tab row—only the chat's tools and the pane's toolbar stay up there.
- Only agent chats opt in (
tabRowTakesLoneTab); Home's docked tools, terminals, and browsers keep their tab. - A Chromium chat drops its matching occlusion hole, and a second tab brings the strip back.
- The hidden tab loses the window-drag and pane-swap drag, the + button, the new-tab chevron, and tab drops onto that row; Cmd-T and the pane toolbar still open tabs.
- Tests cover the strip hiding for a lone chat tab, returning for a second tab, and staying for views that don't opt in.