From operator-skills
Triages Gmail inbox using GTD: classifies unlabeled emails, applies labels, executes actions like archiving/drafts/digests, suggests filters. Activates on triage/organize inbox requests.
npx claudepluginhub dazuck/operator-skills --plugin operator-skillsThis skill uses the workspace's default tool permissions.
Email triage using GTD: Do it now, Decide, Defer, or Dump.
Triages Gmail inbox by classifying emails using Eisenhower matrix for importance/urgency, determines if replies needed, and drafts responses in user's voice. Useful for inbox zero and email prioritization.
Scans unread emails from Gmail or Hey.com, scores by priority (VIP, urgency, deadlines), classifies them, saves relevant ones as vault notes, and generates a triage report.
Executes Gmail triage from vault reports: archive, delete, label, star, unsubscribe emails. Drafts replies interactively or autonomously using /gmail, /gmail draft, /gmail auto-draft.
Share bugs, ideas, or general feedback.
Email triage using GTD: Do it now, Decide, Defer, or Dump.
Check for gscli first (faster, includes calendar/drive context):
which gscli && gscli auth status
If available and authenticated, use gscli for READ operations:
gscli gmail list - List messagesgscli gmail read <id> - Read messagegscli calendar list - Get upcoming meetingsgscli drive search - Find related docsUse Gmail MCP for WRITE operations (gscli is read-only):
Fallback: If gscli unavailable, use Gmail MCP for everything.
Process ALL unarchived mail (Inbox), regardless of read state:
snooze/YYYY-MM-DD) → ignore until date passes1. Check tool availability (gscli vs MCP-only)
2. Load references:
- learned-rules.md (corrections take precedence)
- known-senders-private.md (if exists) or known-senders.md
3. Check snoozed items → unsnooze if date passed
4. Fetch emails (Inbox, regardless of read state)
5. Fetch context: calendar, Linear (graceful fail)
6. For each email:
a. Already labeled by Gmail filter? → Validate, compute urgency
b. Unlabeled? → Classify, apply label, track pattern
c. Invoice/Bill detected? → Validate, flag validity, surface for approval
7. Execute Tier 1 actions (no approval needed)
8. Aggregate Tier 2 → create newsletter digest
9. Process invoices → validate, present for approval, forward if approved
10. Present triage summary grouped by computed urgency
11. Await decisions → execute → log corrections
12. Suggest new Gmail filters if patterns emerged
Labels = stable categorization (stored on email) Urgency = dynamic computation (calculated fresh each run)
Urgency changes constantly (Monday's "this week" becomes Friday's "today"). Don't label urgency — compute it based on context.
Gmail filters handle deterministic patterns instantly at delivery. AI handles unlabeled items and suggests new filters when patterns emerge.
If email is already labeled (by Gmail filter):
If email is unlabeled:
Create labels if missing. Use Gmail MCP get_or_create_label.
Content Bundles (for Simplify Gmail visual grouping):
Newsletters - digested content, auto-archive afterReceipts - payment confirmations, auto-archiveBills - invoices awaiting payment (never auto-archive)Bills/Queued - invoices forwarded to Brex for paymentBills/Crypto-Pending - crypto invoices awaiting manual paymentBills/Paid - paid invoices (audit trail)Notifications - tool notifications, auto-archive (unless error)Transactional - shipping, confirmationsEntity Types (for rules + search):
Team - internal team domainsInvestors - known investor contactsLegal - law firms, legal mattersVendors - payroll, finance, contractorsAction State (workflow tracking):
ic/needs-response - user owes a replyic/waiting-on - ball in their courtic/scheduled - has follow-up dateic/processed - audit trail (apply before archiving)Snooze (time-based deferral):
snooze/YYYY-MM-DD - hide until this dateCompute urgency fresh each run based on context:
🔴 TODAY - Surface immediately
🟡 THIS WEEK - Surface prominently
🟢 SOMETIME - Surface in list
⚪ FYI - Mention briefly or skip
| Pattern | Action |
|---|---|
| Payment confirmations | Label: Receipts → Archive |
| Calendar responses (Accepted/Declined/Tentative) | Archive |
| Tool notifications | Label: Notifications → Archive |
| Misrouted (wrong recipient, user not CC'd) | Archive + note |
Escalate to Tier 3 if contains: "failed", "error", "action required", "urgent", "security alert"
Match: *@substack.com, *@tldrnewsletter.com, *@beehiiv.com, known senders (see references/known-senders.md)
Action: Label: Newsletters → Summarize → Archive originals
Output: Create digest with top stories, key insights. Digest is the deliverable; originals archived for reference.
ic/needs-response labelKeep it scannable. Group by computed urgency:
🔴 TODAY (2)
├── **Alex** [Team] - Q1 budget review needs sign-off by EOD
│ Labels: Team, ic/needs-response
│ Context: You're meeting them at 2pm
│ → [Draft response] [Snooze 2h] [Mark waiting-on]
│
└── **Justworks** [Vendors] - Payroll processing failed
Labels: Vendors, ic/needs-response
Context: Payroll due today, $102K
→ [Draft response] [Call 888-534-1711]
🟡 THIS WEEK (3)
├── **Cooley** [Legal] - Stock option docs for review
│ Labels: Legal, ic/needs-response
│ → [Draft response] [Snooze to Monday]
...
🟢 SOMETIME (5)
├── **Random Vendor** - Quarterly review request
│ → [Draft polite decline] [Snooze 2 weeks]
...
✅ AUTO-PROCESSED
- Archived: 3 calendar responses, 2 receipts, 4 notifications
- Labels applied: 2 new Team, 1 new Vendors
📰 NEWSLETTER DIGEST
- 6 newsletters summarized → [View digest]
- Archived originals
🗑️ ELIMINATION CANDIDATES (4)
- sales@random-saas.com (3 emails, cold outreach)
- marketing@tool-you-dont-use.com (5 emails, drip)
→ [Unsubscribe all] [Select individually] [Skip]
When user requests snooze:
snooze/YYYY-MM-DDic/scheduled labelOn future triage runs, check snoozed items:
When user approves a draft:
Never send without explicit "send" or "yes send it" confirmation.
When an email is detected as an invoice or bill that requires manual payment action.
SKIP this flow for auto-pay items:
known-senders.md for autopay: true)PROCESS through this flow:
Trigger invoice flow when email contains:
AND sender is NOT marked as autopay: true in known-senders.md.
For each invoice, assess validity:
✅ LOOKS VALID - All conditions met:
known-senders.md🚩 SUSPICIOUS - One or more concerns:
⛔ LIKELY FRAUD - Reject signals present:
Invoices may require different payment methods. Validation applies to ALL payment types.
💳 STANDARD (Brex) - Default for most vendors:
🪙 CRYPTO/USDC - Separate payment flow:
payment: crypto)⚠️ Note: Crypto payment request from a vendor that normally takes USD is a RED FLAG. Crypto request from a known crypto-native vendor is expected.
💰 INVOICES REQUIRING APPROVAL (2)
📄 AWS - $2,847.23 [AUTO-PAY - No action needed]
Just FYI: Card on file will be charged
→ [Note only]
📄 Legal Firm LLP - $12,500.00 💳
Invoice #: INV-2025-0042
Due: Jan 25, 2025
Validation: ✅ LOOKS VALID
Confidence: HIGH
Reason: Known vendor, consistent with retainer amount
Payment: ACH/Wire
Prior invoices: 6 (avg: $12,500/mo)
→ [Approve & forward to Brex] [Review first] [Reject]
📄 Web3 Infra Co - $5,000.00 🪙
Invoice #: 2025-01-001
Due: Jan 20, 2025
Validation: ✅ LOOKS VALID
Confidence: HIGH
Reason: Known crypto-native vendor, USDC payment expected
Payment: USDC (expected for this vendor)
Prior invoices: 3 (avg: $5,000/mo)
→ [Pay via USDC] [Review first] [Reject]
📄 Acme Consulting - $15,000.00 🚩
Invoice #: 2025-001
Due: Jan 20, 2025
Validation: 🚩 SUSPICIOUS
Confidence: LOW
Reason: First invoice from this sender, no prior relationship found
Payment: Wire requested
Prior invoices: 0
→ [Review carefully] [Request verification] [Reject]
When user approves a valid invoice for standard payment:
bills@brex.comBills/QueuedForward email format:
To: bills@brex.com
Subject: Fwd: [Original subject]
Body: [Original email content]
Never auto-forward - Always require explicit approval per invoice.
When user approves a crypto invoice:
Bills/Crypto-PendingBills/PaidTrack invoice history for validation:
references/invoice-history.md (create if missing)For Tier 4 items:
Track patterns in unlabeled emails that AI classifies. When a pattern emerges, suggest Gmail filter creation.
Suggest new Gmail filter when:
Output format for suggestions:
📋 SUGGESTED GMAIL FILTERS
Based on patterns I've seen:
1. from:*@cooley.com → Legal
(classified 5 emails this way, 100% match)
→ [Create filter] [Ignore] [Add to known senders]
2. from:*@srsacquiom.com → Vendors
(classified 3 emails, shareholder notices)
→ [Create filter] [Ignore]
3. subject:"Your order" from:*@amazon.com → Receipts
(classified 8 emails)
→ [Create filter] [Ignore]
Suggest unsubscribe/block rules when:
When user overrides AI classification:
references/learned-rules.mdExample correction log:
You archived "SRS Acquiom" despite HIGH urgency classification.
→ Noted: Shareholder notices from SRS Acquiom = FYI only
→ Suggest filter: from:*@srsacquiom.com subject:shareholder → auto-archive?
All optional. Graceful fail. Note status at end: "Calendar: connected | Linear: unavailable"
ic/processed label before archiving (audit trail)autopay: true in known-sendersreferences/invoice-history.mdreferences/classification-rules.md - Detailed patterns for each tierreferences/known-senders.md - VIPs, team, newsletter sources (template)references/known-senders-private.md - Personal overrides (if exists, takes precedence)references/learned-rules.md - Corrections from past runs (auto-generated)references/invoice-history.md - Invoice history for validation (auto-generated)