---
title: "Unibox"
description: "A unified inbox across all connected mailboxes, with categories and threading."
---

One inbox for every connected mailbox. Read, sort, and reply from a single screen instead of logging into each account. Three columns: a **scope rail** for picking what to look at, a **conversation list**, and a **thread view** where you read and reply.

## Folders

The rail opens with the standard mail folders, so direction is visually clear instead of one combined list:

| Folder | Shows |
| --- | --- |
| Inbox | Inbound mail, plus anything filed in a custom folder at the provider |
| Drafts | Messages sitting in a mailbox's drafts folder |
| Sent | Outbound mail, campaign and manual |
| Archive | Archived at the provider (Gmail's All Mail, the Archive folder elsewhere) |
| Spam | Junked at the provider |
| Trash | Deleted at the provider |

Each message's folder follows the provider: IMAP special-use folder attributes, Gmail labels, and Outlook well-known folders all map to the same six. Moves at the provider (junking a message, clearing it out of spam) follow on the next sync. The active folder is highlighted with a grey row and bold label, unread counts sit on the right, and each folder's three-dot menu offers **Mark all as read**.

Spam and Trash stay out of every other view: the **All** scope, the metric strip, and the unread badge only count the folders you actually work.

<Callout type="info" title="Spam and Trash start from when you connect">
The initial import that runs when a mailbox is first connected covers Inbox, Sent, Archive, and Drafts. It deliberately skips the existing contents of Spam and Trash, whose history would consume the import budget that belongs to real conversations. Both folders fill normally from the moment the mailbox is connected, so they show what arrives from then on rather than what was already there.
</Callout>

## Scopes

| View | Shows |
| --- | --- |
| All | Every conversation across every mailbox (except Spam and Trash) |
| Unread | At least one unread message |
| Today / This week | Activity today, or in the last 7 days |
| Awaiting reply | The other side is waiting on you |
| Snoozed | Snoozed for later |
| Scheduled | Replies queued to send later |

Below those, the rail lists each mailbox with its unread count, plus your **Categories** and **Tags**. Long lists collapse to the first few with a `Show all` toggle and an inline filter.

Counts come from the server in one request, so they always match the rows. The current view and open conversation live in the URL (`/app/unibox/unread`), so refreshing, bookmarking, and sharing all land in the same place.

Search (press `/`) searches within your current scope, across subjects and the text of the messages themselves, so a phrase from the middle of an email finds the conversation. The filters icon narrows by sender, mailbox, tag, category, date range, and read state.

## Threading

Each row is a conversation, not a message, with a badge showing how many messages are inside. Opening it shows every message in order with participants and the owning mailbox. Replies and new inbound mail land in the same thread. Rows group under `Today`, `Yesterday`, `This week`, and `Earlier` headers.

Threading applies on both sides. A reply you send carries the provider's thread id, which nests it in your own mailbox, and an `In-Reply-To` header naming the last message in the conversation, which is what nests it for the recipient. Their mail client only ever sees the header: a thread id means nothing outside the mailbox that issued it.

<Callout type="info" title="Keyboard navigation">
`j` / `k` move between rows, `Enter` opens, `Esc` closes, `/` focuses search, `c` labels. A cheat sheet sits at the bottom of the list.
</Callout>

## Reading a message

The newest message in a conversation opens expanded, along with anything still unread. Older messages collapse to their preview line; click the header (or the preview) to open one. Bodies load per message, so a long thread does not pull down every message at once.

What you see is the message as it was sent: paragraphs, line breaks, lists, tables, and inline images are all preserved, and special characters and emoji render as themselves rather than as entity codes. The conversation list still shows a one-line preview, which is a summary of the message and not the message itself.

HTML mail renders in an isolated frame, so a sender's styling cannot leak into the dashboard and nothing in the message can run code. Links open in a new tab and carry no referrer. If the stored copy of a message cannot be read, Warmbly shows the preview it has and says so instead of failing to open the conversation.

## Categories and labels

Categories are your own conversation labels, shared with the rest of Warmbly, so `Interested` means the same thing on a contact as it does here. Label with the **Label** button or `c`: search existing categories, tick what applies, or type a name and **Create**. A conversation can carry several.

Labeled conversations show colored chips on the row and in the header, and each category appears in the rail with its own count for one-click filtering. **Labels are manual**; Warmbly never auto-tags.

<Callout type="info" title="Categories vs tags">
Categories label conversations. Tags label the mailboxes themselves (grouping accounts by client or domain). Both filter from the rail, but they describe different things.
</Callout>

## Read state

A conversation is unread when any message inside is unseen, marked by a bright left edge bar and bolder text. Opening it marks its messages seen and updates the counts. Read state syncs both ways with the mailbox provider.

## Replying

Reply, forward, or hover any single message to reply to it specifically. The composer only appears when you ask for it. Replies go from the mailbox that owns the thread, so conversations stay on one account. You can apply a saved **template** or **Insert booking link**.

### AI drafts

AI lives at your cursor, not in the toolbar. With the cursor in the body, click the sparkle (or press **⌘J**) for three options: write something inline, **Draft a reply from this thread**, or **Continue writing**.

A thread draft is grounded in the whole conversation, the contact's record and campaign membership, and your workspace **voice profile**. Grounding reads the messages themselves, not their preview lines, with quoted history stripped and the most recent messages given the most room, so the draft answers what was actually asked rather than the opening sentence. While it writes, a review bar offers **Keep**, **Retry**, **Adjust** (steer with an instruction like "shorter"), or **Discard**. Nothing sends until you press Send. Each draft costs [AI credits](/guides/ai-credits/).

Select any text for a floating **Edit with AI** pill: quick actions (improve, shorten, expand, fix grammar, friendlier, more formal) or a free instruction, rewriting just the selection with **Undo** and **Again** one click away. One credit per rewrite. The same control works in the campaign step editor.

Set your voice profile under **Settings, Workspace**: what you sell, who to, and how you want to sound. It grounds every AI writing surface.

For drafts written automatically on every inbound reply and held for approval, turn on the [inbox agent](/guides/inbox-agent/). It never sends on its own.

## Composing

**Compose** in the header, the `n` key anywhere, or the **Email** action on a contact opens a docked window so you can keep browsing while writing.

**To** searches contacts as you type and accepts raw addresses. Suppressed recipients (bounced, complained, unsubscribed) are flagged before you write a word, and the send is blocked.

### Auto mailbox selection

**From** defaults to **Auto**, scoring every active mailbox in the current workspace for the recipient: an existing conversation with them wins first (contacts should keep hearing from one address), then the most remaining daily budget, with domain auth health as the tiebreaker.

The picker shows the pick and its reason before sending. Opening it reveals every mailbox with a budget bar (sent today against its limit), a history badge, and an auth-health dot, so overriding is informed. The menu filters by mailbox tag; with a tag selected, Auto picks within that group only, which is the `from_tag_id` field on `POST /unibox/compose`.

### Drafts and history

Typing autosaves to **Drafts** after a pause. Closing keeps the draft; sending or emptying removes it. Drafts sit under the Compose button, resume on any device, and are personal rather than shared.

With a recipient set, **History** slides out every conversation you have had with them: tabs split the full thread from just your sent mail, search narrows by subject, rows open the real thread, and the panel notes which mailbox you usually use.

**⌘J**, **Edit with AI**, and a **Suggest** action for an empty subject all work here too. AI drafts are grounded in the contact record, your full correspondence with that address, and your voice profile, and the review card shows what it used. When it genuinely cannot tell what the email is for, it asks one short question instead of inventing a pitch.

### Sending controls

| Control | Behavior |
|---------|----------|
| **Undo send** | Instant sends wait 30s by default (adjustable 5 to 120s under Settings, Profile). A header countdown offers **Cancel**, which returns the email to the composer intact. Applies to API sends with `send_mode: instant` too. |
| **Schedule** | Queue a send for later. It appears inline in the thread as a dashed card and in the **Scheduled** view, cancellable any time. A usage meter warns as you approach the queued-send cap. |
| **Snooze** | Clears a conversation until a time you pick, up to 90 days out, with presets or a custom time. **Un-snooze now** brings it back immediately. |

Scheduled and smart-queued sends skip the undo window, since they already wait. Cancel them from the **Scheduled** view, or via `DELETE /unibox/scheduled/:task_id`.

## Realtime

Nothing needs refreshing. New mail appears in the list, updates the open thread, and raises the unread count on its own. Read-state changes, replies, scheduled sends, snoozes, and label changes all refresh the affected views, keeping rail counts, the list, and the open thread consistent.

<Callout type="info" title="Keeping inboxes healthy">
Replying promptly supports sender reputation, which warmup and good deliverability practice protect. See [Deliverability](/guides/deliverability/).
</Callout>

## Related

<Cards>
  <Card title="Meetings" href="/guides/meetings/">
    Connect Calendly or Cal.com and drop booking links into replies.
  </Card>
  <Card title="Deliverability" href="/guides/deliverability/">
    How mailbox health and sending reputation are tracked.
  </Card>
</Cards>
