Skip to content

fix(cmux-next): persist first agent chat titles by default - #24985

Merged
teamleaderleo merged 5 commits into
feat-cmux-nextfrom
nx-sidebar-autoname
Oct 25, 2026
Merged

teamleaderleo merged 5 commits into
feat-cmux-nextfrom
nx-sidebar-autoname

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 24, 2026 •

Copy link
Copy Markdown
Collaborator

What changed

The existing guarded workspace auto-namer now defaults to the persisted variant. When a default-named workspace receives its first real agent chat title, the workspace adopts that title through the existing workspace_rename source/revision path. Manual names and explicit agent renames remain authoritative, and later chats do not replace the first name.

Leo’s request: “if you're just starting a single agent chat ... if it was still the default template, then just rename it.”

Testing

  • Red-before fleet step a2ede8b71f2b766a3260a959 at 31002abbef6d0e62c6e58f3d13650ea732490a6c: WorkspaceAutoNameTests failed the new default-variant assertion.
  • The xhigh review found that acpmux’s prompt fallback was being exposed as generatedTitle; this head carries the titleSource protocol field and excludes prompt/manual/unknown sources.
  • Green-after fleet step b62f7973c9550bb862915c17 at 6bb92f7517a486392b599f4a056ab362baeb3337: AgentTabNamingTests passed on Xcode 26.6. The protocol freshness and generated-type checks also pass in PR CI.
  • cargo fmt --all -- --check, bun scripts/acpmux-protocol-codegen.ts --check, and git diff --check pass.

Observed / Not run

No local native build or Swift test was run; macOS validation used the fleet. The focused fleet suite passes; unrelated base-red checks remain advisory.

Changelog

Changed: default workspaces persist their first generated agent chat title.

Proof

The gallery visual-evidence run for this exact head passed (40141162901). The before/after fleet recording for this exact auto-name behavior is retained in PR #20397:

before after

The direct current-head capture was privacy-refused because the capture mini hostname appeared in the frame; it was not uploaded.

Agent-Session: big-red

@github-actions

github-actions Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 6bb92f7: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr24985 -f ref=nx-sidebar-autoname -f platform=macos -f backend_mode=local

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards. This PR merged before its CI finished: fix forward on main.

CI failed on 6bb92f7517 (run 40148324123 attempt 1): 4 code, 1 unknown.
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped.

Job Verdict Why
web / react-apps-check (3) code a web test failed
web / react-apps-check (2) code a web test failed
web / react-apps-check (1) code a web test failed
web / react-apps-check (4) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • seen on other PRs categories.test.ts the categories are the approved ones, in order: failed (job)
  • seen on other PRs serverCard.test.tsx the card shows status, version line, socket and tailnet address: failed (job)
  • seen on other PRs serverCard.test.tsx Restart Recommended shows only when the host offers a restart, and its button asks the host to confi...: failed (job)
  • seen on other PRs serverCard.test.tsx Pair asks the host and Copy writes the address to the pasteboard: failed (job)
  • seen on other PRs serverCard.test.tsx a server without a socket or address shows neither row, and no server shows the empty line: failed (job)
  • seen on other PRs agent-pane-step-rows.test.ts every step is one 26px row on one rhythm, across transcript rows: failed (job)
  • seen on other PRs composer-bottom-space.test.ts chromium: New Tab stage with the template dots: the quiet row stays clear of the dots: failed (job)
  • seen on other PRs composer-bottom-space.test.ts webkit: New Tab stage with the template dots: the quiet row stays clear of the dots: failed (job)
  • seen on other PRs claimPaint.test.tsx a pooled Settings page claimed by the host reports its paint once its first screen is in: failed (job)
  • seen on other PRs claimPaint.test.tsx a Settings page loaded fresh reports its first paint once its first screen is in: failed (job)
  • ... 22 more in the job logs
