WarmblyDocs

Unibox

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.

Scopes

ViewShows
AllEvery conversation across every mailbox
UnreadAt least one unread message
Today / This weekActivity today, or in the last 7 days
Awaiting replyThe other side is waiting on you
SnoozedSnoozed for later
ScheduledReplies 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. 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.

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.

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.

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.

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. 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.

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. 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 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

ControlBehavior
Undo sendInstant 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.
ScheduleQueue 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.
SnoozeClears 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.

Keeping inboxes healthy

Replying promptly supports sender reputation, which warmup and good deliverability practice protect. See Deliverability.

On this page