imail

Inbox, in five seconds per email.

Pick a mailbox on the left to browse Inbox · Drafts · Sent, or hit + Add account to wire up a new one.

  • 📥 Inbox → batch-triage all unread, or pick one email and ask for three reply versions.
  • 📝 Drafts → see what's queued to send, delete what you don't want.
  • 📤 Sent → audit what already went out.

Every drafted reply opens with Dear <FirstName>, and closes with Best regards, over your sign-off. Three tones — positive / neutral / negative — drafted in a single API call.
Currently . Override by setting USER_SIGNOFF=<your name> in ~/.config/imail/.env, then restart.
All drafts are written in English regardless of the incoming email's language. (Configurable in a future release.)
Currently . Choices: deepseek-chat (fast / cheap) · deepseek-reasoner (sharper, uses CoT — slower / pricier). Set IMAIL_MODEL + restart.
OpenAI-compatible. Default DeepSeek; point IMAIL_BASE_URL at Together / Groq / Moonshot / a self-hosted Ollama instance to keep email bodies off third-party servers.

1
2
3
+
D
S
Q

  • Server binds to 127.0.0.1 by default — only your machine reaches the UI.
  • IMAP passwords stay in the OS keyring (macOS Keychain / Windows Credential Manager / Secret Service on Linux). Never in accounts.json or .env.
  • OAuth tokens live at , mode 0600.
  • ! Gmail OAuth requests readonly, modify, compose, and send — choosing a reply and pressing ⌘↵ sends it immediately. Drop gmail.send from providers/gmail.py if you want manual-send-only.
  • ! Email bodies are sent to IMAIL_BASE_URL (DeepSeek by default) for draft generation. To stay fully on-device, point it at a local Ollama / vLLM.
  • No telemetry. imail makes no outbound requests other than to IMAP/Gmail and your configured LLM endpoint.

— provider kind, hostname, label. No secrets.
— pending drafts (cached three-replies) + done (your chosen reply per email).
+ token-*.json per Gmail account.

imail 1.3.2 · all releases
AGPL-3.0-or-later · commercial inquiries: wzh4464@gmail.com

· · search:

refreshing…