email-triage
IMAP email scanning and triage with AI classification via a local Ollama LLM. Scans unread emails, categorizes them as urgent, needs-response, informational, or spam, and surfaces important messages for agent consumption. Works standalone with heuristic fallback — Ollama optional but recommended.
Best use case
email-triage is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
IMAP email scanning and triage with AI classification via a local Ollama LLM. Scans unread emails, categorizes them as urgent, needs-response, informational, or spam, and surfaces important messages for agent consumption. Works standalone with heuristic fallback — Ollama optional but recommended.
Teams using email-triage should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/email-triage/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How email-triage Compares
| Feature / Agent | email-triage | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
IMAP email scanning and triage with AI classification via a local Ollama LLM. Scans unread emails, categorizes them as urgent, needs-response, informational, or spam, and surfaces important messages for agent consumption. Works standalone with heuristic fallback — Ollama optional but recommended.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Email Triage Scan your IMAP inbox, classify emails into priority categories, and surface the ones that need attention. Uses a local LLM (Ollama) for intelligent classification with a rule-based heuristic fallback when Ollama is unavailable. ## Prerequisites - **Python 3.10+** - **IMAP-accessible email account** (Gmail, Fastmail, self-hosted, etc.) - **Ollama** *(optional)* — for AI-powered classification. Without it, the script uses keyword-based heuristics that still work well for common patterns. ## Categories | Icon | Category | Description | |------|----------|-------------| | 🔴 | `urgent` | Outages, security alerts, legal, payment failures, time-critical | | 🟡 | `needs-response` | Business inquiries, questions, action items requiring a reply | | 🔵 | `informational` | Receipts, confirmations, newsletters, automated notifications | | ⚫ | `spam` | Marketing, promotions, unsolicited junk | ## Configuration All configuration is via environment variables: | Variable | Required | Default | Description | |----------|----------|---------|-------------| | `IMAP_HOST` | ✅ | — | IMAP server hostname | | `IMAP_PORT` | — | `993` | IMAP port (SSL) | | `IMAP_USER` | ✅ | — | IMAP username / email address | | `IMAP_PASS` | ✅ | — | IMAP password or app-specific password | | `EMAIL_TRIAGE_STATE` | — | `./data/email-triage.json` | Path to the JSON state file | | `OLLAMA_URL` | — | `http://127.0.0.1:11434` | Ollama API endpoint | | `OLLAMA_MODEL` | — | `qwen2.5:7b` | Ollama model for classification | ## Commands ```bash # Scan inbox and classify new unread emails python3 scripts/email-triage.py scan # Scan with verbose output (shows each classification) python3 scripts/email-triage.py scan --verbose # Dry run — scan and classify but don't save state python3 scripts/email-triage.py scan --dry-run # Show unsurfaced important emails (urgent + needs-response) python3 scripts/email-triage.py report # Same as report but JSON output (for programmatic use) python3 scripts/email-triage.py report --json # Mark reported emails as surfaced (so they don't appear again) python3 scripts/email-triage.py mark-surfaced # Show triage statistics python3 scripts/email-triage.py stats ``` ## How It Works 1. **Connects to IMAP** over SSL and fetches unread messages (up to 20 per scan). 2. **Deduplicates** by Message-ID (or a hash of subject + sender as fallback) so emails are never classified twice. 3. **Classifies** each email using Ollama if available, otherwise falls back to keyword heuristics. 4. **Stores state** in a local JSON file — tracks category, reason, and whether the email has been surfaced. 5. **`report`** surfaces only unsurfaced urgent and needs-response emails, sorted by priority. 6. **`mark-surfaced`** flags reported emails so they won't appear in future reports. 7. **Auto-prunes** state to the most recent 200 entries to prevent unbounded growth. ## Integration Tips - **Heartbeat / cron:** Run `scan` periodically, then `report --json` to check for items needing attention. - **Agent workflow:** `scan` → `report --json` → act on results → `mark-surfaced`. - **Without Ollama:** The heuristic classifier handles common patterns (automated notifications, marketing, urgent keywords) well. Ollama adds nuance for ambiguous emails. - **App passwords:** If your provider uses 2FA, generate an app-specific password for IMAP access.
Related Skills
kit-email-operator
**AI-powered email marketing for Kit (ConvertKit)**.
portable-email-manager
Lightweight email manager with IMAP/SMTP support, advanced search, folder management, and attachment detection. Works with Zoho, Gmail, Outlook, and any IMAP/SMTP provider.
shitty-email
Create and manage temporary disposable email inboxes
email-marketing-2
Build and execute email marketing campaigns for a solopreneur business.
email-sequence
When the user wants to create or optimize an email sequence, drip campaign, automated email.
langchain-email-agent
The `EmailAgent` class provides an AI-powered email composition and sending capability using LangChain.
apipick-email-checker
Validate email addresses using the apipick Email Validator API.
email-resend
Send and receive emails using the Resend API.
imap-smtp-email
Read and send email via IMAP/SMTP. Check for new/unread messages, fetch content, search mailboxes, mark as read/unread, and send emails with attachments. Works with any IMAP/SMTP server including Gmail, Outlook, 163.com, vip.163.com, 126.com, vip.126.com, 188.com, and vip.188.com.
slybroadcast-voicemail
Send Slybroadcast ringless voicemail campaigns from OpenClaw/LLMs using CLI or MCP, including AI voice generation.
clawemail
Google Workspace via ClawEmail — Gmail, Drive, Docs, Sheets, Slides.
clawemail-admin
Provision and manage @clawemail.com Google Workspace email.