cmux NEXT transcript: the agent-session chip is a link chip, centred on its icon, lit alone
Leo, 2026-11-01, on the agent-session chip in a received message's line (a peer lane's host/name):
this highlight is both not aligned with the icon vertically and too small and also not prominent enough because the whole line gets highlighted and it's not obvious that clicking on this will be a new thing
Spec: leo-workspace design/chat-transcript.md (surface chat-transcript), new section "Session link chip". The spec update is in a separate leo-workspace PR.
What changed
-
One look for a chip that opens a chat. This is
AgentTagwithonClick, nowbutton.cv-agent-tag.is-open, andAgentTag.cssowns the look:- the link colour (
--agent-link, the same blue as URL chips in replies) on a 13% tint of it, with a hairline ring; - the tool row's height (
--cv-tool-row-height, 22px), with 8px of padding before the name and 4px after; - an open cue (β) after the name, at 60% that lights to full on hover or focus.
Before this, three rule sets fought over the received sender: AgentTag.css's grey tag with a negative margin,
.cv-received__from--open's 2px/4px padding and negative margin, and its 8% grey hover. That gave the tight strip. Those rules are removed. - the link colour (
-
Centred on the icon. The received line's sender mark (
.cv-received__mark) is now a centred box the height of the glyph line, with its glyph as a block. Before, the glyph sat on a text baseline inside an inline-flex box, which put it off the chip's centre. -
Hover lights only the chip. When the chip is pointed at or focused, these all stay as they are at rest:
- on the received line: the hover plate, the text tone, the preview colour and the Reply/actions slot;
- on the sent row: the
.cv-tool:focus-withinlift; - on activity rows and agent-message lines: the colour lift.
-
Same chip everywhere. The sent row's recipient (
.cv-sent__target) now usesAgentTag. A reply's started-chat chip (StartedSessionChip) gets the same β cue and the link colour. -
Other inline links in rows (from an audit of file paths, PR/URL chips and commit links):
- A written file's name (
.cv-tool__file.is-link) and a commit link (a.cv-sha) now take the link colour on hover. Before, they took the row's own text colour, so they looked like the row lighting up. - URL and PR chips already read as links, with no fill, so they are unchanged.
- A written file's name (
Test
webviews/test/session-chip-browser.test.ts uses the harness test/browser/session-chip.harness.tsx. In real Chromium, in dark and light, for the received line and the sent row, it checks:
- the chip's centre is within 0.5px of the row icon glyph's centre;
- the chip is at least 22px tall, its name is inset at least 6px, and it is narrower than 60% of the line;
- its colour differs from the line's, and the cue is present;
- on hover the chip's fill changes and the cue reaches full opacity, while the line's background, colour and preview colour stay as at rest;
- a click opens the chat and lights nothing on the line.
It also checks that a reply's started-chat chip carries the cue.
Observed / Not run
- Ran locally, all passing:
bun teston the jsdom suites that render these components: incoming-sender-chip, SentMessageLine, RowGrammar, TranscriptActivityRow, agent-message-card, startedSessions (the expected markup now includes the cue), queue-agent-message, lane-notice-card, session-hover-card and incoming-minimal-collapse.- design-token ratchet, popup-hover-reveals, fixed-waits and oxfmt.
clickable-cursor.test.tstimed out at 5s on this 2-core VM under load (it took 41s); it was not re-run alone.- Review at 1b0a3fb (subagent, Opus) blocked on activityTone.test.ts selector checks and the Chief text avatar losing its centring; both fixed at 18726a5.
- Not run locally: the browser test, because Chromium can't launch on this lane VM (missing system libraries). It runs through
cmux-ci test, with results in a comment below. - Not run locally: the full type check, which did not finish on this 2-core VM. CI runs it.
Changelog
Changed: in the agent chat, a chat's name on a message row is now a link chip that opens that chat, centred on the row's icon. Pointing at it lights only the chip, with an open arrow.
risk: normal (CSS and one shared component).
π€ Generated with Claude Code
Agent session: agent session
![View with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v3-3x.png)
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Makes the agent-session chip on transcript rows a link chip: centred on its row's icon, with the link colour on a tint, real padding, and an open arrow (β) that lights on hover. Before, it was a tight grey strip off the icon's centre, and hovering lit the whole line; now pointing at the chip lights it alone.
- One rule in
AgentTag.cssowns the chip look; the received line's own padding, negative margins, and hover for the open sender are gone. - The sender mark is a centred box so glyph and chip share a centre; the sender's name starts on the rows' text column, an open chip pulling back its padding to meet it, a plain (non-clickable) sender keeping its gap to the preview.
- Pointing at or focusing the chip never lights the row: the received line's plate, tone, preview, and actions, the sent row's focus lift, and the activity rows' lift all skip a line whose open chip is pointed at.
- The sent row's recipient uses
AgentTag, and a reply's started-chat chip gets the same cue and link colour; a written file's name and commit links take the link colour on hover too. webviews/test/session-chip-browser.test.tsruns against a real light and dark theme in Chromium, comparing painted colours (the harness uses the scheme's own link blue), and checks centring, padding, link colour, and that hover and click light no row.