Skip to content

cmux-next: generic New opens the New Tab page; chat titles, New chat focus, tooltips, hover card - #17508

Merged
teamleaderleo merged 29 commits into
feat-cmux-nextfrom
op-next-agent-polish
Oct 6, 2026
Merged

teamleaderleo merged 29 commits into
feat-cmux-nextfrom
op-next-agent-polish

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 6, 2026 •

Copy link
Copy Markdown
Collaborator

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:

Testing

Red before green for each fix: the test commits come first.

  • bun test on sessionList.test.ts and tooltips.test.ts ran locally. On the test commits: 3 fail and 1 error (the tooltips module was missing). With the fixes: 41 pass, 0 fail, including SessionSidebar, searchChats and homeLists.
  • vp check (format, lint, types) is clean on the changed webview files. build-agent-pane-web.sh --check reports the bundle is current after merging feat-cmux-next, and check-webviews-react-compiler.mjs passes.
  • 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, and ManagedPreferencesManifestTests and SettingsSchemaExportTests in 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 in c53a181, and a signal-11 crash of the test process in unrelated localization tests.
  • Fleet builds: base 18aed0f (job f437037e) and PR e64412a (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.aLoneTabIsNotRepeatedUnderTheTotal is 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

teamleaderleo and others added 10 commits October 5, 2026 20:17
…as no repeat row

Regression tests for two cmux-next bugs: an unprompted chat titled after its
harness profile (claude-sr, claude-sr-1) and a one-tab workspace hover card
that repeats the tab's line under the total.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Red: tabs.newTabKind defaults to the New Tab page, and a blank agent chat may
run newTab.page (its empty state's New) but no other app action.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Red: a hovered control's tooltip shows after a short delay, at once when moving
along the rail, and is shifted inside the window's edge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
acpmux names a session after its harness profile (claude-sr, claude-sr-1). An
unprompted chat showed that name; it now reads New chat, and a generated name
also covers the profile's family and fork names.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the total

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e the window

Native title tooltips in the web view waited about a second, drew at the
pointer and ran past the pane's edge (More: c...). One in-page tooltip now
shows every title.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s a chat

Leo: "WHY IS IT EVEN NEW AGENT WHERE IS NEW TAB". tabs.newTabKind now defaults
to the New Tab page (Cmd-T, the strip's +), a person's new workspace (Cmd-N,
sidebar +, the empty workspace's New) opens on the page instead of a blank
chat, and the agent empty state's New opens the page. Only agent-labeled
actions (New chat, New Agent Chat) start a chat.

New chat in the pane focuses the composer, and on a chat that is still empty
it focuses that chat instead of starting another session. The pane installs
its tooltips.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: e9b3a97d-b88f-4c80-9fd5-031cb6127efc

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Not verified: macOS jobs did not run: compile and app tests were skipped on 44094b8966; ci-status is green without them.

CI passes on 44094b8966 (run 37418767617 attempt 1).
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped (the macos job needs both to succeed). Re-run CI once they pass, before merging.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way.

teamleaderleo and others added 5 commits October 5, 2026 20:34
…s its name

The UI rules keep widget roles and key handlers in src/ui. Moving a title to
the tooltip now gives a control with no other name that title as aria-label.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nt-polish

# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/pane.js
#	webviews/src/agent-session/acpmux/App.tsx
teamleaderleo added a commit that referenced this pull request Oct 6, 2026
teamleaderleo and others added 4 commits October 5, 2026 22:04
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t New Tab

The tree can list a new workspace's first tab before the creation reply
registers it as a New Tab page; a pane showing it in between built a plain
Agent Chat. The reply now turns that sessionless chat into the page. Tabs
showing the page are titled New Tab until they become a chat.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pane's build concatenates its CSS by hand, so desktop.css (imported by
desktop.ts) never reached it and every label was selectable. It now opens
the stylesheet; fields and .selectable transcript content still select.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lawrencecchen added a commit that referenced this pull request Oct 6, 2026
#17347 made the New Tab page chat-first. #17508 puts the default and the entry
points back on the page; this puts the page itself back to its state before
#17347 (R86/N4/N5/R81):

- One field, placeholder "Search or type a URL" in every locale.
- No project row (project chooser and Import and sync) above the field.
- Enter on an empty field opens nothing.
- The bar lists tabs, workspaces, sessions, folders, commands and history,
  not app actions or files. Layout A shows the agent chip again.
- plans/cmux-next/new-tab.md states the `page` default again.

The agent chat (composer project chooser, `!` conversion, the hero's New and
Import buttons and #17508's New -> New Tab page) is a different surface and
stays as it is. Typed file:// URLs still open in the file viewer.

Bundles rebuilt with build-agent-pane-web.sh; strings.json regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo and others added 2 commits October 5, 2026 22:19
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A WKWebView's tracking areas ignore alpha and hit testing, so the spare
parked at alpha 0 over the content kept hovering its Recent chat cards and
setting the cursor under the chat a card had just opened. It now waits at
the content's size but far outside it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Oct 6, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

teamleaderleo and others added 2 commits October 5, 2026 22:26
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… filter + dispatch)

Runs the 9 ignored tests in cmux-browser-host/tests/chromium.rs against the
Playwright Chromium pinned in tests/browser-parity. Never a required check.
No schedule: GitHub runs schedules only from main, which lacks the crate.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
teamleaderleo and others added 6 commits October 6, 2026 01:28
* test(webviews): cover composer project location chrome

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(webviews): polish composer location controls

Use the shared inline location treatment for recent project folders, add path descriptions and Browse, and style the portaled computer menu with the pane font and compact checkmark.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* build(webviews): refresh agent pane bundle

Regenerate the tracked agent pane resources so the composer picker changes ship in the native pane.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* style(webviews): format composer location picker

Apply the repository formatter to the composer location picker and refresh its tracked agent pane bundle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(webviews): keep project picker behavior while polishing chrome

Keep existing new-chat project selection behavior while matching the composer location row, showing project paths in the menu, and retaining Browse.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(webviews): align location chevrons and preserve root projects

* build(webviews): regenerate agent pane bundle after rebase

* fix(webviews): preserve project picker text semantics

* Regenerate agent pane bundle after merging feat-cmux-next

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ar.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/bs.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/da.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/de.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/en.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/es.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/fr.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/it.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ja.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/km.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ko.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/nb.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/pl.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/pt-BR.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/ru.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/th.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/tr.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/uk.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/vi.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/zh-Hans.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/locales/zh-Hant.js
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/pane.js
#	schemas/settings/settings-schema.json
# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/Resources/agent-pane/pane.js
@teamleaderleo
teamleaderleo merged commit de54f6b into feat-cmux-next Oct 6, 2026
12 of 14 checks passed
@teamleaderleo
teamleaderleo deleted the op-next-agent-polish branch October 6, 2026 05:29
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/37419038846 at 416b268 failed: cmux-next checks (god files, concurrency, crash safety, l10n).
Those jobs last passed at b2e10a5. This pull request is one of 4 merged since: #17514, #17505, #17508, #17538.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/37419044566 at f5cef26 failed: cmux-next checks (god files, concurrency, crash safety, l10n).
Those jobs last passed at b2e10a5. This pull request is one of 5 merged since: #17514, #17505, #17508, #17538, #17526.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

lawrencecchen added a commit that referenced this pull request Oct 6, 2026
points back on the page; this puts the page itself back to its state before

- One field, placeholder "Search or type a URL" in every locale.
- No project row (project chooser and Import and sync) above the field.
- Enter on an empty field opens nothing.
- The bar lists tabs, workspaces, sessions, folders, commands and history,
  not app actions or files. Layout A shows the agent chip again.
- plans/cmux-next/new-tab.md states the `page` default again.

The agent chat (composer project chooser, `!` conversion, the hero's New and
Import buttons and #17508's New -> New Tab page) is a different surface and
stays as it is. Typed file:// URLs still open in the file viewer.

Bundles rebuilt with build-agent-pane-web.sh; strings.json regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lawrencecchen added a commit that referenced this pull request Oct 6, 2026
points back on the page; this puts the page itself back to its state before

- One field, placeholder "Search or type a URL" in every locale.
- No project row (project chooser and Import and sync) above the field.
- Enter on an empty field opens nothing.
- The bar lists tabs, workspaces, sessions, folders, commands and history,
  not app actions or files. Layout A shows the agent chip again.
- plans/cmux-next/new-tab.md states the `page` default again.

The agent chat (composer project chooser, `!` conversion, the hero's New and
Import buttons and #17508's New -> New Tab page) is a different surface and
stays as it is. Typed file:// URLs still open in the file viewer.

Bundles rebuilt with build-agent-pane-web.sh; strings.json regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lawrencecchen added a commit that referenced this pull request Oct 6, 2026
check-no-godfiles failed on AgentTabs.swift after #17508 (411 lines, 4
top-level types). AgentTabCreated, AgentSessionBindOutcome, NewTabPageIDs and
the displayName extension move to their own files, unchanged; access levels
and behavior are the same.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lawrencecchen added a commit that referenced this pull request Oct 6, 2026
points back on the page; this puts the page itself back to its state before

- One field, placeholder "Search or type a URL" in every locale.
- No project row (project chooser and Import and sync) above the field.
- Enter on an empty field opens nothing.
- The bar lists tabs, workspaces, sessions, folders, commands and history,
  not app actions or files. Layout A shows the agent chip again.
- plans/cmux-next/new-tab.md states the `page` default again.

The agent chat (composer project chooser, `!` conversion, the hero's New and
Import buttons and #17508's New -> New Tab page) is a different surface and
stays as it is. Typed file:// URLs still open in the file viewer.

Bundles rebuilt with build-agent-pane-web.sh; strings.json regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lawrencecchen added a commit that referenced this pull request Oct 6, 2026
points back on the page; this puts the page itself back to its state before

- One field, placeholder "Search or type a URL" in every locale.
- No project row (project chooser and Import and sync) above the field.
- Enter on an empty field opens nothing.
- The bar lists tabs, workspaces, sessions, folders, commands and history,
  not app actions or files. Layout A shows the agent chip again.
- plans/cmux-next/new-tab.md states the `page` default again.

The agent chat (composer project chooser, `!` conversion, the hero's New and
Import buttons and #17508's New -> New Tab page) is a different surface and
stays as it is. Typed file:// URLs still open in the file viewer.

Bundles rebuilt with build-agent-pane-web.sh; strings.json regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants