Skip to content
mrdulasolutions edited this page May 13, 2026 · 1 revision

FAQ

Common questions, ranked by how often they come up.

General

What is AOS Mail?

A Mac email client where an AI agent has already triaged your inbox before you open it. The agent reads every message, decides what's important, drafts replies in your voice, surfaces decisions for you to confirm, and learns from your patterns. You're approving decisions, not chasing inbox zero.

How is this different from Apple Mail / Spark / Superhuman / etc.?

Other clients are display layers — they show you mail and add organization tools. AOS Mail is an agent layer — by the time you see the inbox, the agent has already worked through it. The closest comparison would be having an executive assistant pre-process your morning's mail.

Is my email data sent to Anthropic / OpenRouter?

Only what's needed for the agent to do its job: subject lines, sender info, message bodies it's analyzing. Mail is not sent in bulk; only individual messages on individual triage/draft/summary calls.

  • Anthropic's privacy policy governs Anthropic calls. Anthropic does not train on Claude API traffic.
  • OpenRouter forwards to whichever provider you select (DeepSeek, Mistral, Google AI Studio, etc.) and is bound by their respective policies.

Your full mailbox is never uploaded. The agent works on a per-message basis when needed.

See Privacy & Data for the full breakdown.

Does it work without internet?

Once mail has synced locally, you can browse and search offline. Sending mail, triaging new messages, and any agent operation requires network connectivity.

Is it free?

The app is free. You pay for whichever LLM provider you choose:

  • Anthropic: pay-per-token. A typical day of triage/drafts costs $0.05–$0.50 depending on volume.
  • OpenRouter free models: $0, but rate-limited (16 req/min per OpenRouter; upstream providers like Google AI Studio also throttle).
  • OpenRouter paid models: similar to Anthropic pricing on most upstream providers.

There's no AOS Mail subscription. Bring your own key.

Setup

Why can't I sign in to iCloud with my normal password?

Apple requires app-specific passwords for third-party IMAP clients. Generate one at https://account.apple.com → Sign-In and Security → App-Specific Passwords. See Getting Started.

How do I add a second account?

Settings → Accounts → Add Account. Same flow as the first-launch wizard. You can have unlimited accounts. Switch between them via the account picker in the titlebar or with ⌘1, ⌘2, ⌘3 … for the first nine.

Can I use the same Gmail account on two Macs?

Yes. Each install gets its own OAuth refresh token (stored per-account in macOS Keychain on that machine). Both can sync independently. Just install AOS Mail on each Mac and OAuth into Google from each.

How do I switch from Anthropic to OpenRouter mid-session?

Settings → Agent Tools → AI Models. Pick OpenRouter models from the dropdown for each feature. The change takes effect on the next call; no restart needed (since v0.1.9).

Agent behavior

How does the agent learn my writing style?

When you compose or send mail, the style indexer pulls features from your sent messages — sentence length, common opening/closing phrases, formality level, emoji usage, signature patterns. The style profile is stored in your local database and shipped along with draft-generation requests. The profile improves with volume; expect drafts to feel generic for the first ~50 sent messages, then increasingly natural.

You can inspect the style profile in Settings → Style and edit the system prompt that frames it.

What does "smart-action" do?

The smart-action key (Space by default) runs the agent's recommended action on the currently-selected thread:

  • "Archive" if the agent thinks the thread is done.
  • "Generate draft" if the agent thinks it needs a reply.
  • "Snooze for follow-up" if it's awaiting external action.
  • Otherwise, "Open and read".

Every smart-action is undoable via ⌘Z. Nothing irreversible without confirmation.

Why did the agent miss / mis-triage this thread?

Check Settings → Prompts → Analysis Prompt — that's the prompt steering triage decisions. Common cause: the prompt doesn't yet mention a pattern important to you (e.g., "investor updates are always high priority"). Adjust the prompt and re-triage that thread (right-click → Re-run Agent).

The agent also writes its reasoning into the audit log — click "Why" on any thread to see what it considered. If the reasoning is genuinely off, that's a model issue and switching tier (Sonnet → Opus) often helps.

Can I disable the agent for specific accounts?

Per-account agent enablement is on the roadmap. For now, the agent runs against every connected account.

