Team Inbox
Triage inbound email as a team: read AI-classified threads, approve, edit or reject agent drafts, work the review queue, and manage quarantine.
The Team Inbox is the shared mailbox where inbound email lands. Every reply, support request, or sales enquiry sent to one of your receiving addresses is stored, threaded by conversation, classified by the AI agent, and — depending on your AI Agent settings — given a suggested draft reply. Owners and admins triage from a single dashboard: read the thread, approve or rewrite the agent's draft, work a focused review queue, and quarantine anything the security filter flags.
What the Team Inbox is
The inbox is a shared surface, not a per-user mailbox. There is one inbox for the workspace, and threads stay visible to every owner and admin so anyone on the team can pick up a conversation.
The inbox is gated behind the Email inbox feature flag (inbox), which is off by default. Until an operator enables it, the inbox routes are hidden and the backend queries refuse to return data. See Feature flags for how to turn it on, and note that receiving mail also requires the inbound MTA to be configured.
Inbound email reaches the inbox through your configured receiving channel — typically the bundled MTA forwarding to Owlat. SMS and WhatsApp threads can also surface here, and those channels are bidirectional — replies (both agent completions and manual admin sends) go back out the same channel; see Communication Channels.
The inbox dashboard
The inbox landing page (Inbox in the dashboard) gives you a stats overview, status filters, and the thread list.
Stats
A row of counters summarises the current state of the pipeline:
| Counter | Meaning |
|---|---|
| Total | All inbound messages ever received. |
| Open Threads | Conversations currently in the open status — your live backlog. |
| Drafts Ready | Messages with an agent draft waiting for human review. |
| Processing | Messages the agent is still working through. |
| Approved | Drafts approved and queued for sending. |
| Sent | Replies that have gone out. |
| Quarantined | Messages held by the security filter. |
| Failed | Messages whose processing failed after the automatic retries were exhausted. |
The Quarantined and Failed counters are clickable, linking to the Quarantine and Failed messages pages respectively.
The Drafts Ready count also appears as a badge on the Review Queue button so you can see your review backlog at a glance.
Filtering the thread list
The thread list shows one row per conversation, newest activity first, with the sender, subject, message count, status badge, and time of the last message. Two filters narrow it down:
- Status — All Statuses, Open, Waiting, Resolved, or Closed.
- Assigned to me — only threads assigned to you.
Use Clear filters to reset both. The list pages in batches; click Load More to fetch older threads.
Reading a thread
Click any thread to open it. The thread detail view has a message timeline on the left and a sidebar on the right.
The timeline shows each inbound message oldest-first, with the sender, timestamp, subject, and full text body. Each message also carries a processing status badge — Received, Processing, Classified, Draft Ready, Approved, Sent, Quarantined, or Failed — so you can see where the agent got to.
AI classification
When the agent has classified a message, a panel shows what it inferred:
| Field | What it tells you |
|---|---|
| Category | The kind of message (e.g. support, sales, billing, feature request, complaint, spam, internal, other). |
| Priority | How urgent the agent judged it. |
| Sentiment | The tone it detected. |
| Confidence | How sure the agent is, as a percentage. |
The displayed classification panel doesn't auto-send a reply, but the category does drive pipeline routing: messages classified as spam are archived, and complaints or urgent messages are escalated straight to human review (skipping the auto-drafter). Auto-reply decisions are governed separately by the agent's confidence threshold and auto-reply settings, covered in AI Agent & Autonomy.
The sidebar
The right-hand sidebar shows the linked Contact (with a link to their full contact profile) when Owlat could match the sender, plus thread Details: status, message count, assignee, and the time of the last message.
The agent draft
When the agent has produced a reply and the message is in Draft Ready, the draft appears below the original message with three actions:
- Approve & Send — accept the draft as-is. It's queued for sending and the message moves to Approved.
- Edit — open the draft inline. You can rewrite the body and optionally set a subject, then Save & Approve to send your edited version.
- Reject — discard the draft. A dialog lets you add an optional reason, which is recorded to the audit log for your team's reference.
Editing a draft uses Save & Approve — your revised text is what goes out. There's no separate "save draft for later" step in the thread view.
Review queue
The Review Queue (reachable from the inbox header) is a focused list of only the messages in Draft Ready across all threads — the work that actually needs a human decision right now. Each card shows the sender, a two-line excerpt of the original message, the classification category and confidence, and the full agent draft.
From the queue you can Approve & Send or Reject in place, or jump to the full thread via Edit / View thread if you want to rewrite the draft before sending. When the queue is empty you'll see an "All caught up!" state.
The review queue processes drafts individually — there's no bulk "approve all" action. Approving or rejecting acts on a single message.
Quarantine
Inbound mail passes through a security filter before the agent ever drafts a reply. Anything that trips the filter — prompt-injection attempts, suspected phishing, or other abuse — is held in Quarantine instead of being processed, so a poisoned message can never drive the agent.
Each quarantined message shows a Security Alert panel with:
- Type — what the scanner matched. The security scanner combines pattern matching with an LLM guard and emits three type values:
prompt_injection(deterministic instruction-override patterns — a direct instruction-override attempt, a delimiter attack, or role impersonation in the message text),llm_prompt_injection(the guard-tier LLM classifier flagged it), andsmuggling:…(hidden instructions inside the HTML body — e.g.smuggling:html_comment,smuggling:invisible_text, orsmuggling:zero_width_chars). - Confidence — how sure the scanner is, as a percentage. Messages are only quarantined above a high-confidence threshold.
- Flagged content — the specific snippet that tripped the filter.
You have two actions:
- Release (False Positive) — return the message to the pipeline. It re-enters at the start and is re-scanned and processed normally.
- Block Sender — add the sender's address to the suppression/blocklist and archive the message. Inbound mail from that address is not currently auto-rejected on receipt; the blocklist suppresses future outbound mail to that address.
Releasing a quarantined message hands its content to the agent. Only release messages you've confirmed are genuine — the quarantine exists precisely to keep untrusted content away from the model. For background on the scanning engine, see Email Security.
Failed messages
Processing can fail — a transient model error, a downstream timeout, or a bad payload. The pipeline retries automatically (up to three times), but a message that still can't make progress lands in a terminal Failed state and drops out of the workflow. The Failed messages page (reachable from the Failed stat card) surfaces every such message with its failure reason so an operator can read what went wrong.
Once the cause is resolved, Retry processing re-enqueues the message: it routes back to Received and the pipeline re-runs from the security scan. Retries are recorded in the audit log.
Assigning and resolving threads
Each thread carries a status that you change from the status dropdown in the thread header:
| Status | Use it for |
|---|---|
| Open | An active conversation that needs attention. |
| Waiting | You've replied and are waiting on the customer. |
| Resolved | The issue is handled. |
| Closed | Archived / done. |
Threads can also be assigned to a specific team member, which pairs with the Assigned to me filter on the inbox list so each person can see their own queue. Status changes and assignments are recorded in the audit log.
Discussing a thread in chat
If Team Chat is enabled, you can pull a conversation into a channel for internal discussion without exposing it to the customer. From the thread header:
- If a channel already references this thread, it appears as a #channel link — click to jump straight there.
- Otherwise, Discuss in channel lets you spin up a new channel and link it to the thread.
A linked channel shows a pinned, read-only panel of the email thread so teammates can talk it over internally; customer-facing replies still go out through the inbox approval flow described above. The discuss controls only appear when the chat feature flag is on.
Access control
The Team Inbox is restricted to owners and admins. The inbox queries use soft authentication: if you're signed in without one of those roles, the views load but stay empty rather than erroring. Members and other roles don't see inbox data at all. See Team & Permissions for the full role model.