cmux NEXT: a finished reply no longer rings its chat pane in blue by default

Merged
TE
15d ago
+90-12

Leo (2026-10-21): "the model response does a double blue ring pulse". That was agreed not to be the default.

Cause. #22678 ("cmux NEXT: the unread ring stays until its own pane is clicked or typed in", Austin Wang, merged 2026-10-21 05:47Z) added NotificationCenterService.agentTurnEnded. When an agent chat's turn ends, every pane showing that chat gets the notification-blue attention ring, including the chat you are watching. Clicking or typing into the pane then plays classic's double-blink dismiss flash. Before #22678, nothing rang here: acpmux reads a turn that ends in a shown chat right away. Lawrence's follow-up 3caebdc9 (pushed directly, no PR) added the glow and the full-strength double blink. Leo's nightly 03960f5 already has #22678.

Takes back #22678 (its agent-turn ring default only): Leo said this ring would not be on by default.

Change (smallest version: default off, never blue, plus a test):

  • The agent-turn ring is now opt-in through Debug Settings notifications.attention.agentTurnRing (AgentTurnRing.tunable), off by default. When it is off, a reply that finishes rings nothing, which was the behavior before #22678. Terminal and other notification rings, their blue, and their dismiss flash are unchanged.
  • When it is on, the ring is a hairline (one device pixel) in the pane-border color with no glow, never the notification blue. It keeps that look through its dismiss flash (AttentionMark.hairline). A user-set notifications.sources.agent.color still wins.
  • AgentTurnRingTests:
    • By default, a finished turn creates no attention mark.
    • The opt-in mark is a hairline: not blue, at most 1 pt wide, no glow, and its flash is not blue either.
    • A later notification's ring is the classic blue ring again.

No capture: this is the native pane overlay (CALayer), not a webview, so scripts/gallery-compare.sh does not cover it, and app builds are not allowed on the session host. The default now draws nothing on a turn end, which is the same as before #22678. The tests pin the opt-in look.

Agent session: cosmic-gray

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Stops an agent chat's pane from ringing in the notification blue when its reply finishes: the turn-end ring added in #22678 is now opt-in and off by default.

Changes

  • Add Debug Settings notifications.attention.agentTurnRing (AgentTurnRing.tunable), default off; when off, a finished reply rings nothing, as before #22678.
  • When on, the ring is a one-pixel hairline in the pane border color with no glow, never the notification blue, including through its dismiss flash.
  • Terminal and other notification rings are unchanged.
  • AgentTurnRingTests cover the default-off behavior, the hairline look when on, and that a later notification's ring is blue again.

Leo-ask: ask-651924f676