Everything Snug does today.

All shipped, all in v0.8.0 — 1,188 tests green. Nothing on this page is a roadmap item.

Triage & inbox zero

The machinery that makes zero the resting state — inspectable, reversible, and server-visible.

The Screener
First-time senders hold in a New senders tab — one row per sender with wait time and held count. A approves, B blocks, each with a six-second undo; nothing moves on the server.
No retroactive chaos
Enabling the Screener grandfathers everyone you’ve ever corresponded with; anyone you email first is automatically welcome, and Apple Contacts bypass the door entirely.
Reading isn’t letting in
Open a held message freely — a door banner offers Approve / Block, images stay off, and reading alone changes nothing.
Auto-archive with a conscience
High-confidence informational mail files itself into its label folder. Actionable mail, favorites, and first-time senders are never touched; per-category opt-ins and a Standard / Conservative dial keep you in charge.
The Handled tray
GR opens a ledger of every autonomous action, each with the undo suited to it — Move back, Not Spam, restore — plus “Restore & always keep” to opt a sender out for good.
Durable triage queue
Archive, trash, junk, and move survive going offline and quitting the app — queued, retried, never rolled back behind your back. Undo cancels a queued action.
Labels that live on the server
Categories are written as real IMAP keywords and new labels create real IMAP folders — your filing shows up in any other client.
Filing on archive
Archiving a labeled message files it into that label’s folder instead of a generic Archive pile.
Favorites (VIP)
Star the people who matter: gold star in list and reader, notify on arrival, never auto-archived, and a starred-senders section that collects everything from that person across folders. All-account: one person, one star, everywhere.
Circles
A named set of addresses and domains treated as one correspondent — one sidebar lens across accounts and folders, one search term, one VIP unit with Screener bypass.
Multi-select & batch triage
Click, shift-range, ⌘-toggle; batch actions on whole conversations, with a dedicated stack pane while multiple threads are selected.
Every action, everywhere
Archive, trash, spam, flag, read, move, label — from the hover cluster, the reader toolbar, the context menu, and the keyboard.
Undo everywhere
Every triage action raises a toast with Undo; Z reverses the last move.
Spam pipeline
Bulk, phishing, and scam patterns flagged (optionally auto-moved), with Not Spam / Confirm Spam, a per-sender allowlist, a weekly-refreshed disposable-domain blocklist, and a lifetime spam-prevented counter.
Blocked senders
Blocked mail goes straight to Trash — read, silent, and out of the Brief. Your own addresses can never be blocked.
A calm empty state
An empty inbox says “All caught up. Go make a cup of coffee,” because an empty inbox should feel good.

The AI concierge

A classifier that speaks your labels, runs on your Mac by default, and captures structure — not just tags.

A classifier that speaks your filing system
Every message sorts into one of 15 categories and the account’s own labels — the model’s vocabulary is your filing system, not a hardcoded taxonomy.
On-device first
Classification runs on Apple Intelligence by default: free, private, nothing leaves the Mac.
Your choice of brain
Apple Intelligence, Ollama (local), or bring your own key for Claude, GPT, Gemini, or Grok. Cloud providers require explicit per-provider consent before any content is sent, with per-model costs shown.
Exact where it counts
Verification codes and money amounts are extracted deterministically — never model-guessed.
Verification codes, handled
Login codes surface as a Copy pill in list and reader; copying can auto-archive the message once the code has done its job.
Teach it with one correction
Change a label and Snug offers to apply the rule to the sender, their whole domain, or the thread. Rules are deterministic, beat the model, and are listed per account.
Suggested categories, on probation
When nothing fits, the model proposes exactly one new label as a muted dashed chip; your manual archive materializes it into a real folder. Automatic filing never creates folders behind your back.
Providers that pre-file are called out
Server-side sorters (Zoho Smart Filters and kin) are detected; Snug tells you exactly where to switch them off and offers a one-click merge of the leftover twin folders.
Typed capture ledger
Receipts, bills, subscriptions, income, codes, and tasks extracted as structured records — the memory behind the Press’s money section and recurring-charge detection.
Gather tasks
Press T on any email and the concierge extracts your action items into the Tasks tray, confirming before anything is added.
Reaction emails, demoted
Outlook and Gmail “reacted with 👍” fallback emails are detected deterministically and become a small emoji on the thread row instead of hijacking the conversation.
Analyze, resumably
A checkpointed 90-day retro sweep with live counters and an honest “all caught up” finish.

