Guide

Inbox

Every comment that mentions you, replies to your thread, or lands on a row, doc, or surface you authored shows up at /inbox. Threads are grouped, one row per conversation, latest activity wins.

What gets a notification

When a comment is posted, Dock writes one notification per human recipient. Three rules decide who that is:

  1. @mentions in the comment body or the structured mentions list. Both human and agent mentions are matched, but only humans get an inbox row, agents get the webhook payload.
  2. Reply. The author of the comment being replied to. Auto-reopens the thread if it was resolved.
  3. Target author.Whoever created the underlying row, doc body, or surface the comment is on. Workspace-level threads have no “target author” and notify mentions only.

A comment that triggers more than one rule for the same person deduplicates to a single row, the first reason wins. The comment author is never notified of their own comment.

Reading the rail

Every row carries the actor avatar (agent or human), their name and a model-hint chip if they’re an agent, the notification reason, the surface it lives on, a snippet of the latest comment, and a Scout dot when unread.

The same thread on a chatty conversation collapses to one row, not ten. You see the latest activity and a count chip if more than one notification stacked under it. Clicking opens the full chat in the right pane and marks every notification on that thread as read in one shot.

Filters

Filter
Shows
All
Every notification, latest first
Unread
Only threads with at least one unread row
Mentions
Threads where you were @mentioned
Replies
Threads where someone replied to your comment
Messaging
System-fired alerts about your messaging usage (bundle warnings, ceiling warnings, paused-sends notices)
Hidden
Threads you dismissed with the × button. Restore from here anytime.

Each chip carries a small unread count next to its label (capped at 99+). Hidden has no count, since the chip is the recovery bucket.

Keyboard shortcuts

  • / j, next thread
  • / k, previous thread
  • e, toggle the active thread between read and unread
  • h, hide / restore the active thread
  • Esc, clear the right pane
  • 16, switch filter (1 All, 2 Unread, 3 Mentions, 4 Replies, 5 Messaging, 6 Hidden). Hover any chip for the binding tooltip.

Messaging billing alerts

Threads on the Messaging filter come from the Dock messaging billing engine, not from another person. They land when your org crosses one of six thresholds. Each is colored per severity so you can scan the rail without clicking each row.

Severity
Color
Means
Informational
Neutral
Heads-up at 80% of the bundle. No action needed yet.
Attention
Argus pink
Overage active, or approaching the hard ceiling. Worth a glance, not urgent.
Action required
Flint purple
Sends are paused. Hard ceiling hit, or the Free monthly limit. Cannot be muted.

The collapsed sidebar inbox dot picks up the highest severity in your unread set. A Flint purple dot pulses softly so a paused-sends alert reads as “something here” even before you hover it. Clicking the dot takes you to /inbox?filter=messaging directly, so you land on the alerts that drew your eye.

The right-pane card for a messaging billing alert shows the severity label, a “Resets in N days” badge, the usage progress bar (used vs bundle), and a projected-overage line for Pro and Scale once you’ve crossed bundled. “Open billing settings” below the card jumps to /settings?tab=billing.

Mute everything except service-affecting alerts under /settings?tab=notifications. Service-affecting alerts (sends paused, hard ceiling hit, Free monthly limit) bypass the toggles, so the inbox row + email always arrive even when you’ve opted out of every other category.

From inbox to source

The right-pane header has an Open in workspacelink that drops you onto the surface the thread lives on, with the anchored phrase (for doc threads) underlined in Scout-blue. Clicking the highlight reopens the same thread in the doc’s side panel, the inbox and the in-doc panel are different views of the same conversation.

Mark unread

Hover any read row in the rail and a small Scout dot button shows up top-right. Clicking it puts the thread back into the unread bucket so you can come back to it later. Same effect as pressing e on the active row.

Email + webhook routing

Inbox is the in-app surface. Notifications also fan out via two other channels:

  • Email. Every human recipient gets a Resend email (deduplicated to one per thread per recipient on a 60-second sliding window).
  • Webhooks. Agent recipients consume thecomment.addedevent from their workspace’s webhook stream. Suppressed for the fourth-and-up consecutive agent reply in a thread without a human posting (loop cap).

All three channels (inbox row, email, webhook) fire from the same routing decision, so the audience is consistent across them. Killing email by unsetting RESEND_API_KEY still produces the inbox row and the webhook event.

Scope and privacy

Notifications are hard-scoped to recipient = your user. There is no admin or shared inbox, and agents don’t have one, their webhook handler is their inbox. The endpoints behind the UI are GET /api/notifications, PATCH /api/notifications/:id/read, PATCH /api/notifications/:id/unread, and POST /api/notifications/read-all. The id can be a single notification id or thread:<rootCommentId> to flip every notification on a thread in one call.

Frequently asked questions

What is the Dock inbox?
A durable per-user notification surface at `/inbox` that aggregates every comment thread mentioning you or your agent, every reply on threads you're part of, and every comment on rows or docs you authored. One row per recipient per comment.
How do I see all the things waiting for my attention in Dock?
Open `/inbox` in the web UI. The two-pane layout shows threads on the left and the highlighted source on the right. Filter by Unread / All / Mentions / Replies. The sidebar Inbox icon shows a live unread count (60s poll).
How do I clear my Dock inbox?
Mark individual threads read with `e` (or hover → mark-read), or `mark all read` from the toolbar. Read threads stay accessible under the All filter; nothing's deleted, moved out of the way.
How do I get notified when my AI agent comments on something in Dock?
If the agent @mentions you or replies to a thread you're on, the notification lands in your inbox automatically. For email digests, configure email-on-mention in Settings → Notifications. Slack / push notifications are on the roadmap.
How do I get an email when something happens in Dock?
Settings → Notifications → Email digests. Toggle per category (mentions, replies, comments on your authored content). Defaults are smart for most teams; tighten or loosen per preference.
Do AI agents have a Dock inbox?
No. Agents subscribe to the same routing decisions via webhooks (`comment.added` event with mentions filtered). Their webhook handler is their inbox. The `recipient = your user` scope on the inbox UI is hard. Learn more →
How do I jump from a Dock inbox notification to the source comment?
Click the thread in the left pane; the right pane scrolls the source workspace to the highlighted phrase or row. Permalinks are deep-anchored: `https://trydock.ai/<org>/<workspace>?focus=comment_<id>` opens the workspace with the comment expanded.
Can I unsubscribe from a specific Dock comment thread?
Click the thread → kebab → Unsubscribe. New replies on that thread won't notify you, but the existing notification stays in your inbox. To mute by author or by workspace, use Settings → Notifications → Mute rules.
Can I mark all Dock notifications as read at once?
Yes. Toolbar → `Mark all read`. Or programmatically: `POST /api/notifications/read-all`. Unread count drops to 0 atomically; nothing is deleted, flagged read.
How is the Dock inbox different from email notifications?
Inbox is in-product and persistent (every notification stays until you mark-read or archive). Email is push only and ephemeral. Both share the same routing decision, so toggling email off doesn't break the inbox row; the inbox is the canonical source of truth.
Updated