Repository navigation
cmux NEXT: chat tools sit in the tab row; one Browser button opens the chat's page - #22655
Conversation
…view is off by default Fails on base: Browser opens a blank split while the chat names a local page, and the default buttons still include a separate Preview. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba2-4ce2-7e02-8fa2-5cd34f7648b1&host=cosmic-gray
…at's page - chrome.tabs.rowTools defaults on: a chat's header tools sit at the right end of its pane's tab row, not in a second row under the tabs. - Browser opens the chat's local page beside the chat when its last turns named one (tooltip: Preview <address>), else a plain browser split; a toggle click closes whichever it opened. Preview is no longer a default button (still available from the header's right-click menu). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba2-4ce2-7e02-8fa2-5cd34f7648b1&host=cosmic-gray
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Probably yours: CI failed on
Failures:
Matched log linesNot re-run automatically: Written by red: web / Web status; NEW: green on the base afffd40; do not merge until green; see lane-rules
Agents: |
|
Bead |
|
|
Review of #22655: with the tools in the tab row by default, the header's status slot sits under the App's tabs and is hidden, so Disconnected/Reconnecting/Failed showed nowhere. The warning now leads the tools in that mode (its width is part of what the tabs make room for). Browser also sends the page when it closes a lit preview, as the Preview button did, so a stale lit state reopens the page instead of doing nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba2-4ce2-7e02-8fa2-5cd34f7648b1&host=cosmic-gray
|
Independent subagent review: two passes, clean after 2ec99a1 (it fixed the hidden connection warning in tab-row mode and the stale-preview click). Remaining red: Agent session: cosmic-gray |
…be header The best default ships on (Browser opens the chat's page; no separate Preview button), and Debug Settings can turn it off for the old pair, live, through the header state push, so the team can compare without another PR and build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba2-4ce2-7e02-8fa2-5cd34f7648b1&host=cosmic-gray
|
Found 16 test failures on Blacksmith runners: Failures
...and 6 more test failures. View all on Blacksmith
|
…state (#22726) Fixes gallery-coverage on #22655: the new component had no entry. agent-pane.header gets a tab-row-disconnected variant that offers the row and shows the warning leading the tools. Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba2-4ce2-7e02-8fa2-5cd34f7648b1&host=cosmic-gray Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
Shipped in:
|
Problem
In the current NEXT nightly, a chat's tools (Preview ▷, Terminal, Browser, Sources ☰, "…") sit in a second row under the pane's tab strip, inset to the transcript column, not at the pane's top right. Leo, 2026-10-20: "I thought we moved that all the way up to the top right." Two buttons also did nearly the same thing. ▷ (Preview) opened the chat's local page beside it, and the globe (Browser) opened a blank New Tab beside it. Clicking the globe while the chat was about
localhost:5173gave an empty browser ("something different was opening here").Why this surface missed the move: lifting the tools into the tab row already exists (
chrome.tabs.rowTools, header/tabRow.ts plus AgentPaneTabRow), but since 2026-10-14 it has been a Debug opt-in that is off by default, so the nightly never used it.Change
Tools in the tab row by default.
chrome.tabs.rowToolsnow defaults to on. A chat's tools sit at the right end of its pane's tab row, and the tabs make room. The Debug setting still turns it off. Nothing else changes: the row is offered only while the pane shows its tabs on top, and Quick Chat keeps its own header.One Browser button. When the chat's last turns named a local page, Browser opens that page beside the chat. Its tooltip names it ("Preview localhost:5173"), and it lights while the page is open. Otherwise Browser opens a plain browser split, as before. A toggle click closes whichever one it opened. Preview is no longer a default button. It is still in the header's right-click menu, and anyone who shows it gets the separate Preview and a plain Browser back. A saved
agent-pane/layout.jsonlist is kept as is.The preview card's Open in tab is unchanged on purpose. It already goes through the app-wide link rule (
layout.linkPlacement, default: the pane on the right, or a new split there). The card's compact layout and "Load preview" are Agent chat: links read as plain text with secrets masked; local preview cards only behind a Debug toggle #22461's.Debug toggles, both on by default:
chrome.tabs.rowTools(existing) puts the tools in the tab row.agentChat.browserOpensPreview(new) makes Browser open the chat's page. Turning it off brings back Preview beside a plain Browser for anyone on the default buttons. It applies live through the header state push.No new strings. The Browser tooltip reuses
header.previewAddress.Before / after
Nightly today (Leo's window, tab strip and tool row only): the tools are a second row under the tabs, inset to the transcript column. The lit globe opened the blank "New Tab" on the right, even though the chat was about a local page.
Agent pane page, base
fce753avs this branch. Headless Chromium, the pane's dev entry, a stand-in acpmux daemon. The chat's last reply nameshttp://localhost:5173/. The native tab strip is not in these captures: on head, it fills the empty left part of the top row. (The "Load preview" card under the header is #22461's.)Base: a 44px row of its own with ▷ Preview, Terminal and Browser. A Browser click sends

pane.action {id: "splitBrowserRight"}, which opens a blank browser.Head (row offered, now the default): the tools sit in the 28px tab row at the pane's right end, and there is no separate ▷. Browser's tooltip reads "Preview localhost:5173", and a click sends

pane.action {id: "preview", url: "http://localhost:5173/", mode: "toggle"}, which opens the page beside the chat.Gallery entry
agent-pane.header-tools, Linux Chromium (big-red), base vs head. The PR's gallery advisory run samples only the first 16 of 43 touched states, so it never reached this entry.panels-open. Base: Changes, ▷ Preview (lit), Terminal and Browser (lit). Head: the globe alone holds the page; its tooltip reads "Preview localhost:5173".New variant

browser-preview(head, light):Review (independent subagent)
ChatHeaderInlineStatus, testchat-header-inline-status).Fleet build
cmux-cijob8138173fc42fbfc0438445a0succeeded on46c921b998ddwith--backend-mode local, because the shared dev-backend VMcmux-dev-backend-1was unreachable over Tailscale (REPAIR.md row). That makes it compile and package evidence, not a dogfood build.cmux-ci compile-check --apppassed onc7a0776acb0c, which includes the Debug toggle (job1b93a3c23350a68c9fdee626).Verification
test/chat-header-browser-preview.test.tsx(new), plus the default-list expectations inchat-header-foldandchat-header-customize. Commit 1 holds the tests only and is red on base. Commit 2 is the fix.bun test test/chat-header-*.test.tsx test/chat-menu-*.test.tsx: 19 pass.chat-header-tooltipsandchat-header-pull-request-statusfail only when the files run together, and they fail the same way on basefce753a089e5. Each passes on its own.vp checkon the changed files: clean.agent-pane-tab-row.test.ts(Playwright, CI browser lane) covers the row mode that is now the default.Agent session: cosmic-gray
🤖 Generated with Claude Code