Keyboard-first control

Anything doable is doable by key. Single keys are focus-aware — they never fire while you type — and ? opens a contextual cheat sheet anywhere.

Triage

  • E archive
  • # trash
  • ! spam
  • * flag
  • U read / unread
  • V move
  • L label
  • T gather tasks
  • Z undo

Write

  • C compose
  • R reply
  • ⇧R reply all
  • F forward
  • ⌘↵ send
  • ⌘⇧↵ send & done

Navigate

  • J next
  • K previous
  • X select
  • ⇧J extend
  • Space scroll
  • open window
  • / search

Go to

  • G I inbox
  • G S sent
  • G D drafts
  • G B today's brief
  • G R handled tray
  • G G folder picker

Screener

  • A approve
  • B block
  • J walk senders
  • read first

App

  • ⌘R refresh
  • ⌥⌘← switch section
  • ⌘, settings
  • ? cheat sheet

Single keys are focus-aware — they never fire while you type.

The Morning Press

A real newspaper, delivered as email — the safety net that makes the concierge’s autonomy trustworthy.

The daily edition
Once a day, on your schedule, a warm designed digest of everything handled: what needs you, what was filed, the money that moved, plus your extras. Nothing the concierge touches ever just vanishes.
Editions per audience
Multiple briefing groups, each covering chosen accounts, delivered to a chosen account, on its own schedule — Daily, Weekdays, or Off, custom time.
The Edition Designer
Compose each edition from ordered, drag-reorderable modules with per-module widths and a searchable icon picker; the mail sections lead.
The module shelf
News feeds (curated or your own RSS), photo of the day, weather, today’s agenda, tasks due, word of the day, a joke with a comfort dial, a micro-poem, a fun fact, this day in history, an assistant’s note, or fully custom prompted articles.
The Weekly Ledger
Finances graduate to their own weekly edition: a subscriptions ledger, stacked spend bars, recurring-charge and price-change detection, duplicate-subscription merging.
The Assistant’s Journal
A persistent closing reflection with memory — each edition remembers what it already told you and doesn’t repeat itself.
A paper with a name
Set the paper’s title, the assistant’s byline, and your name; masthead, dateline, and column pairing come with it.
Publication badges
The Press and Ledger arrive under a distinct masthead badge, so the paper never looks like just another notification.

Writing & sending

Markdown-native compose that sends beautiful HTML — with snippets that actually think.

Markdown compose
Live syntax highlighting with an Editor / Split / Preview toggle; sends as per-element CSS-inlined HTML with your Markdown as the plain-text fallback — tables, task lists, admonitions, syntax-highlighted code.
Highlights that survive dark mode
==highlight== renders as a warm mark with explicit ink; ⌘U highlights, ⌘⇧X strikes, both toggle like ⌘B.
Snippets with variables
Insert via ;abbrev or the {{ menu: your identity, the recipients, a rich date library, and {{cal.free_slot_today}} — your next real calendar gap. Fill-in blanks tab like a form; a pre-send audit catches strays.
Templates
Save a draft as a reusable template, inline images included; load, import, export.
Recipient chips that think
Autocomplete from people you actually email, sorted by recency, with “typically emailed with” co-recipient suggestions; @mention completion adds the person to To.
Smart From selection
Replies default to the account you last used with that correspondent; aliases appear in the From picker, and mail addressed to an alias answers from that alias.
Undo Send
An optional 10 or 30 second hold after ⌘↵; undo reopens the draft exactly as it was. The send sound plays when the mail truly leaves.
Send & Mark Done
⌘⇧↵ sends the reply and archives the conversation in one stroke.
Drafts that survive
Every draft is its own floating window; drafts auto-save locally and to the server, survive quit and relaunch, and orphaned drafts recover after a crash.
Inline images
Type /imagename to drop images from a configured folder straight into the body, with a live-resizing preview.
Instant threading
Your reply appears in the conversation the moment you hit send, with a quiet “Sending…” chip until the server confirms.
System mail handler
Set Snug as the default mailto: app; links open a pre-filled compose window.

Reading mail

A reader engineered until opening mail feels instant — and honest about what you’ve actually read.

Sticky-card thread reader
A conversation is a stack of cards, newest on top, each with a pinned header that hands off as you scroll — every message distinct, quoted history tucked behind “Show quoted text.”
Instant open
Thread documents are pre-painted and byte-stable; opening adopts finished pixels. Measured: 891–2,410 ms cold renders down to 127–236 ms.
Honest unread tracking
Opening a thread doesn’t blanket-mark it read — a card clears only when it actually reaches the top of your viewport, and read state fans out to every cached copy, locally and on the server.
Attachments, interpreted
Chips with type icon, label, and size; Space for Quick Look, download one or all, double-click to open.
Embedded images, first-class
Inline body images index as embedded attachments and inject into the reader; corrupted legacy inline images are repaired at render time.
Dark-mode-safe ink
Incoming HTML is sanitized so “invisible ink” — dark-on-dark, white-on-white — is corrected rather than unreadable.
Remote images blocked until trusted
Images load automatically only for allowed senders; one click loads and remembers per sender.
Link honesty
Hovering a link shows its true destination at the bottom of the reader, so the text can’t lie about where it goes.
One-click unsubscribe
When a mailing list supports it, an unsubscribe button appears in the reader and just works.
Reader find & zoom
In-document find, plus pinch-to-zoom with a per-message reset.
Detached reader windows
Double-click any message to open it in its own window and keep reading while you work.
Print
A single message or the whole conversation, cleanly formatted (⌘P).
White paper mode
Render bodies on a white base regardless of app theme, for mail designed for white.
Cozy plain text
Plain-text messages get a warm paper texture instead of a sterile void.

Calendar & tasks

A full calendar living inside the mail client — with invites that never email anyone without asking.

A full calendar section
Month, Week, Work Week, and 3-Day views of all your system calendars, with a mini-month, per-calendar visibility, and a Today rail.
Warmed to the palette
Calendar colors gently snap onto Snug’s warm palette (your hue choices survive); recolor any calendar from the sidebar; a Soft↔Vivid slider sets the wash.
Invite cards, handled
An emailed invite renders as a card with When / Where / Organizer / Guests plus Accept · Decline · Propose New Time. Accept picks the calendar and alert — and every response asks before emailing the organizer.
Cancellations, handled
A cancellation renders with one “Remove from Calendar” button — a single occurrence or the whole series.
Create events from anywhere
One New Event sheet, three doors: Calendar (⌘N or drag a slot), the composer (⌘⇧I — the invite rides the email as a real method=REQUEST part), and any open message (I — the sender becomes the first guest).
Edit, drag, cancel
Drag to move or resize with 15-minute snapping; recurring events ask their span after the drop; cancelling sends the update before removal, and guested meetings send “Updated invitation” under the same UID.
Decline on delete
Removing someone else’s meeting offers Remove & Send Decline / Just Remove / Keep Event — confirm-first, always.
Zoho Meeting links, on the fly
Connect once and every invite from any account can carry a Zoho join link, minted on confirm and written into the ICS so Apple Calendar, Gmail, and Outlook all show a clickable Join.
Offer times from real free/busy
{{cal.free_slot_today}} and friends fill actual gaps; incoming offers render as slot chips the recipient can click, with tentative holds.
Date chips in prose
Any date in a message becomes a button: Add to Calendar, Add Reminder, Show in Calendar, Copy — honoring the line’s stated time zone, normalized into yours.
The Tasks tray
A docked, collapsible tray of tasks gathered from email (T) and concierge captures, colored per account, with due chips and check-off.
Manual tasks on the grid
New tasks take a due date and time and a repeat rule; timed dues render as checkable chips on the week grid at their hour, and recurring tasks respawn when checked off.

Privacy & security

Local-first by architecture, hostile-input by assumption.

There is no Snug server
Your mail lives in a local database on your Mac. No cloud account, no telemetry of message content.
Nothing leaves without consent
Cloud AI is opt-in per provider with a plain statement of exactly what would be sent; on-device and Ollama give zero-egress AI.
Sender authentication, visible
SPF / DKIM / DMARC plus display-name and lookalike-domain checks roll into a three-state seal beside every sender, with an instant hover explanation.
Quarantine, not deletion
A suspected spoof stays readable, but links, images, and reply are locked until you explicitly trust it.
Hostile HTML, defanged
Every body is sanitized before rendering — no scripts, no dangerous CSS — and remote loads are blocked at the network layer for untrusted senders.
Anti-tracking posture
Remote images blocked for unknown senders, true-URL link hover, and no read receipts.
Permissions on your terms
Contacts and Calendar access are requested only when a feature needs them, never on render.

Accounts & sync

Any IMAP account, Proton via Bridge, live delivery, and an offline-first store that never blinks.

Generic IMAP/SMTP
Any standard account with an app password — Gmail and Outlook included; per-protocol host, port, and TLS settings.
Autoconfig, including by MX
Bundled providers, ISPDB, domain probe, then a real MX lookup — so custom domains resolve too. Probes must genuinely authenticate before they count.
Proton Mail via Bridge
A first-class Proton account type speaking to the local Bridge; a second Proton address reuses the saved connection and asks only for name and email.
Keychain credentials
Passwords live in the macOS Keychain; removing an account deletes its entry and local cache and never touches server mail.
Per-account identity
Own From name, HTML signature, and a fixed identity color tinting avatars, underlines, and tasks everywhere.
Send-as aliases
Register aliases per account; they appear in the From picker, and replies answer from the right one.
Unified scopes
All Inboxes, Today, and Flagged across every account, plus unified Sent, Drafts, Archive, Spam, and Trash.
Live delivery
An always-on IMAP IDLE connection per inbox pushes new mail the instant it arrives — no polling.
Offline-first
Everything synced is readable, searchable, and composable offline; sends queue in the Outbox and go out when you’re back.
Background deep-backfill
Older mail fills in quietly, with a gentle activity heartbeat and per-folder progress fractions.
Server hiccups, absorbed
When a server re-keys a mailbox, Snug re-matches your cached mail in place — bodies, read state, and ledger survive, and the UI never blinks.
Pause an account
Temporarily stop sync, notifications, and sending without removing the account; everything cached stays put.
Folder-role overrides
A break-glass remap for servers that misreport which folder is Inbox, Sent, or Trash.

People, notifications & craft

The long tail that makes it feel finished — contacts built from reality, notifications that stay quiet, sounds of its own.

A directory of real correspondents
Contacts is built from the people you actually exchange mail with — spam excluded — not an address-book dump.
Rich profiles
Apple Contacts fields merged with details found in signatures and threads, each with provenance, plus a live map thumbnail for a postal address.
Everything you’ve shared
A per-person archive of files, links, images, and events exchanged in both directions — filterable, searchable, every item opening its source message.
Real faces, never fakes
Avatars resolve Apple Contacts photo, then Gravatar, then the sender’s domain logo, then a warm monogram. Network lookups are opt-in and off by default.
Quiet by default
Notifications only for favorites, circle members, and confidently-actionable mail — everything auto-handled is silent and shows up in the Press instead.
Important = people you know
One predicate spans notifications, the badge, and the Important tab: a favorite, a circle member, someone in Contacts, someone you’ve written to, or clearly actionable mail.
Dock badge on your terms
Count Important mail, all unread, or nothing.
Warm in both modes
Light is cream, dark is warm brown — never cold grey. Five accent swatches drive selection, unread dots, buttons, and links.
Sounds of its own
New-mail, send, archive, and trash cues are Snug’s quiet sounds, plus a soft metronome-accurate thinking tone while the AI works.
No teardown flicker
Email, Contacts, and Calendar stay alive across section switches; coming back is instant and exactly where you left it.

That's the whole list. No asterisks.