[CMUX Next] Chief pet: agent notices as a glass deck
Summary
Second of four Chief pet PRs, stacked on #21728. The pet now pops up agent events as they arrive. They show as notice capsules above the pet, as Leo's pill-stack references draw them.
What shows
- Anything that would alert on this Mac also appears over the pet. "Would alert" is the same
NotificationPolicydecision a banner uses, so muted workspaces, quiet hours andnotifications.desktopapply. It shows even when the poster asked for no banner. - The hook in
NotificationCenterServiceis two lines:notifyChiefPetindeliver, andchiefPet?.readinacknowledge.
How it looks
- Glass capsules, about 330 × 56 pt, with a bold title and one muted line of the banner's text. There's no status glyph, matching the references and Codex's "quiet" dock style from its unpushed follow-up.
- The older notices peek out 8 pt below the front one, each 16 pt narrower per side, like a deck. They float 48 pt above the pet.
- Under Reduce Transparency the capsules use the solid overlay surface.
- A gold badge on the character counts notices that wait for you (questions, failures), as in reference
fd383405.
Interaction
- The rail's chevron unfolds the deck into a column of up to three capsules and flips to point down. With no notices, the chevron opens the Chief.
- Clicking a capsule opens its tab, the same way a banner click does.
Motion and lifetime
- One notice per tab. When the front notice gets identical content again, nothing redraws or animates.
- The only motion is a single fade-in when the capsules first appear, and it follows Reduce Motion. Nothing loops or blinks.
- A finished turn leaves after 8 s. A question or failure stays until its tab is read.
Reference
Matched: cmux-design-references/research/chief-chat-source-captures/d154d558-….png, at the same 1034 × 670 pixel size.
Folded:

Unfolded with the chevron:

The right side is a composite: the bundled mascot, the rail and the capsules drawn at this PR's point sizes at @2x. It is not a screen capture. The live look needs a dogfood build, since no Mac capture host is reachable from the Linux build host.
Testing
ChiefPetFeedTests (CmuxNextFloatingTests) covers:
- the feed: ordering, one notice per tab, no re-animation, the deck limit keeping waiting notices, read, expiry and the badge count;
- building a notice from a daemon notification;
- the capsules redrawing only on change;
- folded vs. unfolded click targets;
- the reference deck heights;
- the chevron unfolding the deck, and opening the Chief when there are no notices;
- placement above or below the pet.
ChiefPetNoticeTests (CmuxNextAppTests) drives the real NotificationCenterService.deliver and acknowledge with a DaemonStore:
- alerts reach the capsules and the badge counts them;
- a capsule click opens its tab;
- a read tab's notice leaves;
- a non-alerting arrival stays off the pet;
- the 8 s expiry, on a
ManualClock.
These run in this PR's cmux-next CI lane. They were not run locally (Linux host). The App's source shrinks by 2 lines; the floating chat's tunable moved into CmuxNextFloating to pay for the hook.
Changelog
none (off by default behind a Debug Settings toggle)
🤖 Generated with Claude Code
Summary by cubic
The Chief pet now pops up agent events as glass notice capsules above it. Anything that would alert on this Mac appears over the pet, using the same NotificationPolicy decision a banner does—muted workspaces, quiet hours, and notifications.desktop apply—even when the poster asked for no banner.
- Notices are ~330×56pt glass capsules with a bold title and one muted line (per the reference captures); older ones peek out behind as a deck, and the rail's chevron unfolds up to three into a column.
- A gold badge on the character counts notices that wait for you (questions, failures); clicking a capsule opens its tab, and with no notices the chevron opens the Chief.
- One notice per tab, identical content never redraws or animates, and the only motion is a fade-in on first appearance that follows Reduce Motion; finished turns leave after 8s, while questions and failures stay until read.
- Wired via
notifyChiefPetinNotificationCenterService.deliverandchiefPet?.readinacknowledge; off by default behind a Debug Settings toggle.