| name | meeting-processor |
| description | This skill should be used when processing meeting transcripts to auto-detect meeting type (leadgen, partnership, coaching, internal) and extract type-specific structured analysis. Triggers on "process meeting", "analyze meeting", "meeting summary", or after syncing new Fathom/Granola transcripts. |
Meeting Processor
Intelligent meeting transcript processor that auto-detects meeting type and applies type-specific extraction with optional interactive clarification.
When to Use
- After syncing Fathom or Granola transcripts (
/fathom --today, /granola export)
- When asked to process, analyze, or summarize a meeting transcript
- When a new meeting transcript appears in the vault root matching
YYYYMMDD-*.md
- For coaching sessions, delegate to
coaching-session-summarizer skill instead
Prerequisites
pip install openai pyyaml
Requires CEREBRAS_API_KEY environment variable (uses Cerebras API with llama-3.3-70b).
Supported Meeting Types
| Type | Description | Key Extractions |
|---|
| leadgen | Sales/business development calls | Commitments, pain points, budget, timeline, decision makers, deal stage, sentiment |
| partnership | Collaboration/partnership exploration | Opportunity overview, value proposition, strategic alignment, technical needs, fit assessment |
| coaching | Coaching/mentoring sessions | Insights, decisions, action items, themes, emotional arc, techniques, session quality |
| internal | Internal team meetings | Coming soon |
Usage
Interactive Mode (default)
Run the processor, which auto-detects meeting type and asks clarifying questions:
python3 ~/.claude/skills/meeting-processor/scripts/process.py <transcript-file> --mode interactive
Interactive flow:
- Script analyzes transcript and detects meeting type
- Extracts structured data via LLM
- Identifies missing/ambiguous fields
- Returns questions as JSON (exit code 2 signals interaction needed)
- Parse the JSON between
__INTERACTIVE_QUESTIONS__ markers
- Use AskUserQuestion to collect answers for each question
- Save answers to a temp JSON file and re-run with
process_with_answers.py
Handling interactive questions:
When the script exits with code 2, parse the output for questions JSON. Each question has:
question: The question text
header: Short label (used as answer key)
options: Array of {label, description} for AskUserQuestion
After collecting answers, create two temp files:
questions.json — the original questions context (includes partial_data, meeting_type, transcript_file)
answers.json — map of {header_lowercase: selected_label}
Then run:
python3 ~/.claude/skills/meeting-processor/scripts/process_with_answers.py questions.json answers.json
Batch Mode
Extract only high-confidence information without user interaction:
python3 ~/.claude/skills/meeting-processor/scripts/process.py <transcript-file> --mode batch
Force Meeting Type
Skip auto-detection:
python3 ~/.claude/skills/meeting-processor/scripts/process.py <transcript-file> --type leadgen
python3 ~/.claude/skills/meeting-processor/scripts/process.py <transcript-file> --type partnership
Output
Analysis is appended to the transcript file as a ## Meeting Analysis section. Frontmatter is updated with meeting_type, processed_date, and processing_mode.
Leadgen Output Structure
- Commitments & Actions — with deadlines and owners
- Follow-up — next meeting date if scheduled
- Client Context — pain points, budget, timeline, decision makers
- Deal Assessment — stage (cold/warm/hot), probability (1-5), blocker, sentiment
Partnership Output Structure
- Opportunity — description and value proposition for both sides
- Commitments & Actions — with deadlines and owners
- Follow-up — next meeting date if scheduled
- Partnership Context — strategic alignment, technical needs, resources, challenges
- Opportunity Assessment — fit (strong/medium/weak), readiness, success factors, sentiment
Step 2: Auto-Link Prep Notes
After the meeting analysis is complete (Step 1), automatically link any matching meeting-prep notes to the session note. This replaces the need to manually run /meeting-prep link.
How It Works
-
Derive the meetings directory from the processed session note's parent directory (do not hardcode paths).
-
Extract session metadata from the processed note:
date from frontmatter (YYYYMMDD format)
participants from frontmatter (list of names)
- If no
participants field, extract names from the transcript header or attendee list
-
Search for matching prep notes:
find <MEETINGS_DIR> -name "YYYYMMDD-prep-*" -type f 2>/dev/null
Where YYYYMMDD is the session date.
-
Validate the match: For each candidate prep note, read its frontmatter and confirm:
- The
date field matches the session date
- The
participant field matches one of the session's participants (fuzzy: check both full name and first name, case-insensitive)
- The
session_note field is empty ("") — skip already-linked prep notes
-
Update both files when a match is found:
In the prep note:
- Set
session_note: "[[session-note-filename]]" (without .md extension)
- Set
status: done
In the session note:
-
Report in the processing output which prep notes were linked, skipped, or not found.
Rules
- Derive
MEETINGS_DIR from the session note path, not from hardcoded values
- If the meeting-prep
config.yaml is available, read prep_notes.prefix (default: prep) and prep_notes.type_tag (default: meeting-prep)
- This step is non-blocking: if it fails or finds no prep notes, processing still succeeds