Meeting Synthesis
Purpose
Extract actionable product signals from meeting transcripts:
- •Feature requests and capability asks
- •Pain points and friction areas
- •Customer quotes and verbatim feedback
- •Evidence for epic creation and prioritization
- •Pattern detection across multiple customers
When to Use This Skill
Activate automatically when:
- •
product-planningworkflow gathers signals for epics - •
cs-prepworkflow compiles customer context for QBRs - •
strategy-sessionworkflow needs customer insights - •User explicitly requests meeting synthesis
- •Any workflow requires customer evidence extraction
Signal Types
1. Feature Requests ("Asks")
Explicit requests for new capabilities or enhancements.
Indicators:
- •"We need..."
- •"Can you build..."
- •"It would be great if..."
- •"Our team wants..."
Extract:
- •What capability is requested?
- •Why is it needed? (business impact)
- •Who requested it? (customer, role)
- •When? (meeting date)
2. Pain Points ("Problems")
Friction, blockers, or inefficiencies users experience.
Indicators:
- •"It's frustrating that..."
- •"We struggle with..."
- •"The current process is..."
- •"Our team spends too much time..."
Extract:
- •What is the pain point?
- •How does it impact workflow/outcomes?
- •Frequency/severity?
- •Who experiences it?
3. Onboarding Friction
Specific difficulties during setup or first value realization.
Indicators:
- •"Setup was confusing..."
- •"Took us X weeks to..."
- •"Couldn't figure out how to..."
- •"Documentation unclear on..."
Extract:
- •What step caused friction?
- •How long did it take?
- •Was it eventually resolved?
- •Suggestions for improvement?
4. Integration Gaps
Missing connectors or data sync capabilities.
Indicators:
- •"We use [Tool X] but can't connect..."
- •"Data sync with [Platform Y]..."
- •"Export to [System Z]..."
Extract:
- •What integration is needed?
- •What data needs to flow?
- •Current workaround (if any)?
- •Business impact of gap?
5. Performance Needs
Speed, scale, or reliability requirements.
Indicators:
- •"Too slow when..."
- •"Times out on..."
- •"Can't handle X records..."
- •"Need real-time..."
Extract:
- •What operation is slow?
- •Current performance vs. needed?
- •Scale requirements?
- •Impact on usage?
Synthesis Process
1. Determine Time Window
Inputs:
- •
days: Explicit lookback window (e.g., 7, 14, 30) - •
last_run: Timestamp from state file (e.g.,datasets/product/.meetings-to-backlog-state.json) - •Default: 3 days if no inputs provided
Calculate cutoff date:
If days provided: cutoff_date = current_date - days Else if last_run exists: cutoff_date = last_run timestamp Else: cutoff_date = current_date - 3 days
2. Collect Meeting Files
Scan paths:
datasets/meetings/Customers/**/YYYY/*.md (where date >= cutoff_date) datasets/meetings/Internal/Product/YYYY/*.md (where date >= cutoff_date)
Use Glob to find files:
Glob pattern: datasets/meetings/Customers/**/2025/*.md Glob pattern: datasets/meetings/Internal/Product/2025/*.md
Filter by date:
- •Extract date from filename (YYYY-MM-DD prefix)
- •Compare to cutoff_date
- •Keep only files >= cutoff_date
3. Extract Signals from Each Meeting
For each meeting file:
A. Parse frontmatter:
date: "YYYY-MM-DD" type: "sales|product|customersuccess|..." customer: "Company Name" participants: ["Person A", "Person B"] tags: ["2025Q3", "keyword"]
B. Read sections:
- •
## ⬇️ AI Summary→ High-level signals - •
## ⬇️ Action Items→ Commitments and follow-ups - •
## ⬇️ Full Transcript→ Detailed context and quotes
C. Identify signal candidates: Use pattern matching:
Feature requests: grep -i "we need\|can you\|would be great\|want to" transcript Pain points: grep -i "frustrat\|struggle\|difficult\|problem\|issue" transcript Onboarding: grep -i "setup\|onboard\|getting started\|first" transcript Integrations: grep -i "integrat\|connect\|sync\|export" transcript Performance: grep -i "slow\|timeout\|performance\|scale" transcript
D. Extract verbatim quotes:
- •Capture 1-3 sentence snippets around signal indicators
- •Preserve exact wording for evidence
- •Include speaker attribution if available
E. Record metadata: For each signal:
{
"signal_text": "Verbatim quote or paraphrase",
"signal_type": "ask|problem|friction|integration|performance",
"customer": "Company Name",
"date": "YYYY-MM-DD",
"meeting_type": "sales|product|customersuccess",
"source_file": "/path/to/meeting.md",
"section": "AI Summary|Action Items|Full Transcript"
}
4. Cluster Signals
Semantic clustering:
- •Group similar signals across customers
- •Identify common themes
- •Label clusters with action-style names (Verb + Object + Outcome)
Examples:
- •"Revamp onboarding to reduce TTFV" (multiple onboarding friction signals)
- •"Add Google Sheets export capability" (multiple export/integration requests)
- •"Improve dashboard load performance" (multiple performance complaints)
For each cluster:
{
"cluster_label": "Action-style theme name",
"mention_count": N, # Total signal occurrences
"unique_accounts": N, # Distinct customers
"unique_functions": N, # Customer vs. internal sources
"signals": [array of signal objects],
"recentness_weight": calculated_score # Newer = higher
}
5. Compute Signal Metrics
For each cluster:
A. Mention count: Total occurrences across all meetings.
B. Unique accounts: Distinct customer names in signal sources.
C. Unique functions: Count of different source types:
- •External customers
- •Internal product team
- •Partner/agency feedback
D. Recentness weight:
For each signal in cluster: days_ago = current_date - signal.date recentness_score = max(0, 30 - days_ago) / 30 # Linear decay over 30 days Average recentness across all signals in cluster
E. Source diversity: Mix of meeting types:
- •Sales calls
- •Product feedback sessions
- •Customer success check-ins
- •Onboarding calls
Higher diversity = stronger signal.
6. Output Synthesized Data
Return structured object:
{
"time_window": {
"start_date": "YYYY-MM-DD",
"end_date": "YYYY-MM-DD",
"days_scanned": N,
"meetings_processed": N
},
"clusters": [
{
"label": "Cluster name",
"mention_count": N,
"unique_accounts": N,
"unique_functions": N,
"recentness_weight": 0.0-1.0,
"source_diversity": 0.0-1.0,
"signals": [
{
"text": "Quote or paraphrase",
"customer": "Company",
"date": "YYYY-MM-DD",
"meeting_type": "...",
"source_file": "..."
}
]
}
],
"raw_signals": [all unclustered signals for reference]
}
Filtering and Scoping
Customer Filter
Input: include_customers (comma-separated list)
Behavior:
- •If provided: Only process meetings where
customerfield matches list - •If not provided: Process all customers
Example:
include_customers: "PrettyBoy,CompoundStudio,Joy Organics" → Only synthesize signals from these three customers
Function Filter
Input: include_internal_functions (comma-separated list)
Behavior:
- •If provided: Only process internal meetings from specified functions
- •Functions: Product, CS, Sales, Marketing, Ops
Example:
include_internal_functions: "Product,CS" → Process internal Product and CS meetings, skip Sales/Marketing/Ops
Signal Thresholds
Input filters:
- •
min_mentions: Minimum total mentions to qualify (default: 1) - •
min_sources: Minimum distinct sources (customers/functions) to qualify (default: 1)
Application: After clustering, filter out clusters that don't meet thresholds:
Keep cluster if: cluster.mention_count >= min_mentions AND cluster.unique_accounts + cluster.unique_functions >= min_sources
Type Exclusions
Input: exclude_types (comma-separated list)
Behavior: Ignore signals matching certain categories.
Default exclusions:
exclude_types: "bugs,housekeeping"
Examples:
- •"bugs": Bug reports (should go to issue tracker, not epics)
- •"housekeeping": Internal cleanup tasks
- •"research": Exploratory ideas (not ready for roadmap)
Integration with Workflows
Product Planning Integration
Invoked by:
- •
product-planningworkflow
Inputs:
- •Time window (days or last_run)
- •Customer filter (optional)
- •Function filter (optional)
- •Thresholds (min_mentions, min_sources)
Outputs:
- •Clustered signals ready for epic creation
- •Evidence for epic "Why now" sections
- •Customer quotes for epic proposals
CS Prep Integration
Invoked by:
- •
cs-prepworkflow
Inputs:
- •Specific customer name
- •Time window (typically 30-90 days for QBR prep)
Outputs:
- •Customer-specific signal history
- •Pain points and friction areas
- •Feature requests and timeline
- •Quotes for QBR discussion
Strategy Session Integration
Invoked by:
- •
strategy-sessionworkflow
Inputs:
- •Time window (often broader, e.g., 90 days)
- •Optional topic filter
Outputs:
- •Cross-customer patterns
- •Market trends from customer feedback
- •Evidence for strategic decisions
Success Criteria
Meeting synthesis complete when:
- •All meetings in time window processed
- •Signals extracted and categorized
- •Clustering applied (semantic grouping)
- •Metrics computed (mentions, accounts, recency)
- •Output structured for consuming workflows
- •Verbatim quotes preserved for evidence
Common Mistakes
| Mistake | Fix |
|---|---|
| Paraphrasing customer quotes | Preserve verbatim text for accuracy |
| Ignoring meeting date filters | Respect cutoff_date strictly |
| Missing signal categorization | Tag each signal as ask/problem/friction/etc. |
| Not recording source file paths | Track every signal back to source meeting |
| Skipping semantic clustering | Group similar signals for pattern detection |
Related Skills
- •meeting-schema-validation: Validates meetings before synthesis
- •priority-scoring: Uses synthesis output for epic prioritization
- •product-planning: Primary consumer of synthesis output
Anti-Rationalization Blocks
Common excuses that are explicitly rejected:
| Rationalization | Reality |
|---|---|
| "Close enough" on quotes | Preserve exact wording or mark as paraphrase. |
| "Skip old meetings" | Process all meetings in time window. |
| "This signal doesn't fit categories" | Categorize as best match or flag as uncategorized. |
| "Single mention isn't worth tracking" | Track all signals, filter by thresholds later. |