Agent pane: a message's sender chip opens that chat beside this one, its tooltip naming the machine
What
Leo, about the sender chip on another agent's message in the agent pane (Leo-ask: ask-7325396234):
I THINK I WANNA BE ABLE TO CLICK ON THESE TO ACTUALLY GO TO THEM
Before: clicking a lane's chip (chief-ui, coord-deputy) did nothing. The chip already sent chat.offer.open, but the app opens that only for this chat's own family (#23159) and refused every other chat. A lane on a peer host also never resolved: acpmux lists it as huge-blue/chief-ui, while its message is signed with the bare name chief-ui.
After: clicking the chip opens the sender's acpmux chat in the pane to the right. If a tab already shows that chat, the click focuses it instead. This works for lanes on this Mac and on peers. The tooltip reads "Open chief-ui (huge-blue)", the session name plus its host (the gallery fixture uses the neutral host name studio-mac); for a chat on this Mac it reads "Open coord-deputy". Hover uses the theme accent ring over glass with cursor:pointer, and no orange.
Takes back #23159: nothing is reverted. AgentPaneRequest.offerOpen(String) becomes offerOpen(String, sender: Bool) so a message's sender chip can open its chat; #23159's family-only rule still holds for every other chat.offer.open caller.
How
- Page (
App.tsx): the chip's click goes through the existingchat.offer.openbridge call withsender: true. It is a separateopenSenderChat, so sub-session cards and the Subagents summary keep the family-only rule. The queued-message line (ComposerQueue.tsx) uses the same path throughSubsessions.openSender. - App (
AgentPaneOfferOpen):senderlets the call open any session the pane's daemon lists. This grants nothing new, because the page can already show any of those sessions in its own tab. Never the chat itself, and never from a New Tab page. No new native API: it reusesshowSession/openSidefrom #23159. subsessions.ts(useSenderChat): a peer's chat is also found by its bare name, and the store records each chat's host (cloudHost) for the tooltip.- New string
subagents.openOnHost("Open {name} ({host})") is translated in all 21 locales the agent-pane catalog ships.
Screenshots
Gallery entry agent-pane.incoming-message, variant sender-hover (Playwright on huge-blue, pointer over the chip):
| Dark | Light |
|---|---|
![]() | ![]() |
No capture: the Swift change only adds a request flag and draws nothing new. The chip's hover and tooltip are webview, captured from the gallery above.
Tests
webviews/test/incoming-sender-chip.test.tsxcovers four cases. A peer lane found by its bare name opens by its id, with tooltip "Open chief-ui (huge-blue)". A local chat opens by its message's id and its tooltip names no host. An unknown sender is not a button. A queued message's chip callsopenSender, not the family-onlyopen.AgentPaneOfferOpenTests.aMessagesSenderOpensBesideTheChatcovers the app side. Withsender, a non-family chat opens beside the chat, and a second click focuses its tab. Withoutsenderit is still refused, and the chat itself is never opened.- Run on huge-blue: the new test and
queue-agent-message,subsessionsandincomingMessagetests pass,bun run typecheckis clean, and so isprepush-gate.py. The Swift test runs on CI.
Agent session: Air-Blue
🤖 Generated with Claude Code

