inbox-summary
Smart email triage from Gmail and iCloud. Highlights what needs attention based on priority senders and mission context. Trigger phrases include "email" or "mail" - use when "check my email", "triage my email", "what emails need attention", "email summary", "mail inbox".
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Inbox Triage
What This Does
Fetches the last 24 hours of email from Gmail and iCloud, then intelligently triages into:
- Needs Attention - Priority senders, mission-relevant, questions needing replies
- Worth Knowing - Receipts, notifications, first-time senders (flagged as unusual)
- Filtered - Newsletters, promos, automated (count only)
The skill learns your priority senders over time as you mark them.
Instructions
Step 1: Fetch and Triage Emails
Run the triage script:
python3 skills/inbox-summary/scripts/fetch_inbox_summary.py
Filter by sender domain:
python3 skills/inbox-summary/scripts/fetch_inbox_summary.py --sender blackbelt.com
The --sender flag filters results to only show emails from that domain (e.g., --sender stripe.com for payment notifications). Still applies the 24-hour window.
This returns JSON with:
-
triage.attention- Emails needing attention with reasons -
triage.knowing- Worth knowing, grouped -
triage.filtered- Noise (stats only) -
priority_domains- Currently marked priority senders
Step 2: Present the Triage Summary
Format the output like this:
## Inbox Triage (Last 24 Hours)
**Gmail:** [X] emails | **iCloud:** [Y] emails
### Needs Attention
- **[sender]** - [subject]
[reason: Priority sender / Mission-context: BlackBelt / Looks like it needs a reply]
- **[sender]** - [subject]
[reason]
### Worth Knowing
- **[domain]** ([count]) - [brief description: Receipts / Calendar updates]
- **[sender]** - [subject]
*Unusual: First time seeing this sender*
### Filtered ([count] emails)
- Newsletters: [X]
- Promotions: [Y]
- Automated: [Z]
---
*[X] priority senders configured. Say "mark [domain] as priority" to add more.*
Step 3: Handle Priority Domain Requests
When the user says "mark [domain] as priority":
- Read the config file:
cat skills/inbox-summary/config/priority-domains.json
-
Add the domain to the
domainsarray andaddedobject with today's date -
Write back using Edit tool
-
Confirm: "Added [domain] to priority senders. Future emails will appear in Needs Attention."
Step 4: Offer Next Steps
After presenting the summary:
"Want to mark any senders as priority? Or dive into a specific email?"
Classification Logic
| Signal | Classification |
|---|---|
| Domain in priority-domains.json | Needs Attention |
| Mentions BlackBelt, AI Powerhouse, Little Blue Report | Needs Attention + mission flag |
| Subject has ?, "can you", "please review", "urgent" | Needs Attention |
| First-time sender | Worth Knowing + unusual flag |
| Receipt, calendar, shipping | Worth Knowing (grouped) |
| Newsletter, promo, marketing patterns | Filtered |
Mission Context Keywords
The skill watches for these (from Ed's mission-context):
- BlackBelt, Taki Moore
- AI Amplified, AI Powerhouse, Coaching Powerhouse
- Little Blue Report, Substack
- 30 Day Challenge
When detected, emails are flagged with the matching context.
Guidelines
- Read-only - Never send, delete, or modify emails
- Privacy first - Show subjects and snippets, not full content
- Learn over time - Priority domains persist between sessions
- Flag the unusual - First-time senders get highlighted
- Summarize noise - Don't list every newsletter, just count them
Error Handling
If the script fails:
- Check credential issues (token expired, wrong password)
- For Gmail OAuth: Browser will open to re-authenticate
- For iCloud: Verify ICLOUD_APP_PASSWORD is set in environment
File Locations
| File | Purpose |
|---|---|
scripts/fetch_inbox_summary.py |
Main fetch + triage script |
scripts/classify_emails.py |
Classification logic |
config/priority-domains.json |
Learned priority senders |
tests/test_classification.py |
Automated tests |
Examples
User: "check my email"
Response:
## Inbox Triage (Last 24 Hours)
**Gmail:** 18 emails | **iCloud:** 4 emails
### Needs Attention
- **taki@blackbelt.com** - Quick question about the workshop
Mission-context: BlackBelt
- **prospect@business.com** - Can you send me the pricing?
Looks like it needs a reply
### Worth Knowing
- **stripe.com** (3) - Payment receipts
- **google.com** (2) - Calendar notifications
- **unknown@newstartup.io** - Partnership inquiry
*Unusual: First time seeing this sender*
### Filtered (13 emails)
- Newsletters: 8
- Promotions: 3
- Automated: 2
---
*2 priority senders configured. Say "mark [domain] as priority" to add more.*
User: "mark newstartup.io as priority"
Response:
Added newstartup.io to priority senders. Future emails from this domain will appear in Needs Attention.
Current priority senders: blackbelt.com, newstartup.io
User: "show me emails from blackbelt.com"
Response:
## Emails from blackbelt.com (Last 24 Hours)
**Gmail:** 3 emails | **iCloud:** 0 emails
### All Emails
- **taki@blackbelt.com** - Quick question about the workshop
Mission-context: BlackBelt
- **support@blackbelt.com** - Your invoice for January
- **team@blackbelt.com** - Weekly team update
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-01-20
- Index updated
- 2026-01-26
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!