Matched log lines
web / react-apps-check (3): (fail) the categories are the approved ones, in order [0.27ms]
web / react-apps-check (2): (fail) a pooled Settings page claimed by the host reports its paint once its first screen is in [927.35ms]
web / react-apps-check (1): (fail) composer at 1x: focus is the resting hairline a step brighter, no ring [74.01ms]
web / react-apps-check (4): (fail) agent pane first paint > chromium: under its own meta CSP (cmux-agent://pane), a German app paints German from the first frame, script files only [213.79ms]

Not re-run automatically: web / react-apps-check (3), web / react-apps-check (2), web / react-apps-check (1), web / react-apps-check (4), web / react-apps-check are not machine failures.

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, seen on other PRs that it failed on another pull request's run lately.

red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base 1744ef4; does not block
red: web / Web status; base red: the same failure on the base 1744ef4; does not block
red: web / react-apps-check; base red: the same failure on the base 1744ef4; does not block
red: web / react-apps-check (1); base red: the same failure on the base 1744ef4; does not block
red: web / react-apps-check (2); base red: the same failure on the base 1744ef4; does not block
red: web / react-apps-check (3); base red: the same failure on the base 1744ef4; does not block
red: web / react-apps-check (4); base red: the same failure on the base 1744ef4; does not block

Tour of 6bb92f7517 (run)

The path-selected recorder failed for core-after, core-before; see the run artifact and failed manifests.

Path-selected interactions

Interaction Changed paths
agent-pane webviews/src/agent\-session/acpmux/protocol/generated/types.ts
core Packages/macOS/CmuxNext/Sources/CmuxNextBridge/AgentTurnStates.swift
Packages/macOS/CmuxNext/Sources/CmuxNextWorkspaceNaming/WorkspaceAutoNameTunables.swift
Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/AgentTabNamingTests.swift
Packages/macOS/CmuxNext/Tests/CmuxNextWorkspaceNamingTests/WorkspaceAutoNameTests.swift

agent-pane-before: the media could not be published (refused 3 file(s) that show private names: 24985/6bb92f75/next-agent-pane-before/shots/02-open-agent-chat.png (fleet host name, fleet Mac mini name); 24985/6bb92f75/next-agent-pane-before/shots/03-que)

agent-pane-after: the media could not be published (refused 3 file(s) that show private names: 24985/6bb92f75/next-agent-pane-after/shots/02-open-agent-chat.png (fleet host name, fleet Mac mini name); 24985/6bb92f75/next-agent-pane-after/shots/03-queue)

Core UI (before): FAILED — 16 ok, 3 failed, 1 unavailable

tour

Video (mp4)

# Step Result Command
1 Launch ok
2 New workspace ok cmux workspace new --name Tour
3 Type in the terminal ok cmux workspace name:Tour screen current pane current tab current terminal current write --text "echo hello from the cmux-next tour\r"
4 A command reports progress: tab loading spinner ok cmux workspace name:Tour screen current pane current tab current terminal current write --text "clear; printf '\\033]9;4;3\\007'; sleep 900\r"
5 Split right failed: exited 1 cmux action run splitRight
6 Split down failed: exited 1 cmux action run splitDown
7 New terminal tab failed: exited 1 cmux action run newSurface
8 Browser tab ok cmux tab new-browser --url https://example.com
9 Hide the sidebar ok cmux action run toggleSidebar
10 Show the sidebar ok cmux action run toggleSidebar
11 Notification ok cmux notify --title Tour --body "Hello from CI"
12 Notifications panel ok cmux action run showNotifications
13 Agent chat ok cmux agent new-chat
14 Agent workspace ok cmux workspace new --name Agent
15 Agent starts ok cmux workspace name:Agent screen current pane current tab current terminal current write --text "clear; printf '\\033]7501;state=working\\033\\\\'; sleep 8; printf '\\033]7501;state=done\\033\\\\'; sleep 900\r"
16 An agent works: row working spinner ok cmux workspace new --name Notes
17 The agent finishes: done mark in the spinner's place ok
18 Session tree: keycaps on the first rows ok cmux settings set sidebar.sessionTree true
19 Session tree back off for later tours ok cmux settings set sidebar.sessionTree false
20 Profile menu unavailable: exited 1 (the menu shot needs a screen capture route) cmux action run sidebar.profileMenu

Failed steps:

5. Split right
Split right

6. Split down
Split down

7. New terminal tab
New terminal tab

Screenshots (12)

1. Launch
Launch

2. New workspace
New workspace

3. Type in the terminal
Type in the terminal

4. A command reports progress: tab loading spinner
A command reports progress: tab loading spinner

8. Browser tab
Browser tab

9. Hide the sidebar
Hide the sidebar

11. Notification
Notification

12. Notifications panel
Notifications panel

13. Agent chat
Agent chat

16. An agent works: row working spinner
An agent works: row working spinner

17. The agent finishes: done mark in the spinner's place
The agent finishes: done mark in the spinner's place

18. Session tree: keycaps on the first rows
Session tree: keycaps on the first rows

### Core UI \(after\): FAILED — 16 ok, 3 failed, 1 unavailable

tour

Video (mp4)

# Step Result Command
1 Launch ok
2 New workspace ok cmux workspace new --name Tour
3 Type in the terminal ok cmux workspace name:Tour screen current pane current tab current terminal current write --text "echo hello from the cmux-next tour\r"
4 A command reports progress: tab loading spinner ok cmux workspace name:Tour screen current pane current tab current terminal current write --text "clear; printf '\\033]9;4;3\\007'; sleep 900\r"
5 Split right failed: exited 1 cmux action run splitRight
6 Split down failed: exited 1 cmux action run splitDown
7 New terminal tab failed: exited 1 cmux action run newSurface
8 Browser tab ok cmux tab new-browser --url https://example.com
9 Hide the sidebar ok cmux action run toggleSidebar
10 Show the sidebar ok cmux action run toggleSidebar
11 Notification ok cmux notify --title Tour --body "Hello from CI"
12 Notifications panel ok cmux action run showNotifications
13 Agent chat ok cmux agent new-chat
14 Agent workspace ok cmux workspace new --name Agent
15 Agent starts ok cmux workspace name:Agent screen current pane current tab current terminal current write --text "clear; printf '\\033]7501;state=working\\033\\\\'; sleep 8; printf '\\033]7501;state=done\\033\\\\'; sleep 900\r"
16 An agent works: row working spinner ok cmux workspace new --name Notes
17 The agent finishes: done mark in the spinner's place ok
18 Session tree: keycaps on the first rows ok cmux settings set sidebar.sessionTree true
19 Session tree back off for later tours ok cmux settings set sidebar.sessionTree false
20 Profile menu unavailable: exited 1 (the menu shot needs a screen capture route) cmux action run sidebar.profileMenu

Failed steps:

5. Split right
Split right

6. Split down
Split down

7. New terminal tab
New terminal tab

Screenshots (12)

1. Launch
Launch

2. New workspace
New workspace

3. Type in the terminal
Type in the terminal

4. A command reports progress: tab loading spinner
A command reports progress: tab loading spinner

8. Browser tab
Browser tab

9. Hide the sidebar
Hide the sidebar

11. Notification
Notification

12. Notifications panel
Notifications panel

13. Agent chat
Agent chat

16. An agent works: row working spinner
An agent works: row working spinner

17. The agent finishes: done mark in the spinner's place
The agent finishes: done mark in the spinner's place

18. Session tree: keycaps on the first rows
Session tree: keycaps on the first rows

Tours are data in scripts/cmux-next/media/tours: add a step or a tour file to show your feature.

Gallery before/after for 6bb92f7: 16 states rendered, 5 images differ, 1819 more touched states not rendered. Images are in the run's artifact, not on this public PR.

gh run download 40141162901 -R manaflow-ai/cmux -n gallery-advisory-24985-6bb92f7517a486392b599f4a056ab362baeb3337 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.chat-width/standard Apple System Colors Light changed 1.53% imports types.ts (2 hops)
agent-pane.chat-width/standard Apple System Colors unchanged 0% imports types.ts (2 hops)
agent-pane.chat-width/wide Apple System Colors Light unchanged 0% imports types.ts (2 hops)
agent-pane.chat-width/wide Apple System Colors unchanged 0% imports types.ts (2 hops)
agent-pane.chat-width/wide-blocks Apple System Colors changed 23.4% imports types.ts (2 hops)
agent-pane.chat-width/wide-blocks Apple System Colors Light changed 1.53% imports types.ts (2 hops)
agent-pane.composer-floats/scrolled-to-end Apple System Colors Light unchanged 0% imports types.ts (2 hops)
agent-pane.composer-floats/scrolled-to-end Apple System Colors unchanged 0% imports types.ts (2 hops)
agent-pane.composer-floats/composer-grown Apple System Colors Light unchanged 0% imports types.ts (2 hops)
agent-pane.composer-floats/composer-grown Apple System Colors unchanged 0% imports types.ts (2 hops)
agent-pane.docked-chat/new-chat Apple System Colors Light unchanged 0% imports types.ts (2 hops)
agent-pane.docked-chat/new-chat Apple System Colors unchanged 0% imports types.ts (2 hops)
agent-pane.docked-chat/after-turn Apple System Colors Light unchanged 0% imports types.ts (2 hops)
agent-pane.docked-chat/after-turn Apple System Colors unchanged 0% imports types.ts (2 hops)
agent-pane.docked-chat/working Apple System Colors Light unchanged 0% imports types.ts (2 hops)
agent-pane.docked-chat/working Apple System Colors unchanged 0% imports types.ts (2 hops)
agent-pane.docked-chat/typing-in-dock Apple System Colors Light unchanged 0% imports types.ts (2 hops)
agent-pane.docked-chat/typing-in-dock Apple System Colors unchanged 0% imports types.ts (2 hops)
agent-pane.docked-chat/long-title Apple System Colors Light unchanged 0% imports types.ts (2 hops)
agent-pane.docked-chat/long-title Apple System Colors unchanged 0% imports types.ts (2 hops)
agent-pane.gutter-select/from-left-margin Apple System Colors Light unchanged 0% imports types.ts (2 hops)
agent-pane.gutter-select/from-left-margin Apple System Colors unchanged 0% imports types.ts (2 hops)
agent-pane.gutter-select/from-right-margin Apple System Colors Light unchanged 0% imports types.ts (2 hops)
agent-pane.gutter-select/from-right-margin Apple System Colors unchanged 0% imports types.ts (2 hops)
agent-pane.inspector/chat-menu Apple System Colors Light unchanged 0% imports types.ts (2 hops)
agent-pane.inspector/chat-menu Apple System Colors unchanged 0% imports types.ts (2 hops)
agent-pane.inspector/wire-log Apple System Colors Light changed 0.0277% imports types.ts (2 hops)
agent-pane.inspector/wire-log Apple System Colors changed 0.0073% imports types.ts (2 hops)
agent-pane.orchestration-lab/local-queue Apple System Colors Light unchanged 0% imports types.ts (2 hops)
agent-pane.orchestration-lab/local-queue Apple System Colors unchanged 0% imports types.ts (2 hops)
agent-pane.orchestration-lab/build-box Apple System Colors Light unchanged 0% imports types.ts (2 hops)
agent-pane.orchestration-lab/build-box Apple System Colors unchanged 0% imports types.ts (2 hops)

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 24, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-ii7sy created for this PR by the cmux coordinator.

@blacksmith-sh

This comment has been minimized.

@teamleaderleo teamleaderleo added the media-tour Run the cmux-next UI tour (cmux-next-media.yml) on every push label Oct 24, 2026
@blacksmith-sh

blacksmith-sh Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

Found 11 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp0vp7q53c/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpvswxg2gx/summary-fail.json (live):/summary-fail.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
test_a_branch_that_merges_feat_cmux_next_in_is_judged_on_its_own_changes (main.PreP
ushGateTests.test_a_branch_that_merges_feat_cmux_next_in_is_judged_on_its_own_changes)/
test_a_branch_that_merges_feat_cmux_next_in_is_judged_on_its_own_changes (main.PreP
ushGateTests.test_a_branch_that_merges_feat_cmux_next_in_is_judged_on_its_own_changes)
View Logs
test_a_branch_that_merges_feat_cmux_next_in_is_judged_on_its_own_changes (main.PreP
ushGateTests.test_a_branch_that_merges_feat_cmux_next_in_is_judged_on_its_own_changes)/
test_a_branch_that_merges_feat_cmux_next_in_is_judged_on_its_own_changes (main.PreP
ushGateTests.test_a_branch_that_merges_feat_cmux_next_in_is_judged_on_its_own_changes)
View Logs
test_a_merge_cannot_use_an_upstream_removal_to_pay_for_the_branch_s_own_debt (main.
PrePushGateTests.test_a_merge_cannot_use_an_upstream_removal_to_pay_for_the_branch_s_ow
n_debt)/
test_a_merge_cannot_use_an_upstream_removal_to_pay_for_the_branch_s_own_debt (main.
PrePushGateTests.test_a_merge_cannot_use_an_upstream_removal_to_pay_for_the_branch_s_ow
n_debt)
View Logs

...and 1 more test failures. View all on Blacksmith

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@cursor

cursor Bot commented Oct 24, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo teamleaderleo added the hold cmux-next batch queue: keep this PR out of the batch (docs/ci/cmux-next-batch.md) label Oct 24, 2026
@teamleaderleo teamleaderleo removed the hold cmux-next batch queue: keep this PR out of the batch (docs/ci/cmux-next-batch.md) label Oct 25, 2026
@teamleaderleo
teamleaderleo merged commit de9989a into feat-cmux-next Oct 25, 2026
301 of 327 checks passed
@teamleaderleo
teamleaderleo deleted the nx-sidebar-autoname branch October 25, 2026 00:52
@github-actions

Copy link
Copy Markdown
Contributor

Shipped in:

teamleaderleo added a commit that referenced this pull request Oct 25, 2026
…he sidebar's Older row (#25054)

* acpmux: _acpmux/sessions takes peer and status filters, applied before paging

A machine group's Older row (closed chats of one peer, a page at a time) needs only that peer's
closed sessions, not the whole multi-megabyte list (#24950 follow-up).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16f97-49ec-7ac0-8a7a-00dc57b9e443&host=cosmic-gray

* acpmux: bless the protocol IR (also the titleSource drift #24985 left on base)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16f97-49ec-7ac0-8a7a-00dc57b9e443&host=cosmic-gray

* acpmux: _acpmux/watch refuses peer/status (its events cover every session); an empty filter is none

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16f97-49ec-7ac0-8a7a-00dc57b9e443&host=cosmic-gray

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch had an error being deployed

1 failed and 3 inactive deployments
artifacts — 6bb92f75 Deployed Oct 24, 2026 by teamleaderleo via add the Windows daemon to the tree #51177
sentry-dsyms — 6bb92f75 Deployed Oct 24, 2026 by teamleaderleo via upload cmux-tui dSYMs to Sentry #51177
cmux-tui-merge-tree — 6bb92f75 Deployed Oct 24, 2026 by teamleaderleo via publish the merge tree #5612
ci-routing-agent — 6bb92f75 Deployed Oct 24, 2026 by teamleaderleo via namespace autofix #2497
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

media-tour Run the cmux-next UI tour (cmux-next-media.yml) on every push risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant