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.
Search
Instant, offline, structured — and it understands plain English.
- Instant and offline
- Filters as you type against the local full-text index — subject, sender, and body, one account or all of them.
- Structured tokens
from:to:cc:subject:account:label:has:attachmenthas:pdffilename:is:unreadis:flaggedyear:date:larger:smaller:since:before:— composable chips alongside free text.- Ask in plain English
- “Emails from holly with attachments about insurance” parses on-device into a structured query; semantic search ranks by meaning alongside the full-text index.
- Circle-aware search
- A circle name resolves with no prefix —
from:kids school— andfrom:@domain.commatches the whole domain, subdomains included. - The server as backstop
- When local results run dry, “Search the server for more” reaches over IMAP for mail not yet downloaded.
- Renamed threads keep their name
- A conversation someone renamed keeps its original subject with a quiet “· now …” aside — the threader no longer splits on a changed subject line.
- Search everywhere
- The Calendar has its own Find (⌘F, live match count, non-matches dim), and every contact’s shared-content archive is searchable too.
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
;abbrevor 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;
@mentioncompletion 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
/imagenameto 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.
- 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=REQUESTpart), 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.
Nothing matches — but if it's about handling email, odds are it's in here under another name. Try a shorter word.
That's the whole list. No asterisks.