--- name: "cs-inbox-triage" description: "/cs:inbox-triage — Recurring email triage execution. Reads 7-file KB built by /cs:inbox-setup. Classifies recent emails, drafts replies (NEVER SENDS), delivers report, updates KB. Run 1-3x/day or on demand. Halts with clear message if KB missing." --- # /cs:inbox-triage — Recurring Email Triage **Command:** `/cs:inbox-triage` The `cs-inbox-triage` persona processes your inbox using the knowledge base built by `/cs:inbox-setup`. Designed for recurring runs (1-3x/day) with light intake — most invocations skip questions and run with KB-default preferences. ## When to Run - **Recurring cadence** — 1-3 times daily, per your `email-taxonomy.md` run frequency - **On-demand** — outside cadence (after a long break, before a meeting, etc.) - **Pre-triage scan** — quick check of overdue tracker items only **Do NOT run if** the KB doesn't exist yet — the skill will halt and direct you to `/cs:inbox-setup` first. ## DRAFTS ONLY — Non-Negotiable > **This skill creates drafts. It NEVER sends.** This is the safety property that makes the skill safe to run automatically. The `draft_safety_validator.py` enforces it post-run. Any send-shaped tool call in the action log fails validation. If you want the skill to send for you: don't. Review the drafts in your email client and send them yourself. This is by design. ## Light Intake (Max 2 Optional Questions) Most runs skip both questions entirely. | Q | Asked when | Default if skipped | |---|---|---| | Q1 — Override default 9h window? | On-demand run outside normal cadence | use cadence default | | Q2 — Skip categories this run? | User invocation includes skip-intent ("skip newsletters") | run all categories | ## What Happens (10 Steps) After reading the KB: 1. **Determine search window** — cadence + now → window_start (default 9h for 2x/day; overlap prevents missed emails) 2. **Search email provider** — primary (inbox + sent after window_start) + secondary (starred unread) 3. **Classify** — apply taxonomy; skip lowest-priority threads (newsletters/automation) without reading 4. **Research new senders** — web search for opportunity senders not in tracker/blocklist 5. **Generate recommendations** — apply `evaluation-framework.md` if exists; categorize TAKE IT / WORTH CONSIDERING / PASS / FLAG FOR REVIEW 6. **Draft replies** — match voice from `email-patterns.md`. NEVER SEND. 7. **Deliver report** — honor `email-taxonomy.md` report preferences (email / file / chat) 8. **Update KB** — append new declines to `blocklist.md`; update `tracker.md` with new/resolved follow-ups 9. **Internal log** — write `triage-log/-.md` 10. **Empty inbox handling** — still produces minimal report; flags overdue tracker items ## Trigger Phrases (auto-invoke without /cs:) - "triage my inbox" - "inbox triage" - "check my email" - "run email triage" - "process my inbox" - "what's new in my email" - "handle my email" - "email triage" ## Workflow ```bash # 1. Pre-flight — read + validate KB (fail-fast if missing) python ../skills/inbox-triage/scripts/kb_reader.py --workspace ${WORKSPACE} # 2. Compute search window python ../skills/inbox-triage/scripts/search_window_calculator.py \ --cadence 2x-daily --now $(date -u +%Y-%m-%dT%H:%M) # 3. Execute Steps 2-10 (described in SKILL.md). For each step, log to: # ${WORKSPACE}/Email/triage-log/-