cmux NEXT: agent.openSessionTab --host <peer> opens that machine's chat (as this Mac's acpmux mirrors it)

Merged
TE
12d ago
+356-3

Leo, 2026-10-24, word for word: "the whole ACP MUX thing, like that, it should just be able to show me, say on my sidebar, right? Like we already discussed this, like with the cloud icon, the group where, you know, on a different machine or whatever, there's the other agent sessions, the other workspaces running, but you guys aren't doing that yet."

Follow-up to #24950 (the sidebar's machine groups). The lane brief says a remote chat opens with agent.openSessionTab and --host. Until now, a peer host was refused ("… runs on huge-blue", AgentTabs.hostRefusal).

Summary

  • agent.openSessionTab {session, host: "<peer>"} (cmux agent open-tab SESSION --host huge-blue) now opens that peer's chat as this Mac's acpmux mirrors it. The session can be named by id, by <peer>/<id>, by <peer>/<name> or by its bare name. The tab still binds to this Mac's acpmux, which forwards to the peer (cx-k21v holds). This is the same path the sidebar's machine groups and the Priority view use, and it opens no terminal and no workspace.
  • If the peer is mirrored but has no live chat by that name, the action refuses with "huge-blue has no running chat named X." If more than one live chat has the name, it refuses and asks for the session id, never picking one at random. A host that isn't a mirrored peer gets the existing refusal, unchanged.
  • AgentPeerSession.resolve (CmuxNextAgentLanes) is a pure function and is unit-tested.

No capture: no UI changes. The only user-visible change is an action that used to refuse now opening the existing chat tab, plus one refusal string.

Testing

  • AgentPeerSessionTests: resolving by id, qualified id, name and bare name; a name matches only on its own peer; a repeated name is refused (acpmux names can repeat), while its id still opens; non-peer hosts.
  • Fleet run at 24f2a2e (package-test-lane.sh suite): AgentPeerSessionTests 4/4 and RemoteMachinesSidebarTests 9/9 passed; the app and its tests compiled.
  • Localization: two new keys, handlers.misc.failed.noPeerSession and handlers.misc.failed.ambiguousPeerSession, in all 21 locales of MiscHandlers.xcstrings, with positional arguments. The localization_catalog.py check parity count is unchanged from base.

Risk: normal. It widens one action's accepted host values and changes no socket or relay policy: the tab binds only to this Mac's own acpmux, as before.

Changelog

Changed: cmux agent open-tab SESSION --host <machine> opens a chat running on another of your machines.

Agent session: cosmic-gray

šŸ¤– Generated with Claude Code