skills/pmf/SKILL.md
Full product-market fit cycle for one product — from initial hypothesis to post-launch metrics. 10 stages: setup → hypothesis (7 dimensions) → market research → risk synthesis → DVF validation → interview prep → field → interview synthesis → MVP → metrics (Sean Ellis + retention + Levels of PMF) → iterate. Resumes between sessions based on the project folder state. Bilingual (English + Russian) — picks the language during first-run setup. TRIGGER on ANY: - "do PMF for [product]" / "I need product market fit for X" / "PMF [name]" - "start PMF cycle" / "I want to go through PMF" / "help me validate [idea]" - "continue PMF" / "continue PMF [name]" - "check PMF" / "what stage is my PMF at" / "show my PMF projects" - "is my product ready to launch" - "сделай PMF для [продукта]" / "нужен product market fit для X" / "PMF [имя]" - "запусти PMF цикл" / "хочу пройти PMF" / "помоги валидировать [идею]" - "продолжаем PMF" / "продолжай PMF [имя]" - "проверь PMF" / "на каком этапе у меня PMF" / "покажи мои PMF проекты" - "готов ли мой продукт к запуску" - User mentions a product and wants to validate it systematically
npx skillsauth add alenazaharovaux/share pmfInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill takes a product through the full product-market fit cycle. One skill = one orchestrator, not a bundle. All 10 stages live inside it. The skill figures out which stage the project is in and proposes the next step.
A PMF cycle takes months. The skill accepts that pace: it resumes between sessions, remembers where you left off, and does not rush.
No subagents for research. Stage 2 (market research) is done sequentially in the main session via Exa/WebSearch. The user sees every search and every result and can intervene. Researching analogs is substantive work, not "file lookup."
The PMF projects folder is configurable. Stored in ~/.claude/skills/pmf/config.md. Default: ~/pmf-projects/. The skill writes everything for a given product into <projects_path>/<product-slug>/. Not CWD, not somewhere else.
Confidence can decrease. That is normal. If the confidence in narrative-v2 is lower than v1 — the data is contradicting the hypothesis, and that is a useful signal, not a reason to inflate the number.
Terminology: "assumption" (not "hypothesis") in Stage 4. In stages 1–3 — "hypothesis." In stage 4 with DVF — only "assumption." This is methodologically important (David Bland).
Tone is calm. No exclamation marks, no dramatization. The user is doing PMF not to be cheered on, but to understand what works and what does not.
Stages 6 (interviews) and 8 (MVP) are outside the skill. The skill prepares the guide / gives metrics instructions, but does NOT try to "conduct interviews" or "launch an MVP." This is the user's work in the real world, weeks or months.
On every trigger, before doing anything else, the skill reads its config:
~/.claude/skills/pmf/config.md
Expected format:
language: en # or "ru"
projects_path: ~/pmf-projects
Ask the user, one question at a time. Each question can be skipped (the default is used).
Question 1 — Language:
"What language should we work in for this skill — English or Russian? (default: English)"
English: skill communicates in English, references loaded from
references/en/. Russian / Русский: skill communicates in Russian, references loaded fromreferences/ru/.
Question 2 — Projects path:
"Where do you want PMF projects stored? (default:
~/pmf-projects/)"Examples:
~/pmf-projects/(default — home folder)~/Documents/PMF/D:/Work/PMF/(Windows)/Users/me/Projects/PMF/(macOS)The skill creates one subfolder per product inside this path.
Save the config:
After both answers (or skips → defaults), write ~/.claude/skills/pmf/config.md with the chosen values. Confirm to the user: "Config saved. Default language is <lang>, projects folder is <path>. You can change this anytime by editing the file."
Read it. Use those values for the rest of the session. All references must be loaded from references/<language>/.... All communication happens in the configured language.
ls <projects_path>/
mkdir)| Trigger phrase | Action | |---------------|--------| | "Do PMF for [new name]" / "new PMF for [X]" | Create project, go to Stage 0 (Setup) | | "Do PMF" (no name) | Ask for product name and slug | | "Continue PMF" (no name) | 0 projects → offer to create; 1 → continue; >1 → show list, ask which | | "PMF [name]" / "continue PMF [name]" | Find project [name] in the listing, continue from its current stage. If not found — show what exists, offer to create | | "What stage" / "show my PMF projects" / "PMF status" | Show table: project | stage | last updated | next action. Do not move forward, wait for user choice |
Check files in priority order (later stages first):
| File found | Stage |
|-------------|--------|
| metrics-dashboard.md | Stage 9 done (or Stage 10 if iteration-changelog.md exists) |
| interview-synthesis.md + narrative-v3.md | Stage 7 done → waiting for Stage 8 (MVP launch) or jump to Stage 9 |
| interviews/notes/*.md ≥ 1 file | Stage 6 (field in progress or done), ready for Stage 7 |
| interview-guide.md | Stage 5 done → waiting for Stage 6 (field) |
| assumptions-map.md | Stage 4 done, ready for Stage 5 |
| risk-prioritization.md + narrative-v2.md | Stage 3 done, ready for Stage 4 |
| market-research.md | Stage 2 done, ready for Stage 3 |
| narrative-v1.md | Stage 1 done, ready for Stage 2 |
| 00_setup.md | Stage 0 done, ready for Stage 1 |
| Folder empty or just created | Stage 0 (setup needed) |
Output format:
📍 PMF project: <product-slug>
Product type: <type> | Context: <org>
Current stage: Stage N — <name>
Ready artifacts: <list of .md files>
Last updated: <file date>
Next step: Stage N+1 — <name>
What it is: <one-line stage goal>
Artifact: <filename>
Move on to Stage N+1? Or go back to stage X?
After the user agrees — move to the chosen stage.
When it runs: auto-start found an empty folder or an explicit "new PMF for X." If 00_setup.md already exists in the folder — Stage 0 is skipped.
Goal: collect basic product and team context before working on the hypothesis. Short stage (10–20 minutes).
What is collected:
Artifact: 00_setup.md in the project folder.
The Pre-Flight Check happens HERE, not in Stage 1. It is about the team, not the product. Stage 1 will read the finished results from 00_setup.md and copy them into the narrative.
Detailed logic, the 00_setup.md template, quality gates, common pitfalls: references/<lang>/stage-0-setup.md.
| # | Stage | Goal | Artifact |
|---|--------|------|----------|
| 0 | Setup | Product context (type, org, team) | 00_setup.md |
| 1 | Hypothesis | Hypothesis across 7 dimensions + confidence scores | narrative-v1.md |
| 2 | Market research | Analogs (successes) + antilogs (failures) per dimension | market-research.md |
| 3 | Synthesis | Risk scoring + cross-fit + narrative V2 | risk-prioritization.md, narrative-v2.md |
| 4 | Validate (DVF) | 9 assumptions from the riskiest dimension + 2×2 map + experiment | assumptions-map.md, experiment-brief.md |
| 5 | Interview prep | Guide for in-depth interviews | interview-guide.md |
| 6 | [Field] | Outside the skill. The user runs 15–20 interviews. | interviews/notes/*.md |
| 7 | Interview synthesis | Patterns from notes → narrative V3 | interview-synthesis.md, narrative-v3.md |
| 8 | [MVP launch] | Outside the skill. The user launches the MVP. | — |
| 9 | Metrics | Sean Ellis + retention cohorts + Levels of PMF | metrics-dashboard.md |
| 10 | Iterate | Decision: continue / iterate / pivot | iteration-changelog.md |
For the stage-to-stage transition map, see references/<lang>/pipeline-overview.md.
Goal: turn the product idea into a structured hypothesis across 7 PMF dimensions with honest confidence scores.
7 dimensions (detail — references/<lang>/7-dimensions.md):
Before dimensions: Team Pre-Flight Check — 3 questions (references/<lang>/stage-1-hypothesis.md).
After dimensions: confidence assessment 1–10 for each + identification of the riskiest.
Artifact: narrative-v1.md from the template references/<lang>/template-narrative.md (structured) or references/<lang>/template-narrative-prose.md (prose, for stakeholders).
Detailed stage logic: references/<lang>/stage-1-hypothesis.md.
Goal: find analogs (successful companies validating the dimension) and antilogs (known failures on the dimension) for each of the 7 dimensions.
Method: sequentially via Exa (preferred) or WebSearch (fallback). Per dimension — 3-5 analogs and 2-3 antilogs. Total ~14-21 searches.
Adaptive threshold:
⛔ Do NOT use the Agent tool / subagents. Search is done by direct calls to mcp__exa__web_search_exa or WebSearch in the main session. This is a hard rule.
Artifact: market-research.md from the template references/<lang>/template-market-research.md.
If context overflows: split into 2 passes (dim 1-4 in one session, dim 5-7 in the next). This is normal for a months-long cycle.
Detailed logic and search strategies per dimension: references/<lang>/stage-2-research.md.
Goal: condense the research into risk-prioritization, identify the riskiest dimension, update the narrative to V2.
Risk scoring formula:
Risk Score = (10 - Evidence Score) × Failure Impact
Failure Impact defaults (can be recalibrated for the specific product):
| Dimension | Default Impact | |-----------|---------------| | Problem to Solve | 4 (Critical) | | Target Audience | 3 (High) | | Value Proposition | 2 (Medium) | | Competitive Advantage | 2 (Medium) | | Growth Strategy | 3 (High) | | Business Model | 4 (Critical) | | Timing / Why Now | 3 (High) |
Cross-fit analysis (mandatory):
Artifacts:
risk-prioritization.md (from the template references/<lang>/template-risk-prioritization.md)narrative-v2.md (an update of V1 based on research data, with an explicit version history changelog)Decision tree after synthesis:
Detailed logic: references/<lang>/stage-3-synthesis.md.
Goal: take the riskiest dimension, decompose it into 9 assumptions across DVF (Desirability × Viability × Feasibility), prioritize via a 2×2 (importance × evidence), and design an experiment for the riskiest assumption.
DVF categories (detail — references/<lang>/dvf-framework.md):
Assumption format: "I believe..." 9 of them (3 per category).
Regulatory sub-check: if product type = AI / fintech / healthtech → automatically add 1-2 regulatory assumptions to Feasibility.
2×2 map: importance (high/low) × evidence (strong/weak). The riskiest = high importance + weak evidence.
Experiment brief for the risk-assumption:
Artifacts:
assumptions-map.md (9 assumptions + 2×2)experiment-brief.md (for the risk-assumption)Detailed logic: references/<lang>/stage-4-validate.md.
Goal: prepare the guide for in-depth interviews on the 2-3 riskiest dimensions from risk-prioritization.
Guide structure:
Question rules:
Quantity: at least 15-20 interviews, saturation usually at 12-20.
Artifacts:
interview-guide.mdinterviews/note-template.md (template for one note for the user)Detailed logic: references/<lang>/stage-5-interview-prep.md.
This is a waiting state. When resumed at this stage, the skill says:
📍 Stage 6 — field (interviews)
Guide ready: interview-guide.md
Notes collected: <count> in interviews/notes/
What's new? Ready to move to synthesis (Stage 7)?
- How many interviews have you done in total?
- Are there obvious patterns already?
- When are you planning to finish the field?
The skill does not try to conduct interviews. It only prepares and then processes the results.
With ≥ 1 note in interviews/notes/ — moving to Stage 7 is possible (though 15+ is optimal).
Goal: read all interview notes, extract patterns per dimension, update confidence scores, evolve the narrative to V3.
Process:
interviews/notes/ (not in a batch — one at a time, to avoid mixing respondents)Artifacts:
interview-synthesis.md (from the template references/<lang>/template-interview-synthesis.md)narrative-v3.md (an update of V2 based on field data)Loop detection: if confidence dropped between V2 and V3 → flag + recommendation (return to Stage 4 for deeper validation, or to Stage 1 to revisit the hypothesis).
Detailed logic: references/<lang>/stage-7-interview-synthesis.md.
A waiting state. The skill says:
📍 Stage 8 — MVP launch
narrative-v3 is ready, the hypothesis is validated.
When you are ready:
- Launch the MVP to a minimally viable audience
- Collect the first ~40 active users
- Come back for Stage 9 (metrics)
What do you want to discuss about the launch?
The skill is only useful here as a sounding board — it does not try to "launch the MVP."
Goal: set up post-launch PMF measurement through 3 instruments.
Sean Ellis Survey (references/<lang>/sean-ellis-survey.md):
Retention Cohorts:
First Round Levels of PMF (references/<lang>/levels-of-pmf.md):
Artifact: metrics-dashboard.md (from the template references/<lang>/template-metrics-dashboard.md)
Flow: the skill creates the template → the user collects data over weeks → comes back → the skill interprets and recommends Stage 10.
Detailed logic: references/<lang>/stage-9-metrics.md.
Goal: based on the metrics, make a decision and lock it in.
Decision tree:
Artifact: iteration-changelog.md — what changes, why, which stage we return to.
After the changelog is written, auto-start will determine the stage again from the new artifacts.
Narrative versioning:
Confidence can decrease. Do not inflate. If the data contradicts the hypothesis — note it honestly.
Loop detection: if the confidence on some dimension dropped in the new version → flag. Possible actions: more validation, return to research, or pivot.
Going back. The user can say "go back to stage X" at any time — the skill switches. Old artifacts are not deleted. Example: after Stage 4 you decide more research is needed → return to Stage 2 → new market-research-v2.md (not overwrite).
Between sessions: the PMF cycle is months. On every resume the skill re-reads auto-start and does not trust "memory" of the previous session.
Before moving to the next stage, verify:
| Mistake | How to avoid | |--------|--------------| | Solution-framed problem ("our product gives X") | Problem = what the user is trying to achieve, what gets in the way. Do not mention the product. | | Audience too broad ("all women") | 2-3 defining attributes. Now segment vs Future segments. | | Features instead of benefits in value prop | Benefit first (what the user gets), then how (the feature) | | Overconfidence in V1 | At stage 1, confidence is usually 4-6/10. 9-10 in V1 is a red flag. | | Missing "why now" | Timing is not "we feel the time has come." It is a concrete change in technology, behavior, or regulation. | | 7 dimensions = "let's do well" | The goal is to find WEAK spots, not validate everything. The riskiest dimension matters more than the rest. | | Wanting to jump straight to Stage 9 | Without Stages 1-7, metrics mean nothing. Sean Ellis on a random audience gives a random result. | | Comparing with old analogs without context | An analog from 2010 ≠ market 2026. Account for what changed. | | Sean Ellis on fewer than 40 responses | Statistically meaningless. Wait. | | Sean Ellis on a newsletter list, not active users | Active = actually used the product ≥ 1 time in the last 2 weeks. |
All references live under references/<lang>/..., where <lang> is en or ru (chosen at first run, stored in config).
Pipeline map:
pipeline-overview.md — state machine, transitions between stagesStage logic (read on the corresponding stage):
stage-0-setup.mdstage-1-hypothesis.mdstage-2-research.mdstage-3-synthesis.mdstage-4-validate.mdstage-5-interview-prep.mdstage-7-interview-synthesis.mdstage-9-metrics.mdMethodology (read when needed — reference manuals):
7-dimensions.md — full description of the 7 PMF dimensions + what good looks like7-powers.md — Hamilton Helmer competitive advantagedvf-framework.md — David Bland Desirability/Viability/Feasibilitysean-ellis-survey.md — 40% threshold, distributionlevels-of-pmf.md — First Round 4 levelsnarrative-writing-guide.md — how to make problem visceralArtifact templates (load at the relevant stage):
template-narrative.md — structured narrative with 7 dimensions + validation tabletemplate-narrative-prose.md — prose for stakeholderstemplate-market-research.md — market research synthesistemplate-risk-prioritization.md — risk scoring + cross-fittemplate-interview-guide.md — interview guidetemplate-interview-synthesis.md — interview synthesistemplate-metrics-dashboard.md — metrics dashboardtemplate-interview-note.md — one interview notetesting
Use when choosing a narrative strategy before writing any text — articles, pitches, essays, reports, personal posts. Also use mid-writing to check tone, get next-block guidance, or shift narrative. Triggers: «writing guru», «подбери нарратив», «какой нарратив выбрать», «нарративная стратегия», «narrative strategy», «guru, проверь фрагмент», «guru, что дальше», «guru, хочу сменить тональность».
development
Generate self-contained HTML pages that visually explain systems, data stories, investigations, editorial workflows, and code changes. Use when the user asks for diagrams, architecture views, visual diffs, data tables, timelines, source maps, or any structured visualization that would be painful to read as terminal output. Also activates for tables with 4+ rows or 3+ columns. Adapted from nicobailon/visual-explainer with journalism, newsroom, and academic design sensibilities.
development
Run a full UX audit on any website: Nielsen heuristics, conversion, content, technical quality, information architecture. Produces a prioritized report with evidence-based findings and actionable recommendations. Use when asked to review a site, check a landing page, find UX problems, evaluate usability, assess conversion, or anything like "what's wrong with this site", "review the website", "audit UX", "check the forms", "why isn't the site converting".
development
Triages findings from Telegram, articles, posts, YouTube videos — explains the gist in plain language, maps to user's current projects, and recommends an action. Use this skill when the user shares a post, link (GitHub, website, YouTube), screenshot, or file (.md, .txt) and wants to understand if it's useful. Also activate when the user pastes a link or text without an explicit request — if it looks like an external finding (not part of the current task), offer to triage it. Triggers: "look what I found", "triage this", "check this out", "what should I do with this", "is this useful", "triage the link", "what do you think about this", as well as a bare link or pasted post text without instructions. Second mode: "review my ideas", "what's in the ideas folder" — review saved ideas.