What an employee reads on clicking the bell: personal notifications — runs
of their agents and account events. The same
dispatcher as for admins, a different view; addressing is
targeted at this user.
1
The bell with an unread counter — the number of unread in-app items for the current user (deliveries with read_at IS NULL). The counter updates instantly over the push channel (SSE); polling is a background top-up. The in-app channel is locked on, so everyone has a bell — feed = notifications ⋈ own deliveries.
2
The panel — the tail of recent events, opened from the bell on click. “Mark all read” sets read_at on all of the user's deliveries at once; the gear leads to personal notification settings (in-app / email toggles per type).
3
The type on the left (Agent · Account) is the category of the personal event; the severity chip is its severity. The source is clickable: a deep link from source_ref leads to the entity — a run, an agent, a profile.
4
The only actionable case for an employee is a removed model: the button leads to the agent editor to pick a model from those available. Other personal events are informational, with a deep link to “where to look”.
5
“Show all” leads to the full screen — history, filters, marking read one by one. The panel shows only the top.
The feed is personal: only this user's targeted events land here (their agents, their account). Organizational alerts (sync · security · budget) go to admins in the Admin Panel.
All clearNo new notifications. Read ones are under the “Period” filter.
6
The Type · Severity · Unread · Period facets — behavior is uniform across all lists. “Unread” is a common default; clear it to see the history. Type here is the two personal ones: Agent · Account.
7
The severity chip = notifications.severity (warning · info), colored from the event catalog. The type on the left is the category (Agent · Account).
8
The source is clickable — a deep link to the entity from source_ref: a run, an agent, a profile. It takes you to where you can dig in, straight from the feed.
9
“Mark read” writes read_at to your own delivery — everyone has their own feed and their own read state. The event itself is append-only; it's never edited or deleted.
10
A read item dims (a muted card, no accent bar) but stays in the history; “Mark unread” returns it to the counter. Grouped by day — Today · Earlier.
The email channel for personal types is off by default — opt-in: in-app is seen right away, and emails arrive only if you enable them in your profile (the catalog default).