mcpField
E
email-triage

email-triage

github.com/terrylicaProductivity1115 installsUpdated 1d ago
Repository

About email-triage

email-triage is a Gmail Commander skill for classifying recent email by category and urgency. It documents the on-demand `/digest` pipeline and distinguishes it from the separate scheduled digest service.

Key features

  1. 01Groups mail into three categories
  2. 02Ranks urgency from critical to low
  3. 03Fetches recent email through Gmail CLI
  4. 04Filters contaminated model responses
  5. 05Formats results as a digest

Use cases

  1. 01Reviewing important email from recent hours
  2. 02Separating security alerts from work mail
  3. 03Requesting an on-demand digest in Telegram

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/terrylica/cc-skills --skill email-triage

After installing, type/email-triagein Claude Code to confirm it loaded.

Bundled filesreferences/evolution-log.md

Details

From the project README

Email Triage

How Gmail Commander sorts recent email into what needs attention, and where each digest actually comes from.

Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.

Two different digests — do not confuse them

DigestTriggerCode
On-demand /digest [hours]A user sends it to the bot (default 6 h)This plugin: scripts/lib/commands.ts + scripts/lib/triage.ts
Scheduled digestSeveral times a day, unattendedThe private deployment's GmailDigest service — its own implementation

The scheduled digest runs in a private Restate tenant on an always-on Mac mini and does not import this plugin's triage code. Its schedule, prompt, alerting and failures are operated through that deployment's own repository runbook.

This plugin no longer ships a scheduled digest entry point: the laptop launchd job com.example.gmail-commander-digest was retired on 2026-09-24, and its scripts/digest.ts (with the Kokoro podcast-style voice briefing in scripts/lib/tts-client.ts) was removed on 2026-09-26 once nothing imported it. Do not recreate either.

Mandatory Preflight

Step 1: Check the triage code exists
PLUGIN="$HOME/.claude/plugins/marketplaces/cc-skills/plugins/gmail-commander"
ls -la "$PLUGIN/scripts/lib/triage.ts" 2>/dev/null || echo "TRIAGE_NOT_FOUND"
Step 2: Verify the Gmail CLI binary (the triage input comes from it)
ls -la "$HOME/.claude/plugins/marketplaces/cc-skills/plugins/gmail-commander/scripts/gmail-cli/gmail" 2>/dev/null || echo "BINARY_NOT_FOUND"

If BINARY_NOT_FOUND: Build it from the committed lockfile:

cd "$HOME/.claude/plugins/marketplaces/cc-skills/plugins/gmail-commander/scripts/gmail-cli" && bun install --frozen-lockfile && bun run build

Three-Category Triage System

CategoryExamples
SYSTEM & SECURITYExchange alerts, 2FA codes, password resets, new device logins
WORKDeadlines, invoices, contracts, GitHub PRs, professional requests
PERSONAL & FAMILYFriends/family messages, appointments, vehicle service, health

Urgency levels within each: CRITICAL > HIGH > MEDIUM > LOW. When nothing qualifies, the model answers exactly NO_SIGNIFICANT_EMAILS and the bot reports a quiet window.

Pipeline (/digest [hours])

  1. fetchRecentEmails(hours) runs gmail search newer_than:<hours>h -n 50 --json through GMAIL_CLI_BIN.
  2. formatEmailsForTriage() renders the messages; ANTI_SKILL_PREFIX is prepended so the model ignores any skill or tool listings in its context.
  3. One Agent SDK call with TRIAGE_SYSTEM_PROMPT on HAIKU_MODEL (no tools, one turn).
  4. isSkillContaminated() discards a response that role-plays a skill instead of triaging.
  5. parseTriageResponse() turns the text into typed items, and formatDigestHtml() renders them with the category and urgency emoji maps.

Source Map

ConcernFile
System prompt, anti-skill prefix, parserscripts/lib/triage.ts
/digest command handlerscripts/lib/commands.ts
Category/urgency emoji maps, digest HTMLscripts/lib/telegram-format.ts
Gmail fetchscripts/lib/gmail-client.ts

Post-Change Checklist

  • YAML frontmatter valid (no colons in description)
  • Trigger keywords current
  • Path patterns use $HOME not hardcoded paths
  • lib/triage.ts exports unchanged in shape (the bot and its deployment import them)

Post-Execution Reflection

After this skill completes, reflect before closing the task:

  1. Locate yourself. — Find this SKILL.md's canonical path before editing.
  2. What failed? — Fix the instruction that caused it.
  3. What worked better than expected? — Promote to recommended practice.
  4. What drifted? — Fix any script, reference, or dependency that no longer matches reality.
  5. Log it. — Evolution-log entry with trigger, fix, and evidence.

Do NOT defer. The next invocation inherits whatever you leave behind.

Comments

Markdown supported