Claude-skill-registry-data meeting-synthesis
Use when extracting product signals from meeting transcripts - systematically identifies asks, problems, quotes, and evidence across time windows with customer attribution
git clone https://github.com/majiayu000/claude-skill-registry-data
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry-data "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/meeting-synthesis" ~/.claude/skills/majiayu000-claude-skill-registry-data-meeting-synthesis && rm -rf "$T"
data/meeting-synthesis/SKILL.mdMeeting 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:
workflow gathers signals for epicsproduct-planning
workflow compiles customer context for QBRscs-prep
workflow needs customer insightsstrategy-session- 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:
: Explicit lookback window (e.g., 7, 14, 30)days
: Timestamp from state file (e.g.,last_run
)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:
→ High-level signals## ⬇️ AI Summary
→ Commitments and follow-ups## ⬇️ Action Items
→ Detailed context and quotes## ⬇️ Full Transcript
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
field matches listcustomer - 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:
: Minimum total mentions to qualify (default: 1)min_mentions
: Minimum distinct sources (customers/functions) to qualify (default: 1)min_sources
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:
workflowproduct-planning
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:
workflowcs-prep
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:
workflowstrategy-session
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. |