meeting-processor
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.
What this skill does
# 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
```bash
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:
```bash
python3 ~/.claude/skills/meeting-processor/scripts/process.py <transcript-file> --mode interactive
```
**Interactive flow:**
1. Script analyzes transcript and detects meeting type
2. Extracts structured data via LLM
3. Identifies missing/ambiguous fields
4. Returns questions as JSON (exit code 2 signals interaction needed)
5. Parse the JSON between `__INTERACTIVE_QUESTIONS__` markers
6. Use AskUserQuestion to collect answers for each question
7. 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:
```bash
python3 ~/.claude/skills/meeting-processor/scripts/process_with_answers.py questions.json answers.json
```
### Batch Mode
Extract only high-confidence information without user interaction:
```bash
python3 ~/.claude/skills/meeting-processor/scripts/process.py <transcript-file> --mode batch
```
### Force Meeting Type
Skip auto-detection:
```bash
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
1. **Derive the meetings directory** from the processed session note's parent directory (do not hardcode paths).
2. **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
3. **Search for matching prep notes**:
```bash
find <MEETINGS_DIR> -name "YYYYMMDD-prep-*" -type f 2>/dev/null
```
Where `YYYYMMDD` is the session date.
4. **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
5. **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
6. **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
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.