inboxd 1.5.1 → 1.5.3

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.
@@ -166,6 +166,18 @@ When the user gives explicit feedback (e.g., "always delete LinkedIn alerts"), s
166
166
  - When updating, **append to existing sections** (bullets), don't overwrite user content. Include brief context ("why") to help future decisions.
167
167
  - Never delete the file; it lives outside the skill install path and must survive updates.
168
168
 
169
+ ### Compound Preference Actions
170
+
171
+ When a preference specifies multiple actions (e.g., "mark as read AND archive"), execute ALL actions together in the same step:
172
+
173
+ | Preference Says | Agent Executes |
174
+ |-----------------|----------------|
175
+ | "Mark as read and archive" | `mark-read --ids` THEN `archive --ids --confirm` |
176
+ | "Summarize then delete" | Summarize content THEN `delete --ids --confirm` |
177
+ | "Archive after 7 days" | Check age THEN `archive --ids --confirm` |
178
+
179
+ **Critical**: Never split compound actions across separate user confirmations. If the preference says "X and Y", do both after a single approval.
180
+
169
181
  ### Smart Pattern Detection Window
170
182
  When suggesting new preferences from behavior:
171
183
  1) Only consider deletions from the last 14 days.
@@ -358,6 +370,8 @@ Delete this batch? (yes / no / yes to all)
358
370
  | Fetch all matches | `inboxd search -q "from:linkedin.com" --all --max 200` |
359
371
  | Extract links from email | `inboxd read --id <id> --links` |
360
372
  | Quick metadata lookup | `inboxd read --id <id> --metadata-only` |
373
+ | Send email | `inboxd send -t <email> -s <subject> -b <body> --confirm` |
374
+ | Reply to email | `inboxd reply --id <id> -b <body> --confirm` |
361
375
  | Delete by ID | `inboxd delete --ids "id1,id2" --confirm` |
362
376
  | Delete by sender | `inboxd delete --sender "linkedin" --dry-run` → confirm → delete |
363
377
  | Delete by subject | `inboxd delete --match "weekly digest" --dry-run` |
@@ -466,6 +480,10 @@ This will guide you through:
466
480
  | `inboxd delete --sender "X" --match "Y" --confirm` | Delete by combined filters (AND) |
467
481
  | `inboxd delete --sender "X" --limit 100 --confirm` | Override 50-email safety limit |
468
482
  | `inboxd delete --sender "ab" --force --confirm` | Override short-pattern warning |
483
+ | `inboxd send -t <email> -s <subject> -b <body> --confirm` | Send a new email |
484
+ | `inboxd send --to <email> --subject <subject> --body <body> --dry-run` | Preview email without sending |
485
+ | `inboxd reply --id <id> -b <body> --confirm` | Reply to an email |
486
+ | `inboxd reply --id <id> --body <body> --dry-run` | Preview reply without sending |
469
487
  | `inboxd restore --last N` | Restore last N deleted emails |
470
488
  | `inboxd restore --ids "id1,id2"` | Restore specific emails |
471
489
  | `inboxd mark-read --ids "id1,id2"` | Mark emails as read (remove UNREAD label) |
@@ -839,6 +857,41 @@ When user has job-related emails (LinkedIn, Indeed, recruiters) and wants to eva
839
857
 
840
858
  ---
841
859
 
860
+ ## Sending & Replying to Emails
861
+
862
+ > [!TIP]
863
+ > Use `send` and `reply` to forward unsubscribe links, respond to emails, or share information.
864
+
865
+ ### Send a New Email
866
+ ```bash
867
+ inboxd send -t recipient@example.com -s "Subject" -b "Body text" --confirm
868
+ ```
869
+
870
+ ### Reply to an Email
871
+ ```bash
872
+ inboxd reply --id <email-id> -b "Reply body" --confirm
873
+ ```
874
+
875
+ ### Safety Features
876
+ - **`--dry-run`**: Preview the email without sending
877
+ - **`--confirm`**: Skip interactive confirmation (required for automation)
878
+ - **Interactive mode**: Without flags, prompts "Send this email? (y/N)"
879
+ - **Audit logging**: All sent emails logged to `~/.config/inboxd/sent-log.json`
880
+
881
+ ### Common Use Cases
882
+
883
+ | Scenario | Command |
884
+ |----------|---------|
885
+ | Forward unsubscribe link to yourself | `inboxd send -t me@gmail.com -s "Unsubscribe link" -b "https://..." --confirm` |
886
+ | Reply to an email | `inboxd reply --id <id> -b "Thanks, got it!" --confirm` |
887
+ | Preview before sending | `inboxd send -t <email> -s <subj> -b <body> --dry-run` |
888
+
889
+ ### Account Selection
890
+ - With one account: Uses default
891
+ - With multiple accounts: Prompts for selection or use `--account <name>`
892
+
893
+ ---
894
+
842
895
  ## Safety Rules
843
896
 
844
897
  > [!CAUTION]
package/CLAUDE.md CHANGED
@@ -152,6 +152,13 @@ Safety features:
152
152
  - Creates `SKILL.md.backup` before replacing modified files
153
153
  - Use `--force` to override ownership check
154
154
 
155
+ **IMPORTANT:** Never modify the installed skill at `~/.claude/skills/` directly.
156
+ The update flow is:
157
+ 1. Modify source in `.claude/skills/inbox-assistant/SKILL.md`
158
+ 2. Create `gh release`
159
+ 3. `publish.yml` workflow publishes to npm
160
+ 4. User runs `inboxd install-skill` to update
161
+
155
162
  ### Architecture
156
163
 
157
164
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inboxd",
3
- "version": "1.5.1",
3
+ "version": "1.5.3",
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": {