cmux NEXT: unread ring appears steady, stays until its pane is clicked, then blinks out (classic parity, GUI agents too)
Merged
AU
15d ago+504+504+012345678901234567890123456789-52-52-01234567890123456789
Summary
This makes cmux NEXT's blue unread pane ring behave the way Austin asked on 2026-10-20, matching cmux classic's ring.
- Arrival: when an agent finishes, a steady blue ring appears.
notifications.attention.stylenow defaults tosteady;blinkandpulsestay available. - Dismiss: the ring stays until you go into that pane, by clicking or typing in it or opening its notification.
notifications.dismissalnow defaults toclick;focusstays a choice. Then the ring blinksblinkCounttimes and goes away, as classic's dismiss flash does. A ring cleared any other way (Mark Read, a timeout, a mute, Dismiss Highlight, another device) fades without the blink. - Clicks read only the clicked pane: a click reads the pane under the pointer, found with a layout hit test. A click on the sidebar, the titlebar or another pane no longer clears the focused pane's ring.
- Finishes in a pane you can see: a turn or an OSC 7501
donethat finishes in a visible pane keeps its ring underclick. It posts no banner (cx-kxa2, cx-slk1h), the feed is told it didn't alert, and the timeout dismissal still gets its deadline. - GUI agent chats: these now ring when their turn ends. acpmux reads a turn that ends in a shown chat at once (cx-n8ou), so nothing marked the pane.
AgentTurnStateStore.onTurnEndedfeedsNotificationCenterService.agentFinished. Mark Workspace Read, Mark All Read and Clear All clear those rings too.
Takes back 78680d558526 (pushed directly on 2026-10-19, no PR), which set the focus dismissal default. Why: Austin dogfooded it and rings cleared before he clicked the pane. Lawrence's u2414 words were also "you click and it gets dismissed".
Changelog
- Changed: In cmux NEXT, a pane's blue unread ring appears steady when an agent finishes, including agent chats, and stays until you click or type in that pane; it then blinks out.
Testing
Command: cmux-ci run --class light --script scripts/ci/package-test-lane.sh --arg=suite --arg=Packages/macOS/CmuxNext --arg=<suites>
- Red 22646d37 (step 7ae3e9d2):
UnreadRingClickReadTestsfails. A click in the other pane read the focused pane (ack surface:1), and a click outside the panes read one too. The default tests fail onfocus. - Red fa5f7fdc (step f7e502f3): no dismiss flash, and the style default was still
blink. - Head 65aae85650e279ee2af1d3b6d734a59a6ce5f49a (step 454e5af5): 12 suites pass: AgentTurnRingTests, AttentionDismissFlashTests, AttentionDefaultTests, PaneAttentionDismissFlashTests, AttentionSteadyTests, StaticStatusIndicatorTests, BlinkRateCapTests, UnreadRingClickReadTests, UnreadDismissDefaultsTests, UnreadRingDismissTests, WatchedDoneReadTests and AgentChatDoneDotTests.
scripts/cmux-next/prepush-gate.py: no new violations.
Observed / Not run
- Observed: Austin dogfooded tags
22678-unread-ring-click-onlyand22678-unread-ring-steady-flash, which led to these changes. Tag22678-unread-ring-gui-agents(1549a2ad) is with him now. - Not run: the generated
docs/mdm/*still list the old defaults until the autofix regenerates them. TheagentTurnEndedtab lookup and theobserveAttentionentry-read collection have no direct test. Nothing was run on the full CmuxNext suite.
🤖 Generated with Claude Code