mcpbeat

Email Triage

borghei/email-triage

> Classify a batch of emails into action categories (reply now, reply later, archive, delete, unsubscribe) and surface unsubscribe candidates. Use after a busy week, running inbox zero, or triaging email overload.

4k tokens
context cost
the whole folder, loaded on every use
4
files
ships runnable scripts
0
copies elsewhere
how many repositories repackaged it
447
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/borghei/Claude-Skills --skill email-triage

What comes with it

12 691 bytes besides the instruction
assets/gmail_filter_template.md
references/inbox_zero_method.md
scripts/email_classifier.py

What it tells the agent to use

found in the instruction text
Task spawns other agents

The instruction itself

13 sections, as written by the author

Email Triage

Classify a batch of email subjects + senders into action buckets and surface inbox-zero candidates.


Keywords

email, inbox, inbox zero, triage, unsubscribe, mailing list, mailbox, gmail, outlook, productivity


Clarify First

Before triaging, confirm these inputs. If any is unknown or vague, ASK — do not assume:

  • [ ] Inbox export fields — subject, sender, snippet drive classification accuracy; missing columns degrade the buckets
  • [ ] Priority / VIP senders — who always routes to reply_now regardless of content
  • [ ] Unsubscribe tolerance — purge all marketing vs keep newsletters you value; sets how aggressive the unsubscribe/delete buckets are

Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the artifact.


Quick Start

  • Export inbox to CSV with columns: subject,sender,snippet,received_at
  • Run: python scripts/email_classifier.py inbox.csv
  • Review action buckets; act on each in order

Core Workflows

Workflow 1: Weekly Inbox Triage

  • Export the past week's inbox
  • Run classifier
  • Action in order: reply-now → reply-later (move to follow-up folder) → archive → unsubscribe → delete
  • Apply Gmail filters (see assets/gmail_filter_template.md) so future similar emails route automatically

Time Estimate: 30-45 minutes for a busy week.

Workflow 2: Unsubscribe Pass

  • Run classifier; review unsubscribe candidates
  • Unsubscribe in batch (most senders honor unsubscribe links within ~10 days)
  • For senders that don't honor, set Gmail filter to auto-delete

Time Estimate: 15 minutes per pass.

Workflow 3: Inbox-Zero Reset

  • Apply the full inbox-zero method from references/inbox_zero_method.md
  • Move every email older than 30 days to archive (you'll find 1% later via search)
  • Triage the remaining recent emails using the classifier

Time Estimate: 1-2 hours one-time; then 20 min/week to maintain.


Tools

email_classifier.py

Classifies email rows into action buckets using rule-based pattern matching on sender domain, subject line, and snippet.

python scripts/email_classifier.py inbox.csv
python scripts/email_classifier.py inbox.csv --json

Action buckets:

  • reply_now — direct addressing, time-sensitive language, named-person sender
  • reply_later — informational threads, longer non-urgent
  • archive — receipts, confirmations, completed transactions
  • unsubscribe — newsletters, marketing, promotional
  • delete — spam patterns, low-signal senders
  • review — couldn't classify confidently

Reference Guides

  • references/inbox_zero_method.md — Method, daily routine, common pitfalls

Templates

  • assets/gmail_filter_template.md — Common Gmail filter recipes for the action buckets above

Best Practices

  • The 2-minute rule: if a reply takes < 2 minutes, do it now.
  • Don't archive instead of unsubscribing. Recurring senders compound — kill the source.
  • Process in batches. Constant inbox checking destroys focus more than email itself.
  • Inbox is not a to-do list. Move action items to a real task tool.

How to use it

Copy the folder

Take borghei/email-triage from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.