Unified inbox Every reply across every mailbox · classified on arrival

Every reply.
One console.

Stop bouncing between Gmail and Outlook tabs to triage eight mailboxes. Every conversation lands here, classified on arrival, assignable to a teammate, with the matching auto-action already fired.

Inbox 7
Search every mailbox…
Thread
Re: Saw your demo last week, quick question on pricing
3 messages 2 positive
Maya Chen [email protected]
2m ago

Hi Ben,

This maps to what we were looking at. Could you send over a proposal for ~30 seats? Want to bring it to my CFO this week.

— Maya

auto-paused sequence acme-fy26-q2 for this contact
routed to assignee · @ben
posted to #sales-positive in Slack
Ben Cole sent step 02 · soft follow-up
3d ago
Ben Cole sent step 01 · initial outreach
7d ago
Reply to Maya Chen…

Illustrative. The real unibox mirrors this layout: scope rail, conversation list, thread view, and a contact panel.

Section 1 · The problem

Eight mailboxes is eight tabs.

Run cold outreach from a handful of mailboxes and the replies scatter across that many provider inboxes. A positive lands in one tab, a bounce in another, an out-of-office in a third, and the sequence keeps sending while you go looking. The unibox pulls every one of those threads into a single console and decides what it is before you open it.

Without a unibox 12 unread, somewhere
Outlook [email protected] 2
the sequence is still sending to people who already replied
With Warmbly one console, classified
Positive Maya Chen [email protected]
OOO Theo Park [email protected]
Referral Eli Soriano [email protected]
Negative Rowan Cole [email protected]
every sequence already paused for the ones who replied
Section 2 · Classifications

Six categories. Six auto-actions.

Every reply is classified before a human sees it, and each class fires its own deterministic action: pause the sequence, suppress the contact, re-queue after the out-of-office window, or surface it to the assignee. Nothing waits on someone opening the thread first.

Class
Detected when
Auto-action
Positive
Confirmed meeting, asked for a proposal, expressed buying intent, requested a next step.
Surface to assignee · keep sequence paused
Negative
Said no, asked to stop, sent a legal or abuse signal. Treated as a suppression event.
Suppress recipient · pause sequence
Referral
Pointed you to a different person at the same company.
Mark for follow-up · keep paused
OOO
Out-of-office auto-reply. The end date is parsed from the body when present.
Re-queue after the parsed end date
Unsubscribe
Either an explicit STOP or UNSUBSCRIBE reply, or a list-unsubscribe header click.
Workspace-wide suppression
Bounce
An SMTP bounce. Hard (5.x.x) is permanent. Soft (4.x.x) retries up to three times.
Hard suppresses · soft retries then suppresses

Classifications you override train a workspace-scoped model. The defaults stay rule-driven for transparency.

Section 3 · Scopes

The rail is a set of saved views.

Every scope down the left of the unibox is a live filter, and the counts update as mail arrives. Slice by mailbox, by classification, by label, or by where the conversation stands. Each view serialises to the URL, so a saved filter is just a link you can share or pin.

  • Awaiting reply tracks the threads where the prospect spoke last, so nothing goes cold on your side.
  • Header stats stay live over the socket: unread, awaiting, today, this week, snoozed, mailboxes.
Awaiting reply

The prospect spoke last and the clock is on you. The header counts it live.

Snoozed

Pushed to a later date. It resurfaces at the top the moment the timer fires.

Scheduled

Replies queued to go out later, held to the mailbox send window and pacing.

By mailbox

Narrow to one connected inbox. Per-mailbox counts stay current in the rail.

By label

Workspace categories you toggle on a thread. Create a new one inline.

By classification

Positive, negative, OOO, bounce. The class is set on arrival, before you look.

Section 4 · Reply fan-out

One positive reply, every surface in sync.

A positive reply does not just light up the inbox. The classifier emits one event, and the sequence pause, the assignment, the Slack ping, the CRM stage move, the realtime browser push, and the webhook all fire off it. By the time the assignee opens the thread, every other surface already agrees.

Inbound reply positive

"This maps to what we were looking at. Could you send a proposal for ~30 seats?"

intent: proposal sentiment: positive
assigned to @ben
Fanned out on the same event
sequence acme-fy26-q2 · paused paused
routed to assignee · @ben claim
#sales-positive · Slack ping
HubSpot · stage advance crm
browser push · realtime push
webhook reply.classified event

