adversarial-review
Review existing work with independent fresh reviewers and fresh synthesis. Use for an adversarial review, review-plan request, or…
Compile a digest of announcement emails from a configured source. Use for recurring school, employer or organization email summaries.
Claude Code
$ npx -y skills add chrisblattman/claudeblattman --skill announcement-digest --agent claude-code
Codex
$ npx skills add chrisblattman/claudeblattman --skill announcement-digest -a codex -y
Cursor
$ npx skills add chrisblattman/claudeblattman --skill announcement-digest -a cursor -y
Gemini CLI
$ npx skills add chrisblattman/claudeblattman --skill announcement-digest -a gemini-cli -y
GitHub Copilot
$ npx skills add chrisblattman/claudeblattman --skill announcement-digest -a github-copilot -y
OpenCode
$ npx skills add chrisblattman/claudeblattman --skill announcement-digest -a opencode -y
Windsurf
$ npx skills add chrisblattman/claudeblattman --skill announcement-digest -a windsurf -y
name: announcement-digest description: "Compile a digest of announcement emails from a configured source. Use for recurring school, employer or organization email summaries."
*v1.0 — Announcement email digest skill*
Compile a digest of high-volume announcement emails from a single source (school, employer, nonprofit, professional association). Extract what matters, skip the noise, send a summary.
State file tracks: `last_digest_date`, `digest_count`, `reported_message_ids`, `reported_message_ids_ttl_days` (default 30).
1. Read `digest-state.json`. 2. If `last_digest_date` is not null and fewer than 2 days have passed:
3. Store `digest_count` (needed for first-time intro check at Step 5).
1. Compute lookback date: `last_digest_date` if set, otherwise 14 days ago. 2. Search Gmail: `label:[YOUR_LABEL] after:[lookback_date in YYYY/MM/DD]`
3. Filter out any message IDs already in `reported_message_ids`. 4. If no new emails remain, exit with message.
1. For each new message, fetch full content via `get_gmail_message_content`.
2. Group messages by Gmail thread ID. Keep only the most recent non-you message per thread. 3. Accumulate total word count across all fetched message bodies. 4. **Prune `reported_message_ids`**: Remove IDs older than `reported_message_ids_ttl_days`.
Read your rules config for the full rule set. For each email (or thread), apply classification in this order:
Apply SKIP rules first. If any match, mark as `skip` and record `skip_reason`.
Determine which sub-category the email belongs to (e.g., which child's school, which department, which program).
Apply rules from config using this priority order: 1. **Sender pattern override:** Personal sender (not `noreply@`) → HIGH 2. **HIGH keyword match** in subject + first 200 chars → HIGH 3. **LLM extraction** for everything else:
> Extract from this email. Return as JSON. > (1) category: action_required / calendar_event / fyi / skip > (2) urgency: high / medium / low > (3) summary: 1-2 sentences of what you need to know > (4) deadline: specific date/time if any, else null > (5) deadline_quote: verbatim text from email stating the date/deadline — copy exact wording, do not paraphrase. null if no deadline. > (6) skip_reason: if skip, one phrase why
4. **HIGH keyword overrides LLM urgency** upward (never downward). 5. **SKIP keyword overrides to skip** unless LLM said `action_required`.
Create a private temp directory with `mktemp -d` and write full classified data to `digest-classified.json` inside that directory. This serves as:
Format as plain text. Structure:
[YOUR SOURCE] EMAIL DIGEST
[date range]
Compressed ~[W] words across [N] emails ([M] threads) into this digest.
──────────────────────────────
[CATEGORY 1]
▶ ACTION ITEMS
• [summary] — deadline: [date]
Source: "[deadline_quote]"
📅 UPCOMING
• [event/date]
ℹ️ FYI
• [1-line summary]
[CATEGORY 2]
▶ ACTION ITEMS
...
+ [N] lower-priority items not shown
──────────────────────────────**Rules:**
1. **Write state file FIRST** (before sending):
2. **Draft the digest** via your preferred method. Ask for explicit approval before sending. The public template must not auto-send.
3. **Do NOT mark source emails as read.** The digest is additive — it doesn't replace checking the source.
Log tool call count, duration, and volume for future optimization.
The classification rules are the hardest part. Don't try to write them upfront — calibrate from real data:
1. Pull 20 recent emails from your source 2. Rate each: action_required / calendar / fyi /
Claude Code for professionals who don't code — Skills, agents, and setup guides
Review existing work with independent fresh reviewers and fresh synthesis. Use for an adversarial review, review-plan request, or…
Ask the specific Claude, Codex, Gemini, or Grok agent the user names and automatically retrieve its response. Use for targeted…
Develop independent approaches to a task, decision, plan, or draft, then use a fresh worker to synthesize them. Use for an…
Close out current work by saving decisions, unresolved tasks, useful artifacts, a session log and a current-state handoff for the…
Check the installed starter kit, prerequisites, and next step without calling external models.
Discover and test optional Claude, Codex, Gemini through Antigravity, and Grok subscription connections. Help with missing CLI or…
Draws static SVG figures for lessons, READMEs and manuals in the AI Engineering from Scratch look: paper panel, blueprint accent,…
End-to-end workflow for creating complete JavaScript concept documentation, orchestrating all skills from research to final review
Test a learner on a single Claude Code tutorial lesson (01-10) with 10 questions, scoring answers and flagging weak spots. Use…