What's the "learned rules" thing?

When the agent notices you doing the same action repeatedly on a sender or domain (always archive newsletter@nytimes.com, always trash promo@*.shopify.com), it proposes a rule — a deterministic shortcut that short-circuits Claude for matching emails. Rules are always proposed explicitly, never silent. You confirm or reject. Settings → Agent Tools → Learned Rules lists active ones.

Mail features

How do I send a reply?

Open a thread. Click "Generate draft" (or smart-action with Space). Review the draft. Edit if needed. Click Send (or ⌘↩).

Can I cancel a sent mail?

Yes — there's an "Undo send" delay (default 5 seconds). After you click Send, you have that window to ⌘Z and yank the message back. Configurable in Settings.

How do I attach a file?

Drag-drop into the compose window, or click the paperclip icon.

Does it support rich text / HTML?

Drafts compose in plain text or rich text (Tiptap-backed). HTML emails render in the reading pane. The agent reads HTML emails fine; output drafts default to plain text unless you've replied in rich text on that thread before.

Search — is it local or server?

Hybrid. Local search uses SQLite FTS5 on indexed mail (instant). When you scroll past the local hit count, the app falls back to the provider's server-side search for older mail.

Snooze — where does it put snoozed mail?

Snoozed threads go into a local "Snoozed" view (visible in the sidebar) and resurface at the snooze time in the inbox. On the server side, no labels are added — snooze is a client-side concept.

Calendar

What can the calendar integration actually do?

V1 covers:

  • Day view of upcoming events on your linked calendar.
  • "Suggest a time" from an email thread — agent reads the thread, proposes 2-3 time options based on your free/busy.
  • "Create event from thread" — agent extracts attendees, title, date, location.

Cross-calendar conflict detection and write-mode editing are V2 roadmap.

Which calendars are supported?

Google Calendar (auto-detected when you OAuth a Gmail account). iCal/CalDAV is roadmap.

Privacy & security

Where are my API keys stored?

In macOS Keychain, under service com.mrdulasolutions.aosmail. Inspectable via Keychain Access.app. The sidecar process reads them from Keychain at boot and keeps them in memory; they are never written to disk in plaintext.

Where are my OAuth tokens stored?

Same: macOS Keychain. Refresh tokens are mirrored to a tokens-<account>.json file in the support directory for backup, but the canonical store is Keychain.

Where is my mail data stored?

~/Library/Application Support/AOS Mail/data/aos-mail.db — local SQLite. Messages, threads, drafts, the FTS index, learned rules. Not synced anywhere by AOS Mail (your provider already has the canonical copy).

How do I wipe everything?

rm -rf ~/Library/Application\ Support/AOS\ Mail

Plus delete the app from /Applications, plus optionally clear Keychain entries (search "aosmail" in Keychain Access).

Is it open source?

Yes — BUSL-1.1. Source readable, modifiable, redistributable for non-commercial use. Becomes Apache 2.0 on January 1, 2033. Commercial users need a separate license.

Build / contribute

Can I run my own build?

Yes — git clone, npm install, npm run dev. See Building from Source.

How do I contribute a PR?

See Contributing. Briefly: open an issue first for non-trivial changes, branch from main, ensure npm run lint && npm run typecheck && npm run typecheck:sidecar && npm run test:sidecar all pass, open the PR.

Why Tauri instead of Electron?

Smaller bundle (45 MB vs 80+ MB), better OS integration (native menus, vibrancy, Keychain via Rust keyring crate), and Tauri's sidecar pattern lets us keep the Node ecosystem (Anthropic SDK, googleapis, imapflow, Tiptap) without porting any of that to Rust. The renderer ↔ sidecar split is the actual interesting architecture — see Architecture.

Why a Node sidecar?

Because rewriting @anthropic-ai/sdk, googleapis, imapflow, nodemailer, mailparser, better-sqlite3, and @tiptap/* into Rust would be 6–10 weeks for zero net user benefit. The sidecar pattern is a Tauri-blessed approach that gives us the native shell without abandoning the Node ecosystem we depend on. Long term we'd consider Node SEA or @yao-pkg/pkg for a smaller bundle; short term, the bundled Node is acceptable.

Clone this wiki locally