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 CEREBRASAPIKEY 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
processwithanswers.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 partialdata, meetingtype, transcript_file)
answers.json — map of {headerlowercase: selectedlabel}
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 meetingtype, processeddate, 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:
``bash 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: - If a ## See also section exists, add - [[YYYYMMDD-prep-participant-slug]] to it - Otherwise, append a new section at the end: ``markdown ## Prep Note - [[YYYYMMDD-prep-participant-slug]] `` - Never create duplicate links — check if the link already exists before adding
- 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 prepnotes.prefix (default: prep) and prepnotes.type_tag (default: meeting-prep)
- This step is non-blocking: if it fails or finds no prep notes, processing still succeeds