claude-skills/productivity/email
Claude 7405298b4b
fix: resolve the actionable reported issues (#954, #949, #933, #931, #969, #968, #924, #885)
- #954: strip non-spec source/attribution keys from all 39 plugin.json
  manifests so Claude Code's validator accepts them; metadata preserved in
  new .claude-plugin/authoring-notes.json sidecars; check_plugin_json.py now
  hard-fails manifests carrying those keys and sanity-checks the sidecar;
  CLAUDE.md ClawHub schema section updated to the new rule.
- #949: move the c-level-agents plugin out of c-level-advisor/ to a
  top-level directory so the two marketplace sources no longer overlap;
  updated marketplace.json source, homepage, descriptions, all
  cross-references, docs, harness manifest, mirror-tree symlinks/indexes,
  and rebased the moved files' relative links; domain counters trued up
  (18 -> 19 domains).
- #933: replace dead links to the gitignored maintainer-local megaprompts/
  tree with annotated plain-text references (44 files: SKILL.md, READMEs,
  agents, commands).
- #931: DynamoDB on-demand pricing updated to post-Nov-2024 rates
  ($0.625/M writes, $0.125/M strongly consistent reads).
- #969: skill_security_auditor.py and the three dossier scripts reconfigure
  stdout/stderr to UTF-8 (errors=replace) so legacy Windows codepages no
  longer crash at print time; PYTHONUTF8=1 documented.
- #968: Windows Notes section in INSTALLATION.md + README pointer for the
  core.symlinks mirror-tree checkout caveat.
- #924/#885 residuals: hook commands quote "${CLAUDE_PLUGIN_ROOT}" paths in
  all plugin hooks.json/settings.json (space-safe roots); removed the stale
  pre-rename status/review mirror symlinks and index entries left over from
  the memory-status/memory-review rename.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qgc6RYXWJPr5oW9DHU7zR4
2026-08-21 05:47:37 +00:00
..
.claude-plugin fix: resolve the actionable reported issues (#954, #949, #933, #931, #969, #968, #924, #885) 2026-08-21 05:47:37 +00:00
agents fix: resolve the actionable reported issues (#954, #949, #933, #931, #969, #968, #924, #885) 2026-08-21 05:47:37 +00:00
commands fix: resolve the actionable reported issues (#954, #949, #933, #931, #969, #968, #924, #885) 2026-08-21 05:47:37 +00:00
skills fix: resolve the actionable reported issues (#954, #949, #933, #931, #969, #968, #924, #885) 2026-08-21 05:47:37 +00:00
README.md fix: resolve the actionable reported issues (#954, #949, #933, #931, #969, #968, #924, #885) 2026-08-21 05:47:37 +00:00

email

Workflow-pair plugin. Two paired skills (inbox-setup + inbox-triage) that together implement a personalized recurring email triage system.

The pair shares a strict 7-file knowledge-base contract at ${WORKSPACE}/Email/. inbox-setup writes; inbox-triage reads + appends. PR #657's cross-skill consistency audit verified the file contract aligns verbatim between the two megaprompts.

How the pair works

┌──────────────────────┐         ┌──────────────────────────────┐
│   /cs:inbox-setup    │   ───►  │  ${WORKSPACE}/Email/          │
│                      │  writes │  ├── email-taxonomy.md         │
│  Interactive         │         │  ├── email-patterns.md         │
│  interview (~25-31   │         │  ├── evaluation-framework.md*  │
│  grill-me questions  │         │  ├── rate-card.md*             │
│  across 8 sections). │         │  ├── blocklist.md              │
│  Run ONCE.           │         │  ├── tracker.md                │
│                      │         │  └── triage-log/               │
└──────────────────────┘         └──────────────────────────────┘
                                          │
                                          │ reads + appends
                                          ▼
                                 ┌──────────────────────────────┐
                                 │   /cs:inbox-triage           │
                                 │                              │
                                 │   Recurring (1-3x/day) or    │
                                 │   on-demand. Classifies      │
                                 │   recent emails, drafts      │
                                 │   replies (NEVER SENDS),     │
                                 │   delivers report, updates   │
                                 │   blocklist + tracker.       │
                                 └──────────────────────────────┘

  * Conditional — created only if user has opportunities/pricing

What each skill does

inbox-setup (run once)

Interactive interview using grill-me discipline — one question at a time, dependency-ordered, forcing format where possible, "why I'm asking" on every question. Walks 8 sections (~25-31 questions, hard ceiling 35):

  1. The Big Picture — role, dominant categories, volume split, cadence (6 Q)
  2. Email Categories — propose taxonomy, confirm, refine (3 Q)
  3. Reply Style & Voice — register, pet peeves, signatures, persona, length, hard rules + 3-5 real sent-email samples for voice extraction (7 Q)
  4. Evaluation Framework (conditional) — gut filter, deal-breakers, attractors, pricing, negotiation, VIP list (6 Q) — skipped if no opportunities
  5. Blocklist & Patterns — auto-skip senders, patterns, time-wasters (3 Q)
  6. Current State — active threads, overdue replies, deadlines (3 Q)
  7. Report Preferences — delivery format, detail level, top-of-report priorities (3 Q)
  8. Confirmation & Handoff — file inventory + handoff to triage

Generates the 7-file KB. Re-runnable; existing files surface a per-file replace/merge/skip prompt.

inbox-triage (run recurringly)

Light-intake by design — most invocations skip questions and run with KB-default preferences. At most 2 grill-me override questions:

  • Q1 (optional) — override default search window (asked only for on-demand runs outside normal cadence)
  • Q2 (optional) — skip categories this run (asked only when user invokes with skip intent)

Then 10 execution steps: search window → search email → classify → research new senders → generate recommendations → draft replies (NEVER SENDS) → deliver report → update KB → log internally → handle empty inbox.

The 7-file shared contract

The contract is the integration boundary between the two skills. Any drift breaks the pair. See skills/*/references/kb_file_contract.md for the canonical spec (mirrored on both sides with write-perspective + read-perspective text).

File Setup writes Triage reads Triage updates
email-taxonomy.md
email-patterns.md
evaluation-framework.md (conditional) ✓ if exists
rate-card.md (conditional) ✓ if exists
blocklist.md seeded ✓ (appends new declines + patterns)
tracker.md seeded ✓ (appends + resolves follow-ups)
triage-log/ empty dir ✓ (writes per-run log)

Source specs

  • megaprompts/06-inbox-setup-megaprompt.md (maintainer-local draft spec — gitignored, not in the public repo) (PR #657)
  • megaprompts/07-inbox-triage-megaprompt.md (maintainer-local draft spec — gitignored, not in the public repo) (PR #657)

The megaprompts are canonical; these plugins are working implementations. Drift between any megaprompt and its skill is a bug — re-grill with /cs:grill-with-docs if they diverge.

Plugin layout

engineering/email/
├── .claude-plugin/plugin.json     ← multi-skill: ["./skills/inbox-setup", "./skills/inbox-triage"]
├── README.md
├── agents/
│   ├── cs-inbox-setup.md           ← interview persona, 8-section grill enforcer
│   └── cs-inbox-triage.md          ← recurring-run persona, DRAFTS-ONLY enforcer
├── commands/
│   ├── cs-inbox-setup.md           ← /cs:inbox-setup
│   └── cs-inbox-triage.md          ← /cs:inbox-triage
└── skills/
    ├── inbox-setup/
    │   ├── SKILL.md                ← Path-B converted from megaprompt 06
    │   ├── references/
    │   │   ├── kb_file_contract.md          ← shared contract (write side)
    │   │   ├── grill_me_section_walk.md     ← 8-section discipline
    │   │   └── voice_calibration.md         ← sample-based voice extraction
    │   └── scripts/
    │       ├── kb_validator.py              ← stdlib: validates 7-file output
    │       ├── section_progress_tracker.py  ← stdlib: 8-section walk state
    │       └── voice_sample_analyzer.py     ← stdlib: extracts patterns from samples
    └── inbox-triage/
        ├── SKILL.md                ← Path-B converted from megaprompt 07
        ├── references/
        │   ├── kb_file_contract.md          ← same contract (read side, mirrored)
        │   ├── triage_decision_framework.md ← TAKE-IT / WORTH / PASS / FLAG taxonomy
        │   └── drafts_only_safety.md        ← the NEVER-SEND discipline canon
        └── scripts/
            ├── kb_reader.py                ← stdlib: reads + validates 7 files
            ├── search_window_calculator.py ← stdlib: cadence + now → window
            └── draft_safety_validator.py   ← stdlib: enforces never-send check

Quick start

# 1. Run inbox-setup ONCE (interactive interview):
#    Use /cs:inbox-setup or trigger phrases like "set up my inbox"

# 2. After setup, run inbox-triage on cadence (e.g., 2x/day):
#    Use /cs:inbox-triage or trigger phrases like "triage my inbox"

# Validate the KB contract at any time:
python skills/inbox-setup/scripts/kb_validator.py --workspace ${WORKSPACE}

# Compute the search window for an on-demand run:
python skills/inbox-triage/scripts/search_window_calculator.py --cadence 2x-daily --now 2026-05-15T14:00

License

MIT.