Processes meeting transcripts to extract summaries, decisions, follow-up commitments, and topic tags. Activates when the user wants to analyze a meeting, summarize a transcript, find what was decided, or pull action items from meeting notes — even a casual 'what happened in that meeting?' Runs four independent extraction pipelines on any transcript format.
From founder-osnpx claudepluginhub thecloudtips/founder-os --plugin founder-osThis skill uses the workspace's default tool permissions.
references/extraction-patterns.mdDesigns and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Enables AI agents to execute x402 payments with per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents pay for APIs, services, or other agents.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Process a normalized meeting transcript through four independent extraction pipelines: summary generation, key decisions logging, follow-up commitment detection, and topic extraction. Each pipeline operates independently on the same input and produces its own output section. The combined result forms a structured meeting intelligence report suitable for Notion storage or chat display. This skill handles analysis only -- source gathering and transcript normalization are the responsibility of the source-gathering skill.
For the complete detection pattern libraries referenced throughout this document, see ${CLAUDE_PLUGIN_ROOT}/skills/meeting/meeting-analysis/references/extraction-patterns.md.
Accept a NormalizedTranscript object produced by the source-gathering skill. The normalized structure contains:
When the input is raw text (from /founder-os:meeting:analyze with pasted content or a file path), construct a minimal NormalizedTranscript with title set to the filename or "Untitled Meeting", date set to today, source_type set to "Local File", and attendees inferred from speaker labels in the text. Leave duration empty if not determinable from timestamps.
Run all four pipelines independently against the transcript text. Each pipeline produces its own output section. A failure or empty result in one pipeline does not block the others.
Generate a concise 3-5 sentence summary capturing the essential meeting content.
Detect and extract explicit and inferred decisions from the transcript.
Scan for decision language using two confidence tiers:
Explicit decisions (confidence: Explicit) -- Direct statements of a resolved choice. Key patterns include "We decided...", "Agreement:", "Let's go with...", "The decision is...", "Going forward...", "We'll proceed with...", "Final answer is...". See ${CLAUDE_PLUGIN_ROOT}/skills/meeting/meeting-analysis/references/extraction-patterns.md for the full pattern list.
Inferred decisions (confidence: Inferred) -- Contextual consensus without direct decision language. Detect when a proposal receives no objection and discussion moves on, when a participant states a plan and others agree or remain silent, or when a topic concludes with an implicit resolution.
For each detected decision, extract:
true when disagreement markers appear within 3 speaker turns of the decision. Set to false when consensus was clear.disputed is true, note the dissenting position and who raised it. Set to null when disputed is false.When a decision is preceded by explicit disagreement ("I disagree", "I'm not sure about that", "My concern is...", "I'd prefer..."), include the dissenting position in the dissent field. This preserves minority viewpoints for the meeting record. Do not editorialize on who was right -- capture the positions factually.
Detect actionable commitments that participants made during the meeting. Format output to be compatible with #06 Follow-Up Tracker's promise pattern structure.
Scan for commitment language where a named person accepts or is assigned a task. Key patterns include "I'll send...", "I'll have that by...", "[Name] will...", "Can you [action] by [date]?", "By [date] we need to...", "[Name], please...", "I'm going to...", "Let me take care of...". See ${CLAUDE_PLUGIN_ROOT}/skills/meeting/meeting-analysis/references/extraction-patterns.md for the full pattern list.
For each detected follow-up, extract:
who in delegation cases like "John, can you handle that?").Structure each commitment to align with #06 Follow-Up Tracker's promise patterns:
promise_type: "Promise Made" | "Promise Received"
promise_text: [the verbatim commitment phrase from transcript]
who: [assignee name]
what: [cleaned task description]
deadline: [ISO date or null]
source: "Meeting Transcript"
Set promise_type to "Promise Made" when the meeting attendee self-commits ("I'll do X") and "Promise Received" when someone is assigned a task by another participant.
Identify 3-7 topic tags that characterize the meeting content.
When saving to Notion, check the existing multi_select options on the Topics property of the target database ("[FOS] Meetings" or fallback "Founder OS HQ - Meetings" / "Meeting Intelligence Hub - Analyses"). Prefer matching existing tags over creating new ones:
This keeps the tag taxonomy consistent across meeting analyses and enables filtering by topic in the Notion database.
Produce a structured meeting intelligence report combining all four pipeline outputs:
Meeting Title: [from NormalizedTranscript]
Date: [YYYY-MM-DD]
Duration: [from NormalizedTranscript or "Unknown"]
Source: [source_type]
Attendees: [comma-separated list]
## Summary
[3-5 sentence summary from Pipeline 1]
## Key Decisions
[For each decision:]
- **Decision**: [decision_text]
- Proposed by: [proposer]
- Confidence: [Explicit/Inferred]
- Context: [context]
- Disputed: [Yes/No]
- Dissent: [dissent or "None"]
## Follow-Up Commitments
[For each commitment:]
- **[who]**: [what]
- Deadline: [ISO date or "Not specified"]
- Mentioned by: [mentioned_by]
## Topics
[Comma-separated topic tags]
When a pipeline produces no results (e.g., no decisions detected), include the section header with an explanatory note: "No explicit decisions detected in this transcript."
Search Notion for the shared meetings database. Do NOT lazy-create the database.
Lookup flow:
Only write these fields when saving analysis results:
| Property | Type | Description |
|---|---|---|
| Meeting Title | title | Meeting name |
| Event ID | rich_text | Calendar event ID when available (shared idempotent key with P03) |
| Date | date | Meeting date |
| Attendees | rich_text | Comma-separated participant names |
| Source Type | select | Fireflies / Otter / Gemini / Notion / Generic |
| Transcript File | rich_text | Path to saved transcript file |
| Summary | rich_text | 3-5 sentence summary |
| Decisions | rich_text | Formatted decisions list |
| Follow-Ups | rich_text | Formatted commitments list |
| Topics | multi_select | Extracted topic tags |
| Duration | number | Meeting duration in minutes |
| Company | relation | Associated company when attendees match CRM contacts (relation to "[FOS] Companies") |
| Generated At | date | Timestamp of analysis generation |
P03-owned fields (do NOT overwrite if they already have values): Prep Notes, Talking Points, Importance Score, Sources Used.
Use Event ID as the primary idempotent key when available (e.g., when the transcript can be matched to a calendar event). Fall back to Meeting Title + Date as a compound lookup key when Event ID is not available.
Before creating a new record, query the database for an existing row matching the Event ID (or Meeting Title + Date). When a match is found (possibly created by P03 Meeting Prep Autopilot), update the existing row with P07-owned fields only. Do not overwrite P03 fields. Append a note to the page: "Re-analyzed at [timestamp] -- replaces previous analysis." Never create duplicate records for the same meeting.
Company relation: When meeting attendees can be matched to CRM contacts (via Notion CRM search by name or email), set the Company relation to the matching company from "[FOS] Companies". If no CRM match is found, leave the Company relation empty.
When the Notion MCP server is not connected, output the full intelligence report to chat. Do not treat Notion unavailability as an error. Append: "Notion unavailable -- analysis displayed in chat only. Re-run with Notion connected to save."
After completing the analysis, suggest running the Action Item Extractor on the transcript for deeper action item extraction:
"For additional action items, run
/founder-os:actions:extract-file [transcript-path]-- the transcript is pre-formatted with speaker labels for optimal extraction."
Include the actual transcript file path in the suggestion. Do not auto-run #04 -- present the suggestion and let the user decide.
Follow-up commitments from Pipeline 3 are formatted to be compatible with #06's promise pattern structure. When #06 is available, the commitments can be directly imported into the Follow-Up Tracker database. The promise_type, promise_text, who, what, deadline, and source fields map directly to #06's tracking schema.
Note this integration in the output: "Follow-ups are formatted for #06 Follow-Up Tracker compatibility."
When the transcript is fewer than 500 words:
When the transcript lacks speaker identification (plain text without "Speaker:", "[Name]:", or similar labels):
proposer, who, and mentioned_by fields to "Unknown Speaker".When the transcript contains repeated segments (common in auto-generated transcripts with corrections or disfluencies):
When the transcript is primarily non-English, warn about reduced accuracy and attempt best-effort extraction. Decision and commitment patterns may still match if the transcript uses common English business phrases.
When the transcript contains clear meeting boundaries (new date headers, "Meeting adjourned" followed by new attendees), treat as separate meetings. Run pipelines independently for each segment and create separate Notion records.
Consult these reference files for detailed implementation guidance:
${CLAUDE_PLUGIN_ROOT}/skills/meeting/meeting-analysis/references/extraction-patterns.md -- Complete detection pattern libraries for decisions, commitments, topic extraction, and disagreement signals. Includes language variants, edge case patterns, and false positive filters.