cmux mcp: agents open in their own workspace, Chief in the task's workspace; workspace evals
LA
4d ago+321+321+012345678901234567890123456789-31-31-01234567890123456789
Summary
Agents open their splits, files, diffs and pages in their own workspace, and Chief opens a task's things in that task's workspace (Lawrence 2026-11-02: "when there are a ton of workspaces, agents ... should open it in the same workspace ... careful with chief as well"). Also the r17 instruction changes (panes and columns are cmux objects; open names its pane). It contains #29080 until that lands.
- Untargeted viewers go beside the caller. An MCP
app_file_open, diff viewer ortab_new_browsercall with no target went to the app's focused pane, which with many workspaces is often another workspace. It now goes throughopen's placement beside the caller, when the app places the caller in a pane (db021ca, c1ee0b7). A pathless diff names the chat's folder. - Chief: "workspace of the task". In a Chief turn (
CMUX_CALLER_HOME_CHAT=1), theopenandcmux_execdescriptions say that a request with a workspace's name in it, or about its project, agent, server or files, opens in that workspace in the background, and Chief names the workspace. Only a request with no workspace opens beside Chief. The rule is not in the instructions, which would pass 2048 characters with it (30a49d8, ec6f6b4, a82b64b, af0e5f6; the rule starts each description). - Evals.
tests/tool-evals/cases/workspace.ndjson: 17 cases in a session of 6 workspaces where the person looks at another one (terminals, splits, files, diffs, sites, browser tabs, an asked-for other workspace, and Chief docked left). New checksstayed_in_workspaceandnew_panes. The stand-in app now opens an untargeted action in the focused pane and refuses unknown arguments, as the app does (it had hidden the leak).
Results (Claude CLI, MCP code mode, 2 samples per case, median per task)
| Run | Model | Pass | Leaks | Tokens | Seconds |
|---|---|---|---|---|---|
| Before (r17d, 14 cases) | Opus 5.5 | 27/28 | 0 | 77k | 18.6 |
| Before (r17d, 14 cases) | Sonnet 5.5 | 24/28 | 0 | 57k | 10.8 |
| Before (r17d, 3 Chief task cases) | Opus 5.5 | 4/6 | 2 | 92k | 27.8 |
| Before (r17d, 3 Chief task cases) | Sonnet 5.5 | 2/6 | 4 | 57k | 17.7 |
| After (r18e, 17 cases) | Opus 5.5 | 34/34 | 0 | 78k | 20.5 |
| After (r18e, 17 cases) | Sonnet 5.5 | 31/34 | 2 | 57k | 12.9 |
| After (r18f, 7 Chief cases) | Opus 5.5 | 14/14 | 0 | 78k | 14.9 |
| After (r18g = head af0e5f6, 7 Chief cases) | Opus 5.5 | 14/14 | 0 | 67k | 16.7 |
| After (r18f, 7 Chief cases) | Sonnet 5.5 | 14/14 | 0 | 58k | 12.8 |
| After (r18g = head af0e5f6, 7 Chief cases) | Sonnet 5.5 | 14/14 | 0 | 77k | 13.8 |
Changelog
- Changed: an agent's untargeted file, diff or page opens beside its chat in its own workspace, and Chief opens a task's things in that task's workspace.
Observed / Not run
- Red (rbx
cargo test --locked -p cmux-tui --lib -- <filter>): e7bda04an_untargeted_viewer_from_a_chat_opens_beside_itfailed; effd0f1 the Chief test failed; 8ced5fdchief_tools_open_in_the_workspace_of_the_task,an_untargeted_viewer_from_a_chat_opens_beside_itandan_untargeted_diff_names_the_chat_folderfailed. - Red at 14b2987:
chief_tools_open_in_the_workspace_of_the_taskandan_untargeted_diff_names_the_chat_folderfailed. - Green at af0e5f6 (and before at a82b64b):
cli::mcp cli::beside193 passed;--test cli caller_selector4 passed; clippy-D warnings0;cmux_surface classicandbrowser_enginepassed. - Observed: the eval results above (stand-in app, daemons and MCP on rbx).
- Not run: GPT 6 Astra and GPT 6.1 Sol (Codex through the subrouter fails, manaflow-ai/subrouter#640). A tagged app dogfood. The app's own placement for a plain terminal that runs
cmux file openwith no target (Swift,ControlRouter.placeBesideCaller) is not changed here.