-
Notifications
You must be signed in to change notification settings - Fork 0
FAQ
Common questions, ranked by how often they come up.
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.
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.
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.
Once mail has synced locally, you can browse and search offline. Sending mail, triaging new messages, and any agent operation requires network connectivity.
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.
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.
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.
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.
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).
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.
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.
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.
Per-account agent enablement is on the roadmap. For now, the agent runs against every connected account.
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.
Open a thread. Click "Generate draft" (or smart-action with Space). Review the draft. Edit if needed. Click Send (or ⌘↩).
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.
Drag-drop into the compose window, or click the paperclip icon.
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.
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.
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.
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.
Google Calendar (auto-detected when you OAuth a Gmail account). iCal/CalDAV is roadmap.
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.
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.
~/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).
rm -rf ~/Library/Application\ Support/AOS\ MailPlus delete the app from /Applications, plus optionally clear Keychain entries (search "aosmail" in Keychain Access).
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.
Yes — git clone, npm install, npm run dev. See Building from Source.
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.
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.
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.