# DOM reference: notifications & activity (muse.ai) > **Box is the main surface.** All operator work goes through Box (box.muse-dev.online). The web UI, `box` CLI, and agents share the same API endpoints. No UI-only powers. Inspected live via CDP on the opm browser (warp-opm netns, port 9440), 2026-10-04. Re-verified 2026-10-04 across all three fleet nodes (muse 9410, pip 9420, opm 9440). Companion docs: `DOM-CHAT-PANEL.md`, `DOM-MESSAGES.md`, `DOM-PAGE-STRUCTURE.md`. ## TL;DR muse.ai has **no bell icon and no notification center/dropdown**. The notification surface is four separate things: 1. **Toast live region** — `section[aria-label="Notifications alt+T"]` (transient toasts, aria-live). 2. **Activity tab** — `button[aria-label="Activity"]` in the status-panel toolbar (activity feed; tabs: Activity / Approvals / Upcoming / Identity). 3. **Chat nav unread** — `a[data-testid="hatch-nav-chat"]` whose `aria-label` becomes `"Chat, N notification(s)"` when chats are unread (observed live on pip: `"Chat, 1 notification"`, later cleared to `"Chat"`). 4. **Unread dot badges** — transient blue-dot `SPAN`s (see §5). **Correction 2026-10-04:** these DO exist; the earlier "no badge elements" claim was wrong — the first sweep ran on opm while it was clean, and the badges only render while there is unread activity. There is no bell icon. The one `data-testid` containing `notif` is `hatch-dock-chat-notification-badge` (see §5). --- ## 1. Toast live region The only element carrying the word "notification" in an aria-label. ```js document.querySelector('section[aria-label="Notifications alt+T"]') ``` | Property | Value | |---|---| | Tag | `
` | | `aria-label` | `Notifications alt+T` (stable — safe to match on) | | `tabindex` | `-1` | | `aria-live` | `polite` | | `aria-relevant` | `additions text` | | `aria-atomic` | `false` | | `data-testid` | none | | Parent chain | direct child of `` (no intermediate wrappers) | | Content when idle | empty — `childCount: 0`, `innerHTML === ""` | Semantics: an aria-live toast container. Toasts are injected as children and announced politely. `Alt+T` presumably moves focus to it (unverified — shortcut named in the label). **Visibility condition:** always in the DOM (even when empty). Presence of children = a toast is/was showing. **Automation note:** to detect a toast, poll `document.querySelector('section[aria-label="Notifications alt+T"]').childElementCount > 0` or read `innerText`. --- ## 2. Activity tab button ```js document.querySelector('button[aria-label="Activity"]') ``` | Property | Value | |---|---| | Tag | `