cmux NEXT: agent.openSessionTab --host <peer> opens that machine's chat (as this Mac's acpmux mirrors it)
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.noPeerSessionandhandlers.misc.failed.ambiguousPeerSession, in all 21 locales of MiscHandlers.xcstrings, with positional arguments. Thelocalization_catalog.py checkparity 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