Repository navigation
fix(acpmux, agent pane): Ctrl-B works in the cmux model router's chats; acpmux says which chats it moves - #23211
Merged
Merged
Conversation
…do, not the harness's name The cmux model router's profile is Claude Code under acpmux, named `cmux`, and gets no Ctrl-B; an ACP agent a user named `claude-acp` gets the hint and is refused. These tests want each chat's summary to say `backgroundsWork` and the pane to read it. They fail on the base. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15cfc-6db9-7611-bb2a-f87286aa9ae6&host=cosmic-gray
…mux says which chats it moves The pane offered Ctrl-B by harness name (`claude`, `claude-*`), while acpmux takes `_acpmux/process/background` for any Claude Code (claude-stdio) harness. So the model router's `cmux` profile, Claude Code under another name, got no Ctrl-B, and an ACP agent named `claude-*` got a hint acpmux refuses. Every session summary now says `backgroundsWork`, from the same predicate `process/background` checks (`hub/processes.rs` `backgrounds_work`). The pane's `backgroundsWork` reads it, plus the existing no-peer and not-Cloud checks; an acpmux that does not say gets no Ctrl-B. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15cfc-6db9-7611-bb2a-f87286aa9ae6&host=cosmic-gray
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15cfc-6db9-7611-bb2a-f87286aa9ae6&host=cosmic-gray
teamleaderleo
temporarily deployed
to
cmux-tui-merge-tree
October 21, 2026 08:39 — with
GitHub Actions
Inactive
Contributor
|
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)
|
Collaborator
Author
|
Owned by chat-background on cosmic-gray · session |
Collaborator
Author
|
Bead |
teamleaderleo
temporarily deployed
to
artifacts
October 21, 2026 09:15 — with
GitHub Actions
Inactive
teamleaderleo
temporarily deployed
to
sentry-dsyms
October 21, 2026 09:15 — with
GitHub Actions
Inactive
teamleaderleo
temporarily deployed
to
artifacts
October 21, 2026 09:19 — with
GitHub Actions
Inactive
This was referenced Oct 21, 2026
Merged
teamleaderleo
added a commit
that referenced
this pull request
Oct 21, 2026
Merged feat-cmux-next (#23211 added backgroundsWork to SessionSummary); SessionDetail flattens it, so the IR and the web types carry it too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15cfc-663f-7650-b9f7-64d198c6b88b&host=cosmic-gray
teamleaderleo
added a commit
that referenced
this pull request
Oct 21, 2026
…ebab case (#23277) gallery-coverage requires lower-kebab-case variant names; the claudeAcp variant from #23211 reddened "the entries are valid" on feat-cmux-next. Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15cfc-6db9-7611-bb2a-f87286aa9ae6&host=cosmic-gray Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo
added a commit
that referenced
this pull request
Oct 21, 2026
… and _acpmux/event (#20894) * acpmux protocol: type attach, events, detach, view, markUnread, watch and _acpmux/event PR2 of the typed acpmux protocol (PR1 #20576). The registry types the session-log methods and the `_acpmux/event` notification (protocol/events.rs): AttachParams/AttachResult with SessionDetail (the summary plus what an attached client draws), EventsParams/EventsResult, SessionRef, ViewParams, WatchParams and SessionEvent. `server::event_value` builds its record from SessionEvent, so the wire shape has one source. `_acpmux/sessions` and `_acpmux/watch` page with limit and cursor since PR1 landed; SessionsParams and SessionsResult now say so (nextCursor). Also registers harness/update and sessions/restart_harness, which base serves now. The web client sends these methods through a typed helper, and the pane's EventRecord derives from the generated SessionEvent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * acpmux protocol: SessionDetail carries every SessionSummary field again SessionDetail flattens SessionSummary, but the committed IR still had the summary of Oct 14: base has since added children, depth, lifecycleReceipt, mcpServers, pullRequests, shortName, spawnedBy and startedBy. The IR's SessionDetail is now the current summary plus its own fields, and the web types are regenerated. direct.ts imports the generated types once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15cfc-663f-7650-b9f7-64d198c6b88b&host=cosmic-gray * acpmux protocol: SessionDetail takes base's backgroundsWork Merged feat-cmux-next (#23211 added backgroundsWork to SessionSummary); SessionDetail flattens it, so the IR and the web types carry it too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15cfc-663f-7650-b9f7-64d198c6b88b&host=cosmic-gray * tests: drop the registry line a local hook added in the base merge tests/test_media_auto_tour.py is base's (unregistered there); registering it belongs to the base, not to this PR. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15cfc-663f-7650-b9f7-64d198c6b88b&host=cosmic-gray --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
|
Shipped in:
|
This branch was previously deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ctrl-B now works in chats from the
cmuxmodel-router profile. Before, the pane decided which chats get Ctrl-B from the harness's name (claudeorclaude-*), but acpmux accepts_acpmux/process/backgroundfor any Claude Code (claude-stdio) harness. Two things went wrong:cmux, so it got no Ctrl-B.claude-*showed the hint, and acpmux then refused the request.What changed
backgroundsWork. acpmux computes it with the same checkprocess/backgrounduses (backgrounds_workinhub/processes.rs: the profile's kind is claude-stdio). So the summary and the request always agree.spec/acpmux-protocol.json) and the generatedtypes.tsare regenerated.docs/background-processes.mdnow says clients offer Ctrl-B from this field, not from the name.backgroundsWork()reads the summary's field, plus the existing no-peer and not-Cloud checks. If the summary doesn't have the field (an older acpmux), the chat gets no Ctrl-B. For another harness, a peer's chat, or a Cloud chat, the hint stays hidden and Ctrl-B stays the composer's, as before.agent-pane.background-hintgains aroutervariant (hint shown) and aclaudeAcpvariant (no hint). The sharedchat()fixture sets the field for Claude chats, so other gallery entries don't change.Why a summary field:
steeringalready works this way (a capability the session summary reports, which clients read). It also lets the client stop guessing harness names. The other option,initialize's operations list, applies to the whole connection, not to one chat.Changelog
Fixed: Ctrl-B moves running work to the background in chats from the cmux model router, and the Ctrl-B hint no longer shows in ACP chats that only have a Claude-like name.
Tests: red on the base, green on the head
The tests are committed alone first (7633166), and the fix follows (88f6549). Everything ran on cmux16.
cargo test -p acpmux --test hub_integration a_chats_summary_says_whether_ctrl_b_moves_its_workbackgroundsWorkisNullwherefalseis expected.bun test test/run-in-background.test.tscmuxchat gotfalse, and theclaude-acpchat gottrue.CMUX_BROWSER_TESTS=1 bun test test/agent-pane-ctrl-b-background.test.tsObserved / Not run
Observed on cmux16 at the head (1bc4ff0, after merging feat-cmux-next at 1369f27):
processeshub tests pass (the new one, Ctrl-B, the Codex processes)protocol_ir_is_currentpassescargo fmt --checkis cleanclippy -p acpmux --all-targets(run before the merge) reports only three warnings, all outside this change and all on the base:sort_by_keyin cmux-worktree-care,cmp_ownedin steer_now_tests, anddouble_ended_iterator_lastin tests/prompt_images.rsvp checkfinds no warnings, lint errors or type errorsacpmux-protocol:checkreports the generated code is currentbun run checkstops atcheck:switch-fetches, which is red on 1369f27 too (composer/keptAttachments.ts:134)ui-rulesfails on CopyButton.tsx:43-44, which is red on 1369f27 tooBefore the merge, on 3020a01 plus this change,
bun run checkshowed 0 errors. Its two warnings are in HistoryPage.tsx and test/sidebar-rail-css.test.tsx, neither touched here.Four acpmux tests fail the same way on 3020a01 with and without this change, so they are base reds:
protocol_registry_names_every_served_methodcare_a_stopped_daemon_s_sessions_are_use_not_opensession_offers::an_offered_chat_is_a_chip_only_…transfer_guard::a_chat_with_no_asking_mode_moves_…Not run:
No capture: this is a webview-only change. The browser test and the
agent-pane.background-hintgallery variants cover it.🤖 Generated with Claude Code
Agent session: cosmic-gray
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Fixes Ctrl-B in chats from the
cmuxmodel router profile. The pane previously decided which chats offer Ctrl-B from the harness name (claudeorclaude-*), but acpmux accepts background requests for any Claude Code (claude-stdio) harness. So thecmuxrouter profile got no Ctrl-B, while an ACP agent namedclaude-*showed the hint and got refused.Every session summary now reports
backgroundsWork, computed with the same check that_acpmux/process/backgrounduses. The pane reads this field instead of guessing from the harness name.cmuxand the agent pane, a chat'sbackgroundsWorkcomes from the summary, so the hint and the request always agree.cmuxrouter chat (hint shown, work moves) and an ACP agent namedclaude-acp(no hint, Ctrl-B refused).Written for commit 1bc4ff0. Summary will update on new commits.