Email Whiz
Gmail inbox management via MCP. Read current labels and filters before taking action.
Canonical Vocabulary
| Term | Definition |
|---|
| 4D+N | DO / DELEGATE / DEFER / REFERENCE / NOISE — five triage buckets |
| inbox zero | State where inbox contains only items requiring action today |
| routine | Repeatable time-boxed workflow (daily 5 min, weekly 15 min) |
| streak | Consecutive days achieving inbox zero; stored in progress file |
| auto-rule | Gmail filter created from behavioral pattern analysis |
| filter | Gmail rule that matches incoming email and applies actions |
| VIP | Sender who receives consistent replies and high-priority treatment |
| noise | Automated or low-value email; candidate for filtering/deletion |
| engagement | Reply rate to a sender: replies sent ÷ emails received |
| bankruptcy | Inbox with 500+ unread or growing backlog — triggers staged recovery |
| confidence | HIGH >80% / MEDIUM 50-80% / LOW <50% — governs auto-rule actions |
| batch op | Single gmail_batch_modify_emails
or gmail_batch_delete_emails
call |
Dispatch
| Action |
|---|
| Categorize inbox with 4D+N, batch process by category |
| Daily/weekly routine, progress tracking, bankruptcy detection |
| Pattern-detected filter suggestions with confidence scoring |
| Behavioral analysis → auto-create Gmail filters from templates |
| Volume trends, response times, sender frequency, timing patterns |
| Subscription audit + unsubscribe plan |
| Taxonomy analysis, merge/rename/delete recommendations |
| Natural language → Gmail search query |
| VIP + noise identification |
| Recent important email summary |
| Archive candidates, duplicate detection, batch archiving |
| Full inbox health report with score and action plan |
| (empty) | Show this mode menu |
Classification gate for ambiguous input: If
could match multiple modes, ask which the user wants before proceeding.
Hybrid Mode Protocol
Read operations — execute immediately:
Write operations — confirm before executing:
- Single: , ,
- Batch:
gmail_batch_modify_emails
, gmail_batch_delete_emails
- Labels: , ,
gmail_get_or_create_label
- Filters: ,
gmail_create_filter_from_template
,
Confirmation format — always show before write ops:
Action: {description}
Scope: {count} email(s) / label(s) / filter(s)
Reversible: {Yes | NO}
[Sample: first 3 subjects for batch ops]
Use
for full confirmation and report formats.
Phase 0: Discovery (Run First)
Before any workflow, establish context:
1. gmail_get_labels → store label names + IDs
2. gmail_get_filters → store existing filter criteria
3. gmail_search_emails → query: "in:inbox" (maxResults: 20)
note unread count, top senders, label patterns
Use discovered label names throughout — never invent names that conflict with existing taxonomy.
Mode: Triage
Categorize inbox using 4D+N. Reference:
.
1. Search: is:unread (maxResults: 50)
2. For each email: classify as DO / DELEGATE / DEFER / REFERENCE / NOISE
3. Collect IDs by category
4. Batch process:
- NOISE ids: gmail_batch_modify_emails (removeLabelIds: [INBOX])
- REFERENCE ids: gmail_batch_modify_emails (add _reference, remove INBOX)
- DEFER ids: gmail_batch_modify_emails (add _deferred, remove INBOX)
5. Report with triage-summary template
6. Present DO items for user action
After triage: log session to inbox-zero progress file if running as part of daily routine.
Mode: Inbox Zero
Structured habit system for achieving and maintaining inbox zero. Reference:
.
Daily Routine (5 min)
1. Search: is:unread newer_than:1d → identify P0/P1
2. Run quick triage pass (4D+N)
3. Batch archive NOISE + REFERENCE
4. Report: inbox count before → after
5. Update ~/.claude/email-whiz/inbox-zero-progress.json
- achieved_zero: inbox_count == 0
- increment streak if zero
Weekly Review (15 min)
1. Clear deferred: label:_deferred older_than:7d
2. Filter effectiveness: inbox noise still arriving? → new filter candidates
3. Newsletter sweep: label:_reading/newsletters is:unread older_than:14d
4. Update weekly_reviews entry in progress file
Bankruptcy detection: If
count > 500 or growing 3+ consecutive days, present recovery options (Daily Blitz / Staged Approach / Nuclear Reset). Always confirm before bulk archiving. See
for full protocols.
Progress report format:
📊 Streak: {n} days | Best: {n} | Last zero: {date}
Inbox: {before} → {after}
Mode: Filters
Pattern-detected filter suggestions. Reference:
.
1. Search recent inbox (maxResults: 100, last 30d)
2. Cluster by sender domain + subject patterns
3. Check gmail_get_filters for existing coverage
4. Score each candidate:
HIGH (>80%): volume ≥20, engagement <5% → offer to create
MEDIUM(50-80%): volume ≥10, engagement <15% → suggest
LOW (<50%): borderline → show only
5. Present with filter-suggestions template
6. On approval: gmail_create_filter or gmail_create_filter_from_template
Check for conflicts before creating: scan existing filter criteria for overlaps.
Mode: Auto-Rules
Deep behavioral analysis → automated filter creation. Reference:
§ Auto-Rule Detection.
Analysis Phase
1. Search: in:inbox after:{90d_ago} (maxResults: 500)
2. Sender cluster analysis:
- Compute volume + engagement per sender
- Identify: HIGH confidence (auto-create), MEDIUM (review), LOW (skip)
3. Subject pattern mining:
- Find repeating prefixes: [JIRA], PR #, Invoice #
- Score by occurrence count
4. Check conflict with existing filters
Creation Phase
5. Present auto-rules report (see templates.md)
6. HIGH confidence: gmail_create_filter_from_template with confirmation
MEDIUM confidence: gmail_create_filter after individual review
7. Schedule learning loop re-analysis after 2 weeks
Mode: Analytics
Email communication metrics and trends. Reference:
.
1. Volume: count in:inbox per week (4-week trend)
- Compare week-over-week; classify growing/stable/declining
2. Inbox reach rate: direct inbox ÷ total received
- Good: <30% | Needs filters: >60%
3. Response health:
- is:starred older_than:2d → overdue
- Reply rate: in:sent subject:Re: ÷ in:inbox (30d sample)
4. Sender frequency:
- Top 20 senders by volume + engagement matrix
- Classify: VIP / Active / Passive / Noise
5. Time-of-day: extract hour from date fields in sample
6. Label distribution: activity per label, stale detection (no messages 90d+)
7. Present full analytics report (see templates.md)
Mode: Newsletters
Newsletter subscription audit + unsubscribe plan.
1. Search: list:* OR subject:(newsletter OR digest OR "weekly roundup")
2. For each subscription: estimate frequency + read rate (recency heuristic)
3. Classify: UNSUBSCRIBE (low read rate) / KEEP / FILTER (keep but skip inbox)
4. Present newsletter-audit report
5. On approval: open unsubscribe links (provide URL) or create filter
Reference:
§ Unsubscribe Strategies.
Mode: Labels
Label taxonomy analysis and cleanup.
1. gmail_get_labels → list all with counts
2. Find issues:
- Duplicates/synonyms (e.g., "work" + "Work" + "work-email")
- Stale labels (no messages in 90d)
- Flat structure that should be hierarchical
3. Suggest: MERGE / RENAME / DELETE / RESTRUCTURE
4. For merges: gmail_batch_modify_emails to migrate, then gmail_delete_label
5. Use gmail_update_label for renames
6. Present label-analysis report
Reference:
§ Label Hierarchy Best Practices.
Mode: Search
Natural language → Gmail search query.
Input: user's goal in plain language
Output: optimized Gmail search query with explanation
Steps:
1. Parse intent: who / what / when / status
2. Map to operators: from:, subject:, after:, is:unread, label:, etc.
3. Add negations for common noise
4. Show query + explanation + expected matches
5. Offer to run the search
Reference:
§ Gmail Search Operators.
Mode: Senders
VIP and noise sender identification.
1. Sample last 200 inbox emails
2. Compute per sender: volume + engagement + recency
3. VIP candidates: reply rate >50% OR consistently starred
4. Noise candidates: volume >10 AND engagement 0%
5. Present sender report with recommended actions
6. On approval: create VIP filter (always important) or noise filter
Reference:
§ Sender Shortcuts,
§ VIP Management.
Mode: Digest
Recent important email summary.
1. Search: is:important newer_than:3d (or is:starred OR is:unread is:important)
2. For each: extract sender, subject, 1-line summary
3. Categorize: RESPOND / FYI / READING
4. Present digest report
5. Offer: "open N" | "archive fyi"
Mode: Cleanup
Archive candidates and batch archiving.
1. Detect stale inbox items:
- Read receipts/confirmations: subject:(receipt OR confirmation) older_than:30d
- Old newsletters: label:_reading/newsletters older_than:30d
- Expired deferrals: label:_deferred older_than:14d
- Large threads fully read: is:read has:nouserlabels older_than:60d
2. Show batch-operation-confirmation with samples
3. On approval: gmail_batch_modify_emails (remove INBOX / add archive label)
4. Report: inbox count before → after
Never use
gmail_batch_delete_emails
in cleanup — archive only.
Reference:
§ Batch Operations.
Mode: Audit
Full inbox health report.
1. Run Phase 0 discovery (labels, filters, sample)
2. Collect metrics:
- Inbox count + unread %
- Filter count + estimated coverage
- Label count + stale count
- Newsletter volume
- VIP / noise distribution
3. Score: 0-100 based on inbox reach rate, filter coverage, label health
4. Identify top 3 quick wins (high impact, low effort)
5. Generate week-by-week action plan
6. Present full-audit report
Reference:
,
§ Full Audit.
Error Handling
| Scenario | Response |
|---|
| MCP connection failure | Report error, provide manual Gmail URL as fallback |
| Rate limit (429) | Reduce batch size to 25, wait 60s, retry once |
| Message not found (404) | Skip and continue; note in report |
| Partial batch failure | Report succeeded/failed counts; suggest retry for failures |
| Label ID mismatch | Re-fetch labels via and remap |
Scope Boundaries
IS for: Gmail triage, inbox zero habits, filter creation, auto-rules, email analytics, newsletter management, label organization, search queries, sender analysis, digest, cleanup, inbox health audit.
NOT for: Composing or sending outbound emails, calendar scheduling, Google Drive, non-Gmail accounts, real-time email monitoring, CRM workflows.
Reference File Index
| File | Content | Load When |
|---|
references/triage-framework.md
| 5D+N decision trees, sender/subject signals, batch processing | triage, inbox-zero |
references/filter-patterns.md
| Gmail operators, filter templates, auto-rule algorithms, learning loop | filters, auto-rules, search |
| Bankruptcy, VIP, batch ops, label hierarchy, unsubscribe, security | cleanup, labels, senders, newsletters |
| All confirmation, report, and execution result templates | Every mode |
references/inbox-zero-system.md
| Daily/weekly routines, progress schema, bankruptcy recovery | inbox-zero |
references/analytics-guide.md
| Volume, response time, sender frequency, timing methodology | analytics, audit |
references/tool-reference.md
| All 19 Gmail MCP tool signatures, parameters, system limits | When selecting tools |
Scripts:
| Script | Purpose | Run When |
|---|
scripts/inbox_snapshot.py save --inbox-count N
| Save inbox count snapshot | After each inbox-zero check |
scripts/inbox_snapshot.py trend --days 7
| Compute inbox trend (growing/stable/declining) | During analytics mode |
scripts/inbox_snapshot.py list --days 30
| List recent snapshots | When reviewing progress |
Critical Rules
- Run Phase 0 discovery before any workflow — never assume label/filter state
- Confirm all write operations — show scope, count, and reversibility before calling
- Batch similar operations — never loop when
gmail_batch_modify_emails
applies
- Preserve existing taxonomy — suggest improvements, never silently rename
- Check filter conflicts before creating — call first
- Include confidence scores on all filter/rule suggestions
- Provide rollback guidance for every bulk operation
- Handle MCP failures gracefully — surface manual fallback steps
- Surface unsubscribe links — make newsletter cleanup actionable
- Prioritize quick wins — high impact, low effort first in all reports
- Update inbox-zero progress after every routine — write streak data to
~/.claude/email-whiz/inbox-zero-progress.json
- Never use
gmail_batch_delete_emails
in cleanup mode — archive only; deletion requires explicit user intent