From pmm-execution
A self-improving customer interview synthesis engine for PMMs, Product Managers, and UX Researchers. Transforms raw transcripts into structured discovery outputs anchored in JTBD theory, with signal-level pattern detection, confidence scoring, and a compounding learning loop. Trigger on: "summarize interview", "process transcript", "interview summary", "what did customers say", "synthesize discovery", "interview debrief", "JTBD analysis", "customer insight", "research synthesis", or any request to process, structure, or extract meaning from a customer or prospect interview.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pmm-execution:interview-summaryThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Transforms raw interview transcripts into structured intelligence.
Transforms raw interview transcripts into structured intelligence. Not a transcription service. A synthesis engine that extracts Jobs, surfaces patterns, flags contradictions, and compounds learning across every session.
Built on JTBD theory. Sharpened for B2B product and GTM contexts.
Before intake, check .agents/product-marketing-context.md.
If it exists — load silently. Extract:
## ICP Prioritisation → does this interviewee match the ICP? Flag if they don't.## Positioning → does what they said validate or challenge current positioning?## Objections & Anti-Personas → flag any new objections or anti-persona signals in the transcript.## Revenue Levers → which lever does the discovered Job connect to?## Beachhead Segment → does this interviewee represent the beachhead or an adjacent segment?If context file is missing:
Surface once, non-blocking:
"No PMM context found. Run
hs-product-marketing-context BUILDfirst to make pattern detection significantly sharper. Continuing — but insights will be transcript-isolated, not connected to your positioning or ICP."
Cross-reference when findings trigger downstream work:
⚠️ Never summarize a transcript cold. Always establish context first. A context-blind summary misses what matters.
If the user pastes a transcript or file with no context, ask in one message:
"Before I synthesize this, give me three things:
- Who is this? Role, company, segment — and does this person match your ICP?
- What was the purpose of this interview? (Discovery / Validation / Win-loss / Churn / Competitive / Onboarding / Other)
- Is there anything specific you're trying to learn or confirm? (If yes, I'll weight those areas. If no, I'll surface what's most surprising.)"
If context is already provided, proceed directly. Don't ask questions whose answers are visible.
Accept transcripts in any of the following formats:
.txt, .md, or .pdf fileFor uploaded files: read the full file before producing any output.
For rough notes or partial transcripts:
"This looks like abbreviated notes rather than a verbatim transcript. I'll synthesize from what's here — flag anything you want me to treat with more precision before I continue."
Before generating the summary, run a silent internal check:
Coverage audit:
Signal scan:
If coverage is too thin to produce a reliable summary:
"This transcript is too sparse to synthesize with confidence. Here's what I can extract: [list]. What I'd flag as missing: [list]. Proceed with caveats, or go back for a follow-up?"
---
# Interview summary
hs-interview-summary v2.0.0
---
## 📋 Metadata
**Date:** [Date and time]
**Participants:** [Interviewer name + role] | [Interviewee name + role + company]
**Interview type:** [Discovery / Validation / Win-loss / Churn / Competitive / Other]
**Confidence:** [🟢 High — full transcript / 🟡 Medium — partial / 🔴 Low — rough notes]
**ICP match:** [Yes / Partial / No — one-line reason if not Yes]
---
## 🏢 Background
[Role, company, team size, and any relevant context about their situation.]
---
## 🛠️ Current solution
[What they use today — tool, process, or workaround.]
---
## ✅ What they like about their current solution
- **[Strength label]:** [What Job it satisfies and how.]
---
## 🔴 Problems with their current solution
**Job:** [The functional task they're trying to get done]
**Desired outcome:** [What success looks like for them]
**Importance:** [Critical / High / Medium / Low] — [one-line evidence]
**Satisfaction:** [Not satisfied / Partially / Satisfied] — [one-line evidence]
**Verbatim signal:** *"[Exact quote if available]"*
[Repeat block per Job. Separate each with a line break.]
---
## 💡 Key insights
- [Unexpected finding or analytical observation — no quotes here, pure interpretation.]
---
## 📋 Action items
| Date | Owner | Action |
|------|-------|--------|
| YYYY-MM-DD | [Name] | [Specific action] |
---
## ⚠️ Flags
- **[Flag label]:** [What it contradicts and why it matters.]
---
## 🗣️ Signal quotes
> *"[Quote]"* — [Speaker, context. What makes this one irreplaceable.]
---
## 📊 Pattern signal
**Matches existing pattern:** [Yes / No / Partial]
**New signal for tracking:** [Yes / No]
**Hypothesis triggered:** [State it, or "None"]
Apply a three-level confidence score to the whole summary:
🟢 High — Full verbatim transcript, clear interviewee context, identifiable Jobs 🟡 Medium — Partial transcript, rough notes, or ambiguous signals 🔴 Low — Very sparse notes, single-source claim, no verbatim quotes
For 🔴 summaries, prepend a warning block:
"⚠️ Low-confidence summary. Findings below are based on thin input. Do not route downstream without a follow-up or validation pass."
This is what turns a transcript processor into a discovery intelligence system.
Before generating the summary, check:
knowledge/interviews/patterns.md — confirmed patterns across sessionsknowledge/interviews/hypotheses.md — active hypotheses being trackedknowledge/interviews/rules.md — rules derived from 3+ confirmed hypothesesApply confirmed rules by default. Check if any hypothesis can be tested against today's transcript.
After generating the summary, extract and store:
knowledge/interviews/
patterns.md — recurring Jobs, pain patterns, vocabulary across interviews
hypotheses.md — signals worth tracking but not yet confirmed
rules.md — confirmed patterns (3+ instances) — apply to future syntheses
INDEX.md — router to all knowledge domains
Hypothesis promotion rule:
When a pattern appears in 3 or more interviews, promote it from hypotheses.md to rules.md.
Propose the promotion to the user. Apply only with explicit approval.
Rule demotion rule: If a confirmed rule is contradicted by a new interview, flag it:
"⚠️ This interview contradicts Rule [X]: '[rule]'. Recommend demoting to hypothesis. Confirm demotion?"
When a summary produces a significant strategic decision (repositioning signal, ICP update, Jobs model revision, messaging change), log it:
File: decisions/YYYY-MM-DD-{topic}.md
## Decision: [what was decided]
## Context: [what interview finding triggered this]
## Alternatives considered: [what else was on the table]
## Reasoning: [why this interpretation won]
## Trade-offs accepted: [what uncertainty you're accepting]
## Supersedes: [prior decision, if replacing one]
Before logging a new decision, check decisions/ for prior decisions in the same area.
Follow existing decisions unless this interview provides contradicting evidence.
Before delivering the summary, run this internal check. Do not show the checklist to the user. If the summary fails, fix it before output. Report only if a critical failure can't be resolved.
Structure:
Signal integrity:
PMM context check (if loaded):
Hard block — do not output if:
At the end of every synthesis session, run this close.
First, an open prompt:
"Before we wrap — what surprised you most about this interview, or what do you wish I'd flagged that I didn't?"
Then three structured questions:
After the user responds:
knowledge/interviews/hypotheses.mdhs-product-marketing-context update"Want me to update the skill with that change? I'll show you the diff before applying."
Only apply updates with explicit user approval.
Every summary saved to sessions/ carries:
_Interviewee: [role + company]_
_Interview type: [type]_
_Session date: YYYY-MM-DD_
_ICP match: Yes / Partial / No_
_Confidence: 🟢 / 🟡 / 🔴_
_QG: Pass / Fail_
_New hypothesis triggered: Yes / No_
_Version: 2.0.0_
| Skill | When to cross-reference |
|---|---|
hs-product-marketing-context | Always — load before synthesis |
hs-competitive-battlecard | Competitor named as current solution |
hs-value-prop-statements | Strong Job discovered — pressure-test messaging |
hs-gaccs-brief | Messaging hypothesis surfaced in interview |
hs-pre-mortem | Customer surfaced a failure mode or risk |
hs-brainstorm-okrs | Success metric gap or KR signal discovered |
knowledge/interviews/INDEX.md routes to:
patterns.md — recurring Jobs and pain signals across all interviews
hypotheses.md — active hypotheses (< 3 confirmations)
rules.md — confirmed patterns (3+ confirmations) — applied automatically
decisions/ — strategic decisions derived from interview synthesis
sessions/ — archived summaries with full metadata
Run these at any point in a session.
| Command | What it does |
|---|---|
/summarize [transcript or file] | Run the full synthesis flow on a transcript |
/summarize-quick [transcript or file] | Output only: skips intake questions, runs pre-synthesis audit silently, produces summary immediately |
/patterns | Show all active patterns, hypotheses, and rules from the knowledge base |
/hypotheses | Show active hypotheses and their current confirmation count |
/promote [hypothesis name] | Propose promotion of a hypothesis to a confirmed rule |
/flags | List all flags across sessions — contradictions with positioning or ICP assumptions |
/decisions | Show all logged strategic decisions from prior sessions |
/close | Run the Learning Close for the current session |
/save | Save the current summary to sessions/ with full metadata |
/help | Show available commands and current knowledge base status |
Basic — paste transcript
/summarize
[paste transcript]
Basic — with file
/summarize
[attach transcript file]
With context upfront — skip intake questions
/summarize
Interviewee: Head of RevOps, ~200-person SaaS. Matches ICP.
Purpose: Discovery — understand current reporting pain and switching triggers.
[paste transcript]
Win/loss
/summarize
This is a win/loss interview with a customer who chose [Competitor] over us.
Focus on which Job we lost and why.
[paste transcript]
Churn debrief
/summarize
Churn interview. Focus on the Jobs they hired us for vs. what broke down.
Flag any signal that should update our ICP.
[paste transcript]
Quick output — no intake, straight to summary
/summarize-quick
[paste transcript]
Check knowledge base after multiple sessions
/patterns
Run the learning close after a session
/close
Formatting and structure patch from review session.
/summarize, /summarize-quick, /close, /patternsFull rebuild from v1.0.0. Breaking changes throughout.
Architecture upgrades:
Output template upgrades:
Removed:
Simple transcript-to-template. JTBD template, action items, further reading.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub stefanoskarakasis/product-marketing-skills --plugin pmm-execution