cmux-next: session side rail behind Debug Settings (cx-ncc.101)
Adds the session side rail (bead cx-ncc.101): a column beside the agent chat, modeled on Claude Code desktop's right rail. It has three cards:
- Environment: where the session runs (this Mac, an SSH peer or a Cloud host), its folder and worktree, and its branch.
- Context: the share of the context window used, as a percentage and a small bar. Expanded, it shows the token counts.
- Outputs: the files the session created or changed, with their line counts. A click opens the diff.
A header button shows and hides the rail. Every card reads acpmux's common session snapshot only, so it works for every harness.
It is off by default, behind Debug Settings agent.sessionRail ("Session side rail", Page section). Debug Settings exist only in DEV and NIGHTLY builds. This replaces #20834, which was stacked on the Labs registry (#20452, closed: per Lawrence, opt-ins live in Debug Settings until they are promoted to real Settings). The toggle travels with the chat header state, the same way quickComposer.floatingChat does. Flipping it updates open chats live, and it needs no settings schema, export or locale changes.
Left out:
- Remote Control: a Claude-only concept (Leo, 2026-10-14).
- Connectors: the card waits until acpmux reports each session's MCP servers (cx-ncc.105, separate PR).
Known gap: an Outputs click opens the chat's Changes view beside the chat, not the clicked file. The session summary's outputs behave the same way today.
Verification
bun test test/session-rail.test.tsx test/floating-chat.test.tsx test/chat-header-fold.test.tsx test/ui-rules.test.ts test/gallery-coverage.test.ts: 19 pass.- The rail test was red before the feature, then green, on #20834 (bda5ec3 red: missing module; a157773 green). Here it switches the toggle through the header state, as the App does.
check-concurrency,check-crash-safety,crash_ratchetandcheck-system-bluepass. The god-file check flags none of the touched files.- Swift compile: PR CI.
Captures
Real cmux NEXT DEV builds on cosmic-gray, with a fake HOME. The agent is the scripted fake agent. Base is feat-cmux-next 0489fd9ae7b8. Head stills come from 406634c, which has the same rail as the current head. Light | dark.
Before (base): the header has no rail button
| Light | Dark |
|---|---|
![]() | ![]() |
After: the rail open (Environment, Context, Outputs)
| Light | Dark |
|---|---|
![]() | ![]() |
Context unfolded: token counts
| Light | Dark |
|---|---|
![]() | ![]() |
A long folder path truncates inside the card
| Light | Dark |
|---|---|
![]() | ![]() |
An output click opens the diff beside the chat. At this pane width the rail overlays the chat; a follow-up closes it there and makes names win over folders.
| Light | Dark |
|---|---|
![]() | ![]() |
Toggling the rail and folding a card

Full quality:
Changelog
none
🤖 Generated with Claude Code
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Adds the session side rail (cx-ncc.101) beside the agent chat, modeled on Claude Code desktop's right rail. Its Environment, Context, and Outputs cards read only acpmux's common session snapshot, so they work for every harness. It's off by default behind Debug Settings agent.sessionRail (DEV and NIGHTLY builds only); a header button toggles it, and the state travels with the chat header so flipping it updates open chats live.
Fixes
- The chat menu instructions test flushes React's scheduled work before teardown, ending a flaky CI failure under load.
- The Channels live typing row drops its tooltip over its own text, which the tooltip-rule check had flagged.
Known gaps
- Outputs opens the chat's Changes view, not the clicked file, same as the session summary today.
- Remote Control is left out (Claude-only); Connectors waits for acpmux to report MCP servers (cx-ncc.105).









