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.
@@ -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 cluttered with newsletters, promotions, and notifications that bury important messages. This skill applies expert classification to surface what matters and safely clean the rest.
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 me to delete them?"
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 (newsletters, promotions, notifications)
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 could be deleted" not "I'll delete these"
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
- Delete all LinkedIn job alerts and old newsletters?
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, promos)
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" | Single batch, ask before each |
313
- | "Clean up ALL newsletters" | Multi-batch, ask after first batch, then auto-continue |
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
- #### Recurring Noise (offer cleanup)
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
- ### Cleanup Candidates (6)
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. Delete the 6 cleanup candidates?
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
- ### 6. Deletion Confirmation Heuristics
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
- ### 7. Execute Deletion
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
- ### 8. Confirm & Remind About Undo
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/Promos/Notifications |
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 (marked as read)
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 deletables** - Newsletters, job alerts, promotions
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 20 emails are cleanup candidates (newsletters + job alerts).
979
- Want me to list them, or proceed to Step 3 (find action items)?
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 vs MCP
169
+ ### Why a CLI Instead of Raw Gmail API/MCP?
170
170
 
171
- Unlike an MCP server that exposes raw Gmail API primitives, `inboxd` provides **opinionated commands** with built-in safety:
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
- | inboxd CLI | Raw Gmail MCP |
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
- The skill layer adds expert workflow guidance on top of these commands.
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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inboxd",
3
- "version": "1.4.1",
3
+ "version": "1.4.2",
4
4
  "description": "CLI assistant for Gmail monitoring with multi-account support and AI-ready JSON output",
5
5
  "main": "src/cli.js",
6
6
  "bin": {