Pm-skills foundation-meeting-synthesize
<!-- PM-Skills | https://github.com/product-on-purpose/pm-skills | Apache 2.0 -->
git clone https://github.com/product-on-purpose/pm-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/product-on-purpose/pm-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/foundation-meeting-synthesize" ~/.claude/skills/product-on-purpose-pm-skills-foundation-meeting-synthesize && rm -rf "$T"
skills/foundation-meeting-synthesize/SKILL.mdname: foundation-meeting-synthesize description: Cross-meeting archaeology skill. Consumes multiple meeting recaps (or raw notes) over a period and surfaces patterns invisible in any single meeting: how decisions evolved, who has been saying what, where threads are stalling, where contradictions have emerged. Produces a plain-text timeline, themes with confidence markers, stakeholder position tracking, consolidated decision list, contradiction flags, open items, narrative summary, and prioritized follow-ups. classification: foundation version: "1.0.0" updated: 2026-04-17 license: Apache-2.0 metadata: category: meeting frameworks: [meeting-skills-family] author: product-on-purpose
<!-- PM-Skills | https://github.com/product-on-purpose/pm-skills | Apache 2.0 -->Meeting Synthesize
Meeting synthesis is the archaeology skill for multi-meeting initiatives. It consumes a set of meeting recaps (and optionally raw notes) over a period, and surfaces patterns that no single meeting reveals: how decisions evolved, how stakeholder positions shifted, where threads are stalling, where contradictions have emerged.
Distinct from
/discover-interview-synthesis: that skill works on user-research conversations with research-specific frameworks (jobs-to-be-done, buying insights). This skill works on internal org meetings with org-specific patterns (stakeholder alignment, decision evolution, project history).
This skill belongs to the Meeting Skills Family. It conforms to the Meeting Skills Family Contract.
When to Use
- Board prep or exec-brief preparation across a meeting sequence
- Onboarding a new team member into the history of an initiative
- Project retrospective input (the story of how we got here)
- Investigating why a multi-meeting initiative has stalled
- Quarterly review of a topic that has crossed many meetings
- Surfacing contradictions that no single-meeting reviewer caught
When NOT to Use
- Single-meeting summary. Use
instead./meeting-recap - Communicating outcomes outward. Use
./stakeholder-update - User research conversation synthesis. Use
./discover-interview-synthesis
Zero-friction execution
Per the family contract, this skill never blocks on interrogation. Default flow:
- Load all provided source files (recaps preferred, raw notes accepted with lower input-quality flag)
- Apply any filters (time range, topic, stakeholder)
- Run inference on themes, stakeholder evolution, contradictions
- Present a brief inference summary (meeting count after filter, time range detected, per-source input quality, scope filter applied)
- Accept
or correctionsgo - Produce the synthesis
If invoked with
--go, skip the inference summary. Format hints (board-prep, onboarding, retro-input, exec-brief) control output presentation without changing the underlying process.
Instructions
When asked to create a meeting synthesis, follow these steps:
-
Load sources Read all provided recap filenames or note files. Parse frontmatter to extract meeting metadata. Note per-source input quality (recap frontmatter's
if available; otherwise assess from content).input_qualityMetadata source tracking (v1.1.0): for each recap, also note the
field (meeting_type_source
). When synthesizing across mixed sources, the synthesis must document the mix explicitly in the Scope section: "meeting_type values: N explicit, M inferred, K null." This prevents non-reproducible results when filtering by meeting_type across a mix of confidence levels. If filtering byexplicit | inferred | null
, state whether the filter includes inferred values and how null values are handled.meeting_type -
Apply filters If time range, topic, or stakeholder filter provided, narrow the source set before proceeding. Record the filter applied in frontmatter
.scope_filter -
Present go-mode inference summary Meeting count after filter, time range detected from source metadata, per-source input quality levels, scope filter description.
-
Build the plain-text timeline Chronological order by
. Each entry shows date, meeting name, key decision or shift, and confidence or contradiction flag if applicable. Render as markdown (no binary images — must render everywhere).meeting_date -
Extract themes Cluster recurring topics across sources. For each theme, record description, sources where it appeared, and confidence marker tied to frequency ("appears in 5/5 meetings" → high; "appears in 2/5 meetings" → medium; "mentioned in 1 meeting" → low).
-
Track stakeholder positions For each named stakeholder across sources, record initial position → current position, alignment state (aligned / divergent / shifting), and key statements with dates. Flag confidence on each position based on whether it was direct-quoted or paraphrased.
-
Consolidate decisions Cross-meeting, sorted chronologically. Table format: Date | Decision | Context | Meeting | Confidence.
-
Separate decision evolution from unresolved contradictions (v1.1.0) Two distinct outputs, not one combined "contradictions" section:
- Decision evolution (resolved): earlier decision → later decision on the same topic, where the later one supersedes. This is historical context, not a red flag. No
emphasis.⚠ - Unresolved contradictions: decisions or positions currently in conflict that need reconciliation. Use
visual emphasis. For each:⚠- Earlier reference (meeting + date + decision)
- Later reference (meeting + date + decision that conflicts)
- Status: unresolved / needs reconciliation
The distinction matters because v1.0.0 conflated them, creating false-positive "contradictions" in exec contexts where the "contradiction" was actually intentional scope evolution.
- Decision evolution (resolved): earlier decision → later decision on the same topic, where the later one supersedes. This is historical context, not a red flag. No
-
Identify open items and stalled threads Topics surfacing 2+ times without resolution. When they last appeared.
-
Draft narrative summary 2-3 paragraphs: what happened, what changed, where we are, what is at stake. The "story" of the meeting set.
-
Prioritize follow-up suggestions
- High: unblocking now; suggested owner or forum
- Medium: important but not blocking
- Low: monitor Each with rationale.
-
Apply format hint (if provided) One process generates the full synthesis data. The hint controls section ordering and truncation for the specific use case:
: lead with narrative + contradictions + prioritized follow-ups; shorter timelineboard-prep
: lead with narrative + stakeholder tracking; full timelineonboarding
: lead with themes + stalled threads + meeting-quality aggregateretro-input
: TL;DR + top 3 items onlyexec-brief
-
Render TEMPLATE.md and validate
list is non-emptysource_meetings
≤time_range.starttime_range.end- Every theme has a confidence marker
- Every contradiction has before/after source citations
- At least 1 prioritized follow-up
Quality checklist
- Source meetings listed with filename + date + per-source input quality
- Time range populated and sensible
- Scope filter described (or "none applied")
- Timeline is plain-text markdown (no binary images)
- Themes include confidence markers tied to frequency
- Stakeholder position tracking shows evolution (initial → current), not just snapshot
- Consolidated decision list is chronological with source citations
- Contradictions are flagged in their own first-class section (not buried)
- Narrative summary is 2-3 paragraphs, not bullets
- Follow-ups are prioritized (High / Medium / Low) with rationale
- Frontmatter omits single-meeting fields (meeting_title, meeting_date, etc.)
- Sources and References weights input quality across sources
See also
- Meeting Skills Family Contract
— upstream: primary input source/meeting-recap
— sibling pattern for user-research conversations (different domain)/discover-interview-synthesis