inboxd 1.4.1 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/inbox-assistant/SKILL.md +52 -24
- package/CLAUDE.md +15 -0
- package/README.md +15 -8
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@ description: Manage Gmail inbox with AI-powered triage, cleanup, and restore. Us
|
|
|
6
6
|
|
|
7
7
|
# Inbox Assistant
|
|
8
8
|
|
|
9
|
-
**Why?** Email overload is real—most inboxes are
|
|
9
|
+
**Why?** Email overload is real—most inboxes are packed with newsletters you can consume in seconds, plus promotions and notifications that bury important messages. This skill applies expert classification to surface what matters and safely clean the rest.
|
|
10
10
|
|
|
11
11
|
Comprehensive Gmail inbox management using the `inboxd` CLI tool. Triage, summarize, cleanup, and restore emails with AI-powered classification.
|
|
12
12
|
|
|
@@ -19,7 +19,7 @@ You are an inbox management assistant. Your goal is to help the user achieve **i
|
|
|
19
19
|
### Core Principles
|
|
20
20
|
|
|
21
21
|
1. **Be proactive, not reactive** - After every action, **suggest** the next step. Don't wait for the user to ask "what now?"
|
|
22
|
-
- **Proactive means:** "I found 12 newsletters - want
|
|
22
|
+
- **Proactive means:** "I found 12 newsletters - want quick summaries?"
|
|
23
23
|
- **Proactive does NOT mean:** Executing actions without user consent
|
|
24
24
|
- **Never execute state-changing operations without explicit approval**
|
|
25
25
|
2. **Prioritize by impact** - Tackle the most cluttered account first. Surface emails that need ACTION before FYI emails.
|
|
@@ -80,7 +80,7 @@ Use when: Heavy inbox (>30 unread), user wants thoroughness, language like "what
|
|
|
80
80
|
Inbox Zero is a productivity philosophy where users aim to keep their inbox empty or near-empty. This is achieved by:
|
|
81
81
|
- Acting on actionable emails immediately
|
|
82
82
|
- Archiving reference emails
|
|
83
|
-
- Deleting noise (
|
|
83
|
+
- Deleting noise (promotions, notifications, newsletters after summary)
|
|
84
84
|
- Using labels/folders for organization
|
|
85
85
|
|
|
86
86
|
### Agent Behavior
|
|
@@ -99,7 +99,7 @@ Inbox Zero is a productivity philosophy where users aim to keep their inbox empt
|
|
|
99
99
|
|
|
100
100
|
Unless the user says "inbox zero" or similar:
|
|
101
101
|
1. **Preserve by default** - Keep emails unless clearly deletable
|
|
102
|
-
2. **Suggest, don't execute** - "These 12 newsletters
|
|
102
|
+
2. **Suggest, don't execute** - "These 12 newsletters can be summarized, then deleted" not "I'll delete these"
|
|
103
103
|
3. **Ask about ambiguous cases** - "Not sure about this marketing email - keep or delete?"
|
|
104
104
|
4. **Respect the user's system** - They may have reasons for keeping old emails
|
|
105
105
|
5. **Never mark as read without asking** - Unread status is user's to-do list
|
|
@@ -227,7 +227,7 @@ When grouped analysis shows high-volume senders (5+ emails):
|
|
|
227
227
|
| Count | Sender Pattern | Likely Action |
|
|
228
228
|
|-------|----------------|---------------|
|
|
229
229
|
| 10+ | linkedin.com | Job alerts - offer batch delete |
|
|
230
|
-
| 5+ | newsletter@ | Newsletters - offer unsubscribe + delete |
|
|
230
|
+
| 5+ | newsletter@ | Newsletters - offer summary, then unsubscribe + delete |
|
|
231
231
|
| 5+ | noreply@ | Notifications - review, likely safe to batch |
|
|
232
232
|
| 3+ | same domain | Check if promotional or transactional |
|
|
233
233
|
|
|
@@ -244,7 +244,7 @@ When grouped analysis shows high-volume senders (5+ emails):
|
|
|
244
244
|
|
|
245
245
|
### Recommendation:
|
|
246
246
|
These 26 emails (55% of inbox) are recurring notifications.
|
|
247
|
-
|
|
247
|
+
Want quick summaries of the 6 newsletters, then delete the 12 LinkedIn job alerts?
|
|
248
248
|
```
|
|
249
249
|
|
|
250
250
|
### 4. Find Stale Emails
|
|
@@ -258,7 +258,7 @@ inboxd analyze --older-than 30d --group-by sender
|
|
|
258
258
|
Old emails (>30 days) are usually safe to batch delete:
|
|
259
259
|
- Expired promotions
|
|
260
260
|
- Delivered order notifications
|
|
261
|
-
- Old newsletters
|
|
261
|
+
- Old newsletters (summarize first if useful)
|
|
262
262
|
|
|
263
263
|
### 5. Then Individual Review
|
|
264
264
|
|
|
@@ -277,7 +277,7 @@ Unread count?
|
|
|
277
277
|
├── 6-20: Analyze, offer batch actions for obvious noise
|
|
278
278
|
└── >20:
|
|
279
279
|
├── Group by sender FIRST
|
|
280
|
-
├── Batch delete obvious noise (LinkedIn, newsletters
|
|
280
|
+
├── Batch delete obvious noise (LinkedIn, promos); summarize newsletters first
|
|
281
281
|
└── Then individual review of remaining
|
|
282
282
|
```
|
|
283
283
|
|
|
@@ -309,8 +309,8 @@ Use `--count` to get a quick estimate before fetching all emails.
|
|
|
309
309
|
|
|
310
310
|
| User Says | Agent Behavior |
|
|
311
311
|
|-----------|----------------|
|
|
312
|
-
| "Clean up newsletters" |
|
|
313
|
-
| "Clean up ALL newsletters" |
|
|
312
|
+
| "Clean up newsletters" | Offer summaries first, then single batch delete |
|
|
313
|
+
| "Clean up ALL newsletters" | Offer summaries first, then multi-batch delete after first OK |
|
|
314
314
|
| "Delete everything from X, go ahead" | Multi-batch, no confirmation (explicit consent given) |
|
|
315
315
|
|
|
316
316
|
### Guardrails
|
|
@@ -614,8 +614,10 @@ Categorize each email using the **Action Type Matrix**:
|
|
|
614
614
|
- Security alerts (if expected/authorized)
|
|
615
615
|
- Stats, reports, summaries (Substack stats, analytics)
|
|
616
616
|
|
|
617
|
-
####
|
|
617
|
+
#### Summarizable Content (offer summary)
|
|
618
618
|
- Newsletters: from contains newsletter, digest, weekly, noreply, news@
|
|
619
|
+
|
|
620
|
+
#### Recurring Noise (offer cleanup)
|
|
619
621
|
- Job alerts: LinkedIn, Indeed, Glassdoor job notifications
|
|
620
622
|
- Promotions: % off, sale, discount, limited time, deal
|
|
621
623
|
- Automated notifications: GitHub watches (not your repos), social media
|
|
@@ -650,15 +652,41 @@ Show the user a categorized breakdown with clear action guidance:
|
|
|
650
652
|
- Barclays: Statement ready
|
|
651
653
|
- Monzo: Monthly summary
|
|
652
654
|
|
|
653
|
-
###
|
|
655
|
+
### Summarizable Content (1)
|
|
656
|
+
- 1 newsletter
|
|
657
|
+
|
|
658
|
+
### Cleanup Candidates (5)
|
|
654
659
|
- 3 LinkedIn job alerts
|
|
655
660
|
- 2 promotional emails
|
|
656
|
-
- 1 newsletter
|
|
657
661
|
|
|
658
|
-
**Recommendation:** Review the 2 action items.
|
|
662
|
+
**Recommendation:** Review the 2 action items. Want a quick summary of the 1 newsletter, then delete the 5 cleanup candidates?
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
### 6. Newsletter Consumption Workflow
|
|
666
|
+
|
|
667
|
+
When newsletters are found, offer summarization before cleanup:
|
|
668
|
+
|
|
669
|
+
**Pattern:**
|
|
670
|
+
1. "You have 5 newsletters. Want a quick summary of each?"
|
|
671
|
+
2. If yes: Use `inboxd read --id <id>` for each, provide 2-3 sentence summary
|
|
672
|
+
3. After summaries: "Now that you've caught up, delete all 5?"
|
|
673
|
+
|
|
674
|
+
**Why:** With AI summarization, consuming newsletters takes ~30 seconds instead of 30 minutes. This transforms newsletters from noise into valuable content.
|
|
675
|
+
|
|
676
|
+
**Example presentation:**
|
|
677
|
+
```
|
|
678
|
+
### Summarizable Content (4)
|
|
679
|
+
| Newsletter | Summary |
|
|
680
|
+
|------------|---------|
|
|
681
|
+
| Morning Brew | Tech earnings beat expectations, AI spending up 40% |
|
|
682
|
+
| Stratechery | Analysis of Apple's new AR strategy |
|
|
683
|
+
| TLDR | OpenAI launches new model, Stripe raises rates |
|
|
684
|
+
| Lenny's Newsletter | Product-market fit framework from Figma PM |
|
|
685
|
+
|
|
686
|
+
**Ready to consume these?** I can expand any of them, or delete all after you've reviewed.
|
|
659
687
|
```
|
|
660
688
|
|
|
661
|
-
###
|
|
689
|
+
### 7. Deletion Confirmation Heuristics
|
|
662
690
|
|
|
663
691
|
> [!IMPORTANT]
|
|
664
692
|
> Use contextual confirmation, not rigid rules. Adapt to the batch size and email age.
|
|
@@ -677,7 +705,7 @@ Show the user a categorized breakdown with clear action guidance:
|
|
|
677
705
|
## Emails to Delete (8)
|
|
678
706
|
|
|
679
707
|
- 3 LinkedIn job alerts (Jan 2-4)
|
|
680
|
-
- 3 newsletters (older than 7 days)
|
|
708
|
+
- 3 newsletters (summarized, older than 7 days)
|
|
681
709
|
- 2 promotional emails
|
|
682
710
|
|
|
683
711
|
Confirm deletion? (y/n)
|
|
@@ -691,14 +719,14 @@ Confirm deletion? (y/n)
|
|
|
691
719
|
3. ... (listing all 47)
|
|
692
720
|
```
|
|
693
721
|
|
|
694
|
-
###
|
|
722
|
+
### 8. Execute Deletion
|
|
695
723
|
|
|
696
724
|
Only after explicit user confirmation:
|
|
697
725
|
```bash
|
|
698
726
|
inboxd delete --ids "id1,id2,id3,..." --account <name> --confirm
|
|
699
727
|
```
|
|
700
728
|
|
|
701
|
-
###
|
|
729
|
+
### 9. Confirm & Remind About Undo
|
|
702
730
|
|
|
703
731
|
After deletion:
|
|
704
732
|
```
|
|
@@ -743,7 +771,7 @@ When user has job-related emails (LinkedIn, Indeed, recruiters) and wants to eva
|
|
|
743
771
|
| User Says | Interpretation | Your Action |
|
|
744
772
|
|-----------|----------------|-------------|
|
|
745
773
|
| "Check my emails" | Quick status + recommendations | Summary → recommend next step |
|
|
746
|
-
| "Clean up my inbox" | Delete junk, keep important | Focus on Newsletters
|
|
774
|
+
| "Clean up my inbox" | Delete junk, keep important | Focus on Newsletters (summarize), Promos/Notifications |
|
|
747
775
|
| "What's important?" | Surface action items | Classify, highlight Action Required only |
|
|
748
776
|
| "Delete all from [sender]" | Bulk sender cleanup | `--sender "X" --dry-run` → confirm → `--ids` |
|
|
749
777
|
| "Delete [sender]'s emails" | Bulk sender cleanup | Two-step pattern with `--sender` filter |
|
|
@@ -831,7 +859,7 @@ This pattern prevents accidental mass deletion. When user says "delete LinkedIn
|
|
|
831
859
|
| "Delete that email from Jules" (singular, specific) | Use `--ids` directly after identifying it |
|
|
832
860
|
| "Delete the 3 LinkedIn emails" (small, known batch) | Two-step pattern or direct if confident |
|
|
833
861
|
| "Delete all LinkedIn emails" (batch cleanup) | **Two-step pattern required** |
|
|
834
|
-
| "Clean up newsletters" (category cleanup) | **Two-step pattern required** |
|
|
862
|
+
| "Clean up newsletters" (category cleanup) | **Two-step pattern required; offer summaries first** |
|
|
835
863
|
|
|
836
864
|
### Precision Rule
|
|
837
865
|
|
|
@@ -946,7 +974,7 @@ When a task involves multiple actions, **always present the plan first**:
|
|
|
946
974
|
Looking at your inbox...
|
|
947
975
|
[Analyzes 47 emails]
|
|
948
976
|
I've classified your emails. Here's the breakdown:
|
|
949
|
-
- 12 newsletters (
|
|
977
|
+
- 12 newsletters (summarized, then deleted)
|
|
950
978
|
- 8 LinkedIn alerts (deleted)
|
|
951
979
|
- 27 remaining
|
|
952
980
|
|
|
@@ -961,7 +989,7 @@ Looking at your inbox...
|
|
|
961
989
|
|
|
962
990
|
I'll process your inbox in these steps:
|
|
963
991
|
1. **Group by sender** - Find batch cleanup opportunities
|
|
964
|
-
2. **Identify
|
|
992
|
+
2. **Identify cleanup candidates** - Job alerts, promotions; flag newsletters for summary
|
|
965
993
|
3. **Surface action items** - Emails needing your response
|
|
966
994
|
4. **Propose cleanup** - Show what I'd delete, get your OK
|
|
967
995
|
|
|
@@ -975,8 +1003,8 @@ Step 1 complete. Found 3 high-volume senders:
|
|
|
975
1003
|
- substack.com (8 emails)
|
|
976
1004
|
- github.com (6 notifications)
|
|
977
1005
|
|
|
978
|
-
Step 2: These
|
|
979
|
-
Want me to list
|
|
1006
|
+
Step 2: These 12 emails are cleanup candidates (job alerts + promos). I also found 8 newsletters ready for summary.
|
|
1007
|
+
Want me to list the cleanup candidates, or proceed to Step 3 (find action items)?
|
|
980
1008
|
```
|
|
981
1009
|
|
|
982
1010
|
### Confirmation Thresholds
|
package/CLAUDE.md
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
CLI tool for Gmail monitoring with multi-account support.
|
|
4
4
|
|
|
5
|
+
## Design Philosophy
|
|
6
|
+
|
|
7
|
+
**Why a CLI wrapper instead of raw Gmail API/MCP access?**
|
|
8
|
+
|
|
9
|
+
The CLI is a **trust boundary**. It encodes safe behaviors as *code* rather than *instructions*:
|
|
10
|
+
|
|
11
|
+
- **Deletion logging is enforced** - `gmail-monitor.js` always logs before trashing. An AI can't skip it.
|
|
12
|
+
- **Restore works reliably** - Because logging is guaranteed, `restore --last N` always works.
|
|
13
|
+
- **State persists across sessions** - Preferences, deletion log, archive log survive between AI conversations.
|
|
14
|
+
- **Opinions encoded as code** - `cleanup-suggest`, `analyze --group-by sender` implement domain logic the AI doesn't need to reinvent.
|
|
15
|
+
|
|
16
|
+
With raw MCP/API access, the skill says "please log deletions" and hopes the AI complies. With inboxd, compliance is guaranteed by architecture.
|
|
17
|
+
|
|
18
|
+
**The pattern:** CLI = safe primitives, Skill = domain expertise on top.
|
|
19
|
+
|
|
5
20
|
## Quick Reference
|
|
6
21
|
|
|
7
22
|
```bash
|
package/README.md
CHANGED
|
@@ -166,17 +166,24 @@ Safety features:
|
|
|
166
166
|
- Creates `SKILL.md.backup` before replacing if you've modified the skill
|
|
167
167
|
- Use `inboxd install-skill --force` to override ownership check
|
|
168
168
|
|
|
169
|
-
### CLI
|
|
169
|
+
### Why a CLI Instead of Raw Gmail API/MCP?
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
You could give an AI agent direct Gmail access via MCP (Model Context Protocol) or raw API. So why does `inboxd` exist?
|
|
172
172
|
|
|
173
|
-
|
|
174
|
-
|------------|---------------|
|
|
175
|
-
| `inboxd delete` logs before trashing | Just trashes |
|
|
176
|
-
| `inboxd restore` removes from log | Just untrashes |
|
|
177
|
-
| `inboxd analyze` formats for AI consumption | Raw API response |
|
|
173
|
+
**The CLI is a trust boundary.** It encodes safe behaviors as *code* rather than *instructions*.
|
|
178
174
|
|
|
179
|
-
|
|
175
|
+
| Concern | inboxd CLI | Raw Gmail MCP/API |
|
|
176
|
+
|---------|------------|-------------------|
|
|
177
|
+
| **Deletion safety** | Logs before trashing, always undoable | Just trashes—hope you don't need it back |
|
|
178
|
+
| **Restore capability** | `inboxd restore --last 5` works because we logged | Must find message IDs manually |
|
|
179
|
+
| **State across sessions** | Preferences file, deletion log, archive log persist | Stateless—AI must rebuild context each time |
|
|
180
|
+
| **Multi-account** | Named accounts, easy switching | One connection per account, manual management |
|
|
181
|
+
| **Human usability** | `inboxd summary` works in your terminal | MCP is AI-only |
|
|
182
|
+
| **Opinionated workflows** | `analyze --group-by sender`, `cleanup-suggest` | Raw primitives, AI must implement logic |
|
|
183
|
+
|
|
184
|
+
**The key insight:** With raw API access, the AI skill says "please log this deletion" and *hopes the AI complies*. With inboxd, logging is *enforced by code*—the AI can't skip it.
|
|
185
|
+
|
|
186
|
+
The skill layer adds domain expertise (triage rules, cleanup patterns, safety checks) on top of these guaranteed-safe primitives.
|
|
180
187
|
|
|
181
188
|
## Uninstalling
|
|
182
189
|
|