This is the positive path. Each of the other five classes has its own fan-out: a negative or unsubscribe suppresses workspace-wide, an OOO re-queues after the parsed date, a bounce retries or suppresses.

Section 5 · Context

The person, not just the message.

Open a thread and the contact panel comes with it: which campaigns the person is in, how they have engaged so far, their subscription state, and any CRM deal or task attached to them. You answer the reply with the whole history in view, not a cold message out of nowhere.

  • Subscription state is explicit: subscribed, unsubscribed, or suppressed, with the reason and source.
  • Deals and tasks read from the synced CRM, so the AE works the reply without leaving the inbox.
MC
Maya Chen
Subscribed
Engagement
7
Sent
5
Open
2
Click
1
Reply
Deal
Open
Lumen Robotics · 30 seats Sequenced Replied
Tasks
Send the 30-seat proposal due today
Loop the CFO in on pricing due Thu
Section 6 · Sync

A read and reply layer, fully in step.

The unibox does not replace Gmail or Outlook. Threads still live in the underlying mailbox, and the console polls each one about once a minute to stay in step. Gmail goes through its History API, so a pass only pulls what changed, while everything else syncs over IMAP. Replies you send from here go out through the mailbox's own provider.

Gmail history API · 60s poll

Gmail syncs through the Gmail History API, polled about once a minute. The history cursor means each pass only pulls what changed since the last one.

Outlook IMAP · 60s poll

Outlook connects over IMAP and is polled about once a minute per mailbox.

SMTP / IMAP IMAP · 60s poll

Any other provider sends over SMTP and syncs over IMAP, on the same one-minute poll.

Outbound replies provider send path

A reply you send from the unibox goes out through the mailbox's own provider, the Gmail API or SMTP, so it threads correctly in the real mailbox.

reply.classified · event
{
"event": "reply.classified",
"class": "positive",
"confidence": 0.94,
"mailbox": "[email protected]",
"source": "gmail.history",
"auto_actions": [
"sequence.pause",
"assign.@ben",
"slack.#sales-positive"
],
"idempotency_key": "msg-7be4:reply"
}
one event · every surface idempotent on the key
Section 7 · What it does

Built for cold-email reply triage. Not a generic helpdesk.

01
Six classifications

Positive · Negative · Referral · OOO · Unsubscribe · Bounce. Decided on arrival, before the human sees the thread.

02
Assignment

Threads route to teammates by domain, round-robin, or manual pick. Reassign with a single click.

03
Snooze and reminders

Push a thread to next week. A reminder fires if the recipient goes quiet for the window you set.

04
Cross-mailbox search

One search across every connected mailbox. Threads stay tied to their campaign and sequence step.

05
Saved views

Mailbox, classification, assignee, label, awaiting-reply, snoozed, scheduled. Every filter serialises to the URL.

06
Realtime push

WebSocket push for replies, bounces, and complaints. Opt-in browser notifications. Nothing on opens.

By the numbers

The reply pipeline, in one row.

6 classes
decided on arrival
consumer/event_new_email.go
60 s
provider sync interval
Gmail History API · IMAP
< 2 s
reply to assignee fan-out
one inbound event
3 retries
soft bounce before suppress
consumer.deliverability
10 scopes
saved views in the rail
unibox/ScopeRail.tsx
0 on opens
no notification noise
realtime push policy
Unibox FAQ

Four reply questions.

The classifier is a rule plus small-model hybrid. Quoted text is stripped, signature blocks are ignored, and OOO and unsubscribe are detected before sentiment. A misclassification shows a "review needed" tag, and correcting one trains the workspace-scoped classifier.

No. Threads still live in the underlying mailbox. The unified inbox is a read and reply surface on top of them, kept in sync with provider state over the Gmail History API and IMAP.

Positive replies and quarantine transitions by default. It is configurable per workspace: every classification, just positives, or off. Webhooks carry the full classified payload.

Sync runs about once a minute per mailbox. Gmail uses the Gmail History API, so each pass only pulls what changed, while Outlook and any other provider sync over IMAP. A reply you send from the unibox goes out through the mailbox's own provider, the Gmail API or SMTP.

Every reply, in one console.

Connect your mailboxes, and watch every reply land here classified, assigned, and acted on.