adversarial-review
Review existing work with independent fresh reviewers and fresh synthesis. Use for an adversarial review, review-plan request, or…
Summarize a meeting transcript, extract decisions and action items, and draft a follow-up email.
Claude Code
$ npx -y skills add chrisblattman/claudeblattman --skill post-meeting --agent claude-code
Codex
$ npx skills add chrisblattman/claudeblattman --skill post-meeting -a codex -y
Cursor
$ npx skills add chrisblattman/claudeblattman --skill post-meeting -a cursor -y
Gemini CLI
$ npx skills add chrisblattman/claudeblattman --skill post-meeting -a gemini-cli -y
GitHub Copilot
$ npx skills add chrisblattman/claudeblattman --skill post-meeting -a github-copilot -y
OpenCode
$ npx skills add chrisblattman/claudeblattman --skill post-meeting -a opencode -y
Windsurf
$ npx skills add chrisblattman/claudeblattman --skill post-meeting -a windsurf -y
name: post-meeting description: "Summarize a meeting transcript, extract decisions and action items, and draft a follow-up email."
<!-- post-meeting v1.7 | sanitized from private v1.7 -->
*v1.7 — Recipient rule changed: default sends to the full team minus low-frequency categories (e.g., `infrequent`, `stakeholders`). Decoupled recipient-list display from send confirmation. Per-project override via `meeting_summary_recipients` in `.claude/CLAUDE.md`. Adds explicit sender choice (you vs. an AI EA identity). Includes the v1.4 hollow-transcript guard.*
Summarize a meeting transcript and draft a follow-up email to attendees. Run from a project directory after a meeting.
**Required:**
**Recommended:**
**Optional:**
1. **Create a project config** at `[project-root]/.claude/CLAUDE.md` with at minimum:
# Project Name ## Team - [Name] <email@example.com> — PI - [Name] <email@example.com> — Research Manager - [Name] <email@example.com> — RA ## Folders - transcripts: `transcripts/`
2. **Create a transcripts folder** in your project directory:
mkdir -p transcripts/
3. **Save meeting transcripts** as `.txt` files in that folder. Most transcription tools (Granola, Otter, etc.) can export to text. Name files with dates for easy sorting (e.g., `2026-03-15_team-sync.txt`).
`$ARGUMENTS` can include:
Read `.claude/CLAUDE.md` at **exactly** `$(pwd)/.claude/CLAUDE.md`.
Extract:
Fields may be inside markdown code fences (` ```yaml ``` `) — extract from inside fences.
**If not found:** Offer Granola MCP fallback (if available) — don't silently walk up directories.
No .claude/CLAUDE.md found in this directory. I can search Granola directly — want me to list recent meetings? (y/n)
If yes and Granola MCP is available: list recent meetings, then jump to Step 3 with `id:` flow. If no Granola MCP: ask user to provide the transcript path manually.
**If using Granola MCP:** Search for recent meetings matching this project and fetch the transcript.
**If using local files:** List `.txt` files in the transcripts folder (excluding `archive/` subfolder), sorted by date (newest first).
If `id:DOC_ID` argument: use Granola MCP to fetch the document directly, skip to Step 4.
If keyword argument: filter `.txt` files in transcripts folder by keyword in filename.
Otherwise: show most recent transcript + 2-3 others for selection.
**Transcript-not-ready check:** If no transcript is newer than 30 minutes and the user didn't specify an older one:
Transcript may still be processing. Try again in ~10 minutes, or pick an older meeting.
Summarize "[meeting title]" from [date]? (y/n)
Confirm BEFORE reading the full transcript.
Read the selected `.txt` file. If using Granola MCP (`id:` arg), fetch via the Granola transcript API.
**Hollow transcript check (REQUIRED before proceeding):**
After reading the content, classify it as full or hollow.
A transcript is **hollow (notes only)** if ANY of these are true:
A transcript is **full** if it is ≥5,000 characters AND contains conversational speaker content (back-and-forth dialogue, speaker labels, or a `.vtt` Zoom format).
**If hollow:** Stop immediately. Do not proceed to Step 5. Notify:
This transcript appears to be AI-generated notes summary, not a full verbatim transcript. Granola (or your transcription tool) may still be processing — usually ready 1-2 hours after meeting end. Options: 1. Try again later — run /post-meeting again once the transcript is ready 2. Find the raw transcript in your transcription tool 3. Proceed with notes only — summary will be less accurate (not recommended) What would you like to do?
Do NOT proceed unless the user explicitly chooses option 3.
Generate structured summary with:
**Minimum-content gate:** If no decisions AND no action items detected:
This was a brief meeting with no tracked decisions or action items. Send summary anyway? (y/n)
**Language check:** If non-English content detected in transcript:
Draft in [detected language] or English? (default: English)
If `nosend` argument: display summary and stop here.
Before drafting the email, ask who should send it:
Send as: 1. You — first person, signed with your name 2. AI executive assistant — third person, identifies clearly as an AI assistant (default: 1)
If sender = **You**: Use a direct,
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…