cmux NEXT agent chat: a SendMessage card names its subagent, never a hex id
Leo: "UI ALSO NEEDS TO BE BETTER"
Leo-ask: ask-30580e47fa
Leo sent this at 17:26 PDT on 10-21, before #23962 (19:43 PDT) taught the card to name a subagent by its agentId. In his chat, two SendMessage cards read This agent ā a5b7309ddf7afa44d and This agent ā a997582716e0ae335. The same transcript already knew those subagents by title ("Time-cap pre-push owner check", "Review and merge rulebook PR 800").
What changes
- Named recipients. A message to a subagent reads by the Agent call's description whenever the loaded transcript carries the agentId that call answered with. This path already exists (
agentNames.ts, from #23962); this PR adds a test that runs it on the exact text Claude Code returns (agentId: ⦠(internal ID - ā¦)), with theto+recipient+recipient_kindinput Claude Code writes today. - Unknown ids read short. An id that no Agent call in the loaded transcript names (for example, history paged in after the spawn) reads as its first 8 characters (
a9975827), not the generic word "agent". Two such sends stay apart. - Full id in a tooltip. The recipient chip's
titleholdsAgent ID: <full id>(localized,message.recipientId, 21 locales) whenever the chip shows a description or a short id. A chip that opens a chat (onOpenName) keeps its button and handler. The tooltip only addstitle. message.agent("agent") is retired, since nothing uses it any more.message.recipientIdis added to the Channels pane table ingen-strings.mjs.- Gallery: a new
agent-pane.agent-message-row/sent-subagentsstate with two named background subagents and one unknown id.
Not touched: the "Subagent stopped" rows (#24051 and #24280, transcript-parity), the received-message rows and cards (#24207, #24190, #24091), #24147's delivery words. No CSS, layout, colour or glass changes.
Verification
bun test src/agent-session/acpmux/conversation/agentMessages.test.ts src/agent-session/acpmux/subagents/subagentFold.test.ts: 7 pass (huge-blue)bun run check: pass (oxlint, oxfmt, tsc, xcstrings keys, protocol codegen)scripts/cmux-next/prepush-gate.py: no new violations- Leo's own transcript events (two
subagent_spawned+ Agent results + two SendMessage calls, prompts stripped) replayed throughSubagentFold+agentNames:a5b7309ddf7afa44d -> "Time-cap pre-push owner check",a997582716e0ae335 -> "Review and merge rulebook PR 800".
Screenshots (gallery agent-pane.agent-message-row / sent-subagents)
Two named subagents and one id that no Agent call in the loaded transcript names. Before, the unnamed one read "agent". After, it reads a5b7309d. The full id is each chip's tooltip (headless Chromium doesn't draw native tooltips; the capture script read title="Agent ID: a5b7309ddf7afa44d" etc. from the DOM).
| Before | After | |
|---|---|---|
| Dark | ![]() | ![]() |
| Light | ![]() | ![]() |
Agent session: Air-Blue
š¤ Generated with Claude Code



