---
name: customer-discovery
description: Orchestrator — detect pre-product vs product-exists mode, bootstrap ICP candidates, recommend customer-discovery frameworks, synthesize outputs into unified ICP research
type: research
version: v1.2
argument-hint: "[optional: \"discovery\" | \"validate\" | \"--synthesize\" | concept/idea, spec file path]"
invocation: orchestrator
interview_depth: full
visual_tier: visual
---

## Pack Availability Guard

Before telling the user to run a skill from another project-local pack, check `.agents/project.json.enabled_packs`. If the target pack is not enabled, recommend `/pack install <pack>` inside Claude Code, or `npx skillpacks install <pack>` from the project shell, instead of the target skill. After install, tell Claude users to run `/reload-skills`, then `/clear` or restart if the skill remains invisible. Global skills are always valid. Skills from this same pack are valid because the current skill is already running from that pack.

# Customer Discovery — Orchestrator

This is an **orchestrator skill** using the parent router delegation pattern. It detects context, bootstraps ICP candidates, recommends applicable customer-discovery frameworks, and synthesizes their outputs into unified ICP research. Individual frameworks live as child skills under `frameworks/`.

Available frameworks:

| Framework | Slug | Creator | Lens |
|-----------|------|---------|------|
| W3 Hypothesis | `w3-hypothesis` | Schwartzfarb | WHO/WHAT/WHY hypothesis generation + disproval |
| JTBD Needs Analysis | `jtbd-needs` | Ulwick / Christensen | Needs-based segmentation via jobs and outcomes |
| Four Forces | `four-forces` | Moesta | Push/Pull/Anxiety/Habit switching moment analysis |
| Five Rings of Buying Insight | `five-rings` | Revella | Decision psychology and buyer journey |
| Seven Dimensions | `seven-dimensions` | Lincoln Murphy | Ready/Willing/Able/Success/Acquisition/Ascension/Advocacy scoring |
| PMF Engine | `pmf-engine` | Vohra / Supan | Empirical ICP from existing user data (Sean Ellis test + HXC) |

## Report-First Approval Gate

Default to scope-first approval: before synthesized research, inspect only enough repository, user, and source context to propose research scope, source plan, assumptions, output paths, and approval questions in a `review` alignment page plus a concise conversation summary.

Do not perform synthesized research, rank candidates, make recommendations, or write working packets or canonical deliverables until final compiled YAML approves the research scope. Minimal pre-approval discovery may identify available files, source categories, and open questions; label it as scope evidence, not findings.

After approved research-scope YAML, perform the research and write only the non-canonical working packet defined in the staged workflow. Then update the `review` alignment page with findings and stop again for feedback-only YAML or final compiled YAML artifact approval before creating or updating canonical research, spec, or task files.

Do not include `Recommended next skill`, `Recommended next command`, or downstream routing language. The approval request itself is the next action. Only emit next-skill routing after the approved artifact has been written or updated.

## Staged Research Workflow

Use this staged workflow for synthesized research or report outputs that would create or update canonical research, spec, or task files.

1. **Stage 1 - Scope discovery and approval.** Inspect only enough repository, user, and source context to propose research scope, source plan, assumptions, output paths, and approval questions. Build the `review` HTML alignment page before synthesized research. The page must render the proposed scope, available source categories, known context, assumptions/confidence, proposed working-packet and canonical output paths, and research-scope approval gates. Stop for final compiled YAML approval of the research scope. Do not perform synthesized research, rank candidates, make recommendations, or write working packets, canonical research, spec, or task files in Stage 1.
2. **Stage 2 - Research and artifact review.** Only after approved research-scope YAML with no unresolved `needs-clarification`, unresolved `down` feedback, or other unresolved negative feedback, perform the synthesized research, run required source/code checks, and write only a non-canonical working packet: flat mode uses `research/_working/preliminary-<skill>-research.md`; product-path mode uses `research/{slug}/_working/preliminary-<skill>-research.md`. Replace `<skill>` with this skill's `name` value. Raw evidence or search logs may remain as supporting evidence where this skill already requires them, but synthesized deliverables stay in the working packet. Update the `review` HTML alignment page with the full preliminary packet, evidence matrix, assumptions/confidence register, source coverage gaps, proposed canonical file changes, and artifact approval gates. Stop for either feedback-only YAML or final compiled YAML. Feedback-only YAML revises the working packet and page, then remains in Stage 2.
3. **Stage 3 - Finalize approved artifacts.** Consume final compiled YAML for artifact approval only when it has no unresolved `needs-clarification`, unresolved `down` feedback, or other unresolved negative feedback. Apply approved edits first, archive the working packet to `docs/history/archive/YYYY-MM-DD/HHMMSS/<original-working-path>`, remove the active working packet, write the approved canonical artifacts to the unchanged output paths below, and convert the alignment page to `confirmed` with the approval record preserved.

Canonical output paths remain unchanged. Search logs and other supporting evidence remain allowed only where this skill's output contract already requires them.

## Evidence And Feedback Handling

Treat user feedback as input to evaluate, not as automatic ground truth.

- For factual, evidentiary, technical, or source-backed claims: verify against available evidence. If the user appears to misunderstand the evidence or states something factually incorrect, push back clearly and cite the evidence. Do not rewrite findings merely to agree.
- For taste, brand, positioning preference, risk appetite, prioritization, or other subjective judgment calls: weigh user feedback heavily and adapt the recommendation unless it conflicts with verified evidence.
- When feedback mixes facts and preference, separate them explicitly: correct the factual part, then incorporate the preference where it is a legitimate judgment call.
- When uncertain, say what is known, what is inferred, and what would change the conclusion.

## Prerequisites

- **Hard**: None — this is the first research skill in the AFPS chain.
- **Soft**: Read these if they exist:
  - `research/idea-brief.md` (or `research/{slug}/idea-brief.md`) — concept, hypotheses, ICP readiness notes
  - Specs, README/CLAUDE, and relevant source files for product context
  - `research/customer-feedback.md` — real customer evidence (triggers product-exists mode)

## Operational Modes

### Mode A: Candidate Bootstrap + Framework Selection (default first invocation)

Activated by: `/customer-discovery` or `/customer-discovery [concept/idea]` (no special flags).

### Mode B: Synthesis

Activated by: `/customer-discovery --synthesize`

### Mode C: Discovery Shortcut

Activated by: `/customer-discovery discovery`

### Mode D: Validation Shortcut

Activated by: `/customer-discovery validate`

---

## Process

### 0. Product-Path Scope Resolution

Resolve research scope by product path before using code or app structure as a hint:

1. If `$ARGUMENTS` names a non-archived `research/{slug}/` directory or a product-path ID whose `scope_path` points there, use that path. Treat `{slug}` as the product/app name, not the ICP, audience, or segment label.
2. If `$ARGUMENTS` names only `research/_archive/{slug}/` or a manifest entry with `status: archived` or legacy `status: abandoned`, stop and warn that the path is archived; do not write or update scoped outputs there.
3. Read `research/.progress.yaml` when present. Normalize legacy `active_path` to `active_paths` on read and write back `active_paths` on manifest updates. Treat legacy `abandoned` as `archived`; exclude `archived`, `abandoned`, `deferred`, `revisit_candidate`, `promoted`, and any `scope_path` under `research/_archive/` from active target selection.
4. If active product paths exist in the manifest, use those paths. If multiple active paths exist, ask which one to target unless this skill explicitly supports cross-path output.
5. If no active manifest target exists, list non-archived product directories under `research/`, excluding `research/_archive/` and dot directories. Auto-select only when exactly one exists; ask when multiple exist.
6. If no product directories exist, use flat `research/` single-product mode.
7. Detect monorepo/app/package structure only as a secondary hint. Suggest creating a missing `research/{slug}/` product path when code clearly exposes an app, but do not require code or monorepo detection before using `research/{slug}/`.

When product path `{slug}` is active, read and write research under `research/{slug}/`, specs under `specs/{slug}/`, and treat top-level `research/*.md` files as flat-mode documents or cross-path summaries.

0b. **Product-path manifest**: Read `research/.progress.yaml` when present. Normalize `active_path` (singular legacy) to `active_paths` (plural list) when reading; treat legacy `abandoned` as `archived` and exclude archived/deferred/revisit/promoted paths plus `research/_archive/` scopes from active target selection.

### 1. Mode Detection

Detect **pre-product mode** (default) or **product-exists mode**:

**Pre-product mode** activates when:
- No production codebase with live users detected, AND
- No `research/customer-feedback.md` with post-launch customer evidence, AND
- `$ARGUMENTS` does not contain "product" or "validate"

Available frameworks in pre-product mode:
- `w3-hypothesis` (default) — Schwartzfarb WHO/WHAT/WHY hypothesis generation + disproval
- `jtbd-needs` (default) — Ulwick/Christensen needs-based segmentation via jobs and outcomes
- `four-forces` (default) — Moesta Push/Pull/Anxiety/Habit switching moment analysis
- `five-rings` (optional) — Revella decision psychology and buyer journey. Pre-check when idea brief indicates B2B model.
- `seven-dimensions` (optional) — Lincoln Murphy ICP scoring with post-sale dimensions
- `pmf-engine` (unavailable) — requires real user data; grayed out with explanation

**Product-exists mode** activates when:
- Production code or deployment exists, OR
- `research/customer-feedback.md` exists with real customer data, OR
- `$ARGUMENTS` contains "product" or "validate"

Available frameworks in product-exists mode:
- `pmf-engine` (default) — Vohra/Supan empirical ICP from existing user data
- `seven-dimensions` (default) — Lincoln Murphy structured scoring with post-sale dimensions
- `four-forces` (optional) — switching analysis grounded in real churn/adoption data
- `five-rings` (optional) — buying insight refresh with real buyer evidence
- `jtbd-needs` (optional) — job validation against actual usage
- `w3-hypothesis` (unavailable) — superseded by empirical data; grayed out with explanation

### 2. Load Context

- Read `$ARGUMENTS`: if file path, read it; if text, treat as concept; if empty, check for idea brief
- Read `research/{slug}/idea-brief.md` or `research/idea-brief.md` — treat as starting hypotheses, not settled truth
- Read CLAUDE.md, README for product context
- Read codebase (if it exists): package config, key source files, routes, data models
- Read existing `research/icp.md` if it exists (prior run — ask user if they want to refine or start fresh)
- Read any existing `research/customer-discovery-*.md` intermediate artifacts (from prior framework runs)

**Provisional product-path evidence.** When a referenced product path is not present in `research/.progress.yaml` (either absent entirely or not in `active_paths` or `product_paths[]`), do not treat it as a canonical active path. Before using it as source context, require an explicit provisional-path evidence reference: a `review-only-approved` alignment page that fully renders the proposed path's concept, brief, and manifest entry. If no such evidence exists, ask the user whether to proceed with the path as unverified context or to run `/idea-scope-brief` first.

### 3. Marketplace Side Preflight

Before identifying ICP candidates, resolve market-structure side coverage:

- Read any `Market Structure Handoff` or marketplace/platform/B2B2C/multi-sided notes from the idea brief, especially `## ICP Readiness`. Treat side names and value exchange as hypotheses from the idea-scope brief, not validated ICPs.
- If no idea brief exists, infer likely sides from `$ARGUMENTS`, README, specs, codebase context, or product description when the concept suggests a marketplace/platform/B2B2C/multi-sided model.
- During broad market research, validate or refute the marketplace/platform/B2B2C/multi-sided classification with evidence; log the evidence for or against each apparent side and value exchange.
- Before candidate generation, write a side-coverage note in the working packet that names material sides, buyer/customer/user distinctions, and any uncertain or unsupported side assumptions.
- Candidate generation must cover each material side or explicitly explain why a side is excluded, deferred, or not a customer side.

### 4. Candidate Bootstrapping

This step runs in Mode A only (and is skipped when `research/icp.md` already exists and user chooses to refine rather than start fresh).

**Broad market research** using WebSearch with **8–12 diverse query strategies**:

1. Direct persona searches — "who buys [category]", "[category] buyer persona"
2. Pain point searches — "[domain] biggest challenges", "[workflow] frustrations"
3. Market segment searches — "[category] market segments", "[category] by company size"
4. Trend searches — "[category] trends 2025 2026", "future of [domain]"
5. Competitor user searches — "[competitor] customers", "[competitor] case studies"
6. Forum/community searches — "[domain] reddit complaints", "[domain] community pain points"
7. Job posting searches — "[related role] job description responsibilities"
8. Industry report searches — "[category] market report", "[category] TAM"
9. Switching trigger searches — "why switch from [incumbent]", "[category] migration"
10. Adjacent market searches — "[related category] users", "[upstream/downstream] tools"
11. Geographic/regulatory searches — "[category] by region", "[domain] regulations by country"
12. Business model searches — "[category] business model", "[product] PLG vs sales-led"
13. WTP signal searches — "[category] pricing complaints", "[category] ROI", "[competitor] pricing reviews"
14. Named account searches (B2B) — "[competitor] customer list", "companies using [incumbent]"

**Classify the business model** into one or more of: B2B SaaS (PLG), B2B SaaS (SLG), B2C, B2C subscription, marketplace/platform, B2B2C, D2C, open-source/open-core, API/developer-first.

**Identify 2–5 ICP candidates.** For each, note:
- Who they are (role, company type, size)
- What pain evidence exists
- How accessible they are
- How much value we could deliver
- How strong the WTP signal is

Write candidates to `research/_working/preliminary-customer-discovery-research.md` (the working packet that subskills will read).

**Checkpoint — Present candidates to the user.** Show ICP candidates with pain evidence, accessibility signals, and value reasoning. Ask:
- "Do any of these surprise you? Is there a segment I'm missing?"
- "Any of these clearly wrong for your situation?"

Incorporate feedback before proceeding to framework selection.

### 5. Mode A — Framework Selection

Build an alignment page with:

1. **Mode explanation**: which mode was detected and why (evidence for detection)
2. **ICP candidates summary**: validated candidates from step 4 (or from existing `research/icp.md`)
3. **Available evidence summary**: what research exists and what's missing
4. **Multi-select framework section**: checkboxes for each available framework with:
   - Framework name, creator, and one-line description
   - Why it's recommended or optional for this context
   - Which ICP sections this framework primarily feeds (see synthesis mapping)
   - Pre-checked defaults based on detected mode (see mode detection above)
5. **Execution plan explanation**: selected frameworks will be written to `tasks/todo.md` for sequential `/exec` execution
6. **Approval gate**: framework selection confirmation

After user approval via compiled YAML (which includes `selected_frameworks` list):

Write selected frameworks as sequential steps in `tasks/todo.md`:

```markdown
## Customer Discovery Framework Execution

- [ ] Run `/customer-discovery/frameworks/w3-hypothesis` — Schwartzfarb W3 hypothesis
- [ ] Run `/customer-discovery/frameworks/jtbd-needs` — JTBD needs analysis
- [ ] Run `/customer-discovery/frameworks/four-forces` — Moesta four forces
- [ ] Synthesize: `/customer-discovery --synthesize` — Combine framework outputs into research/icp.md
```

Only include frameworks the user selected. Always append the synthesis step last.

Stop after writing `tasks/todo.md`. The user runs `/exec` to execute each framework sequentially.

### 6. Mode B — Synthesis (`/customer-discovery --synthesize`)

Read all intermediate framework outputs:
- `research/customer-discovery-w3-hypothesis.md`
- `research/customer-discovery-jtbd-needs.md`
- `research/customer-discovery-four-forces.md`
- `research/customer-discovery-five-rings.md`
- `research/customer-discovery-seven-dimensions.md`
- `research/customer-discovery-pmf-engine.md`

At least one must exist. If none exist, tell user to run framework selection first.

**Synthesis mapping** — how framework outputs merge into the canonical 9+1 section format:

| Canonical Section | Primary Source | Secondary Sources |
|---|---|---|
| Customer Profile | w3-hypothesis (WHO), pmf-engine (HXC) | seven-dimensions (Ready/Willing/Able) |
| User Profile(s) | w3-hypothesis (WHO detail), pmf-engine (daily users) | jtbd-needs (job performers) |
| Trigger Events | four-forces (Push), five-rings (Priority Initiative) | jtbd-needs (unmet outcomes) |
| Current State Journey | jtbd-needs (current job map) | four-forces (Habit) |
| Pain Map | jtbd-needs (underserved outcomes) | four-forces (Push intensity) |
| Current Alternatives (User Perspective) | four-forces (Habit, current solution language) | five-rings (Decision Criteria) |
| Market Sizing | Aggregated across frameworks | seven-dimensions (Acquisition Efficiency) |
| Stated Value Drivers | w3-hypothesis (WHAT/WHY), jtbd-needs (desired outcomes) | five-rings (Success Factors), pmf-engine (user language) |
| Customer ↔ User Dynamics | seven-dimensions (post-sale dimensions) | five-rings (Buyer's Journey) |
| Discovery & Evaluation Behavior | five-rings (all 5 rings) | four-forces (Active Looking stage) |

**Cross-ICP handling**: Each framework intermediate analyzes all ICP candidates. The synthesis merges per-candidate evidence across frameworks into the canonical sections, selects a primary ICP using seven-dimensions scoring (or value × accessibility matrix when seven-dimensions was not run), and populates "Additional ICPs" and "Cross-ICP Analysis" sections.

**Score & select primary ICP** using a **Value × Accessibility** scoring matrix:

Value score (how much we can help): pain severity/frequency, WTP quality, segment size, alignment with what's built.

Accessibility score (how easy to reach and convert): channel reachability, sales cycle length, DMU complexity, champion availability, budget alignment.

**Cross-ICP analysis**: shared pains, conflicts/trade-offs, product line recommendations, build sequence, discovery & evaluation comparison.

Convert secondary ICPs and product-line recommendations into `research/.progress.yaml` `product_paths[]` entries when they imply a different product surface. Keep primary ICP in `active_paths`. Mark non-selected paths `status: deferred` or `status: revisit_candidate`.

**Evidence matrix**: Each claim in the synthesized output maps back to which framework(s) produced it and at what confidence level.

Build alignment page for synthesis approval with:
- Full proposed `research/icp.md` content
- Evidence matrix combining all framework sources
- Confidence/assumption register
- Cross-ICP analysis with scoring matrix
- Proposed file changes gate
- Approval gate

After approval: write `research/icp.md` and `research/icp-search-log.md`, then emit next-step routing.

### 7. Mode C — Discovery Shortcut (`/customer-discovery discovery`)

Pre-product shortcut. Build an alignment page for the shortcut execution plan with:

1. **Shortcut explanation**: discovery sprint selected — three core pre-product frameworks
2. **Evidence readiness**: available context and any caveats
3. **Proposed execution plan**: the exact `tasks/todo.md` queue shown below
4. **Approval gate**: require final compiled YAML approval before writing `tasks/todo.md`

After user approval via final compiled YAML, write this execution plan to `tasks/todo.md`:

```markdown
## Customer Discovery Framework Execution

- [ ] Run `/customer-discovery/frameworks/w3-hypothesis` — Schwartzfarb W3 hypothesis
- [ ] Run `/customer-discovery/frameworks/jtbd-needs` — JTBD needs analysis
- [ ] Run `/customer-discovery/frameworks/four-forces` — Moesta four forces
- [ ] Synthesize: `/customer-discovery --synthesize` — Write research/icp.md
```

Stop — user runs `/exec`.

### 8. Mode D — Validation Shortcut (`/customer-discovery validate`)

Product-exists shortcut. Build an alignment page for the shortcut execution plan with:

1. **Shortcut explanation**: validation sprint selected — empirical ICP from existing users
2. **Evidence readiness**: available product/customer evidence and any caveats
3. **Proposed execution plan**: the exact `tasks/todo.md` queue shown below
4. **Approval gate**: require final compiled YAML approval before writing `tasks/todo.md`

After user approval via final compiled YAML, write this execution plan to `tasks/todo.md`:

```markdown
## Customer Discovery Framework Execution

- [ ] Run `/customer-discovery/frameworks/pmf-engine` — Vohra PMF Engine + HXC
- [ ] Run `/customer-discovery/frameworks/seven-dimensions` — Lincoln Murphy scoring
- [ ] Synthesize: `/customer-discovery --synthesize` — Write research/icp.md
```

Stop — user runs `/exec`.

### 9. Next Steps (after synthesis only)

Before writing, check which files exist to populate the `## Next Steps` section contextually. Include 3–5 applicable items with a "Recommended + Other options" framing — the first matching condition becomes the **Recommended** item, remaining items become **Other options**:

- ALWAYS: `/competitive-analysis` — Research competitors and market gaps for this ICP
- IF no `specs/` directory or it's empty: `/competitive-analysis` — Map the competitive landscape for this ICP's market
- IF `specs/` exist but no `research/journey-map.md`: check `.agents/project.json.enabled_packs` for `customer-lifecycle` — if not enabled, recommend `/pack install customer-lifecycle` inside Claude Code, or `npx skillpacks install customer-lifecycle` from the project shell; if enabled, recommend `/journey-map`
- IF codebase exists: check `.agents/project.json.enabled_packs` for `business-ops` — if not enabled, recommend `/pack install business-ops` inside Claude Code, or `npx skillpacks install business-ops` from the project shell; if enabled, recommend `/mvp-gap`
- IF `research/competitive-analysis.md` exists: check `.agents/project.json.enabled_packs` for `product-design` — if not enabled, recommend `/pack install product-design` inside Claude Code, or `npx skillpacks install product-design` from the project shell; if enabled, recommend `/brainstorm`

**Impact-aware adjustments:**
- IF downstream impact is **Major**: prepend `/reconcile-research — [N] conflicts found in downstream docs` as the first item
- IF downstream impact is **Minor**: annotate relevant skill suggestions with "(stale — [brief description])"

### 10. Downstream Impact Check

After writing, check for downstream research documents that may be affected. Only check documents that exist on disk.

**Downstream documents to check** (use `{slug}/` prefix when product-path scope is active):
- `research/competitive-analysis.md`
- `research/journey-map.md`
- `research/metrics.md`
- `research/gtm.md`
- `research/monetization.md`
- `research/enterprise-icp.md`
- `research/customer-feedback.md`

For each existing downstream document:
1. Read it — focus on `> Based on:` header, `## Summary`, and sections that reference concepts this skill just defined or changed
2. Identify specific conflicts: claims, assumptions, or references that contradict what was just decided
3. Note each conflict: downstream file, section, the stale claim (quote it), and what it should now say

**Classify the impact**:
- **None**: No downstream documents exist, or no conflicts found. Skip display entirely.
- **Minor** (1–2 small conflicts): Display conflicts to user inline.
- **Major** (3+ conflicts OR a foundational assumption changed): Display conflicts and strongly recommend `/reconcile-research`.

## Output

### Mode A output: `tasks/todo.md` update + `research/_working/preliminary-customer-discovery-research.md`

Framework execution steps with validated ICP candidates in working packet.

### Mode B output: `research/icp.md` (or `research/{slug}/icp.md`)

```markdown
# ICP: [Primary ICP Name]

> Primary ICP selected from [N] candidates. See Additional ICPs and Cross-ICP Analysis below.
> Search log: research/icp-search-log.md
> Frameworks applied: [list of frameworks used]
> Date: [current date]

## Customer Profile
[Buyer persona, budget authority, discovery channels]

### Geographic Focus
[Include only if the product has regulatory, language, or market-specific constraints.
 Initial target geography/region, why that region first, expansion sequence.]

### Named Accounts
[Include for B2B ICPs. 5–10 real companies that fit this profile.
 For each: company name, approximate size, industry, and why they fit.]

## User Profile(s)
[Daily user persona(s), technical sophistication, goals, frustrations]

## Trigger Events
[What causes them to start looking NOW — ranked by frequency and urgency.
 Job changes, growth milestones, compliance deadlines, tool sunsets, contract renewals, etc.]

## Current State Journey
[Step-by-step workflow without our product]

## Pain Map
[Where the current state breaks down — severity, frequency]

## Current Alternatives (User Perspective)
[What users say they currently use or have tried — tool/process names in user language, not a competitive breakdown]

## Market Sizing
[TAM / SAM / SOM with methodology and confidence level.
 Bottom-up: number of target companies × estimated deal size.
 Top-down: industry reports, competitor revenue signals.]

## Stated Value Drivers
[What customers say matters — their language for the value they need, the "aha moment" as they describe it]

### Willingness-to-Pay Signals
[Evidence only: current paid alternatives, current spend or time-cost proxy, budget owner/context, switching-cost tolerance,
economic urgency, procurement or subscription constraints, and pricing sensitivity cues.
Do not recommend pricing or packaging; route raw signals to monetization.]

## Customer ↔ User Dynamics
[Post-purchase buyer-user relationship: provisioning, onboarding, admin vs end-user dynamics.
 For B2B, the detailed buying process and DMU live in Discovery & Evaluation Behavior below;
 this section focuses on the post-purchase relationship.]

## Discovery & Evaluation Behavior

### How They Find Solutions
[Where this persona searches — communities, review sites, peer recommendations, Google, events]
[Who they ask — colleagues, online communities, consultants, analysts]

### How They Evaluate
[What they compare — features, pricing, reviews, case studies, free trials]
[Decision-making process — solo, team, committee; timeline]

### How They Choose
[What tips the decision — peer recommendation, trial experience, brand trust, integration fit]
[Deal-breakers and must-haves from the user's perspective]

## Additional ICPs

### [ICP 2 Name]
#### Customer Profile
[Include Geographic Focus, Named Accounts, and Business Model & Go-to-Market Motion sub-sections where applicable]
...
#### User Profile(s)
...
#### Trigger Events
...
#### Current State Journey
...
#### Pain Map
...
#### Current Alternatives (User Perspective)
...
#### Market Sizing
...
#### Stated Value Drivers
...
#### Willingness-to-Pay Signals
...
#### Customer ↔ User Dynamics
...
#### Discovery & Evaluation Behavior
[Condensed: how they find, evaluate, and choose solutions — include only sub-sections relevant to this ICP]

### [ICP 3 Name]
...

## Cross-ICP Analysis

### Prioritization Matrix
| ICP | Value Score | Accessibility Score | Combined | Rationale |
|-----|------------|-------------------|----------|-----------|
| ... | | | | |

Scoring rationale must explicitly distinguish pain intensity from WTP quality.

### Shared Pain Points
[Pains that appear across multiple ICPs]

### Conflicts & Trade-offs
[Where serving one ICP would hurt another]

### Product Line Recommendations
[How different ICPs could map to tiers, plans, or product variants]

### Recommended Build Sequence
[Which ICP to target first → second → third, with reasoning]

### Discovery & Evaluation Comparison
[How discovery and evaluation behavior differs across ICPs]

### Evidence Matrix
| Claim | Framework Source(s) | Evidence | Confidence |
|-------|-------------------|----------|------------|
| [claim] | W3 / JTBD / Four Forces / Five Rings / Seven Dimensions / PMF Engine | [source] | Strong / Moderate / Hypothesized |

<!-- Include this section only when downstream impact is Minor or Major. Omit entirely for None. -->
## Downstream Impact

> Checked: [list of downstream docs checked]
> Impact: Minor | Major

### Conflicts Found

1. **research/[file].md** — [Section Name]
   - **Stale**: "[exact quote from downstream doc]"
   - **Now**: [what this skill's output says instead]

[For Major only:]
> **Recommended action**: Run `/reconcile-research` to audit and fix all affected downstream documents.

## Next Steps

**Recommended:** [first matching item from step 9]

**Other options:**
- [remaining conditional items from step 9 — only include items whose conditions are met]

## Signals for Downstream Research

> Raw signals captured during research. These are unvalidated observations —
> use the linked skill to verify, validate, and explore alternatives.

### → /competitive-analysis
- [signal]: competitor names mentioned by users
- [signal]: tools users compare or say they evaluated
- [signal]: stated alternatives and what users say about them

### → /positioning
- [signal]: value language users use to describe what matters
- [signal]: differentiation claims users respond to
- [signal]: how users describe the problem in their own words

### → /monetization
- [signal]: budget ownership/context and willingness-to-pay evidence
- [signal]: current paid alternatives, spend proxies, or time-cost proxies
- [signal]: switching-cost tolerance and cost-of-inaction language
- [signal]: pricing sensitivity cues from user conversations

### → /gtm
- [signal]: where users say they found or heard about solutions
- [signal]: community or channel mentions during research
- [signal]: peer recommendation patterns observed
```

### `research/icp-search-log.md`

Raw research log containing:
- Every WebSearch query executed and why (from orchestrator bootstrapping and each framework subskill)
- Key findings from each search (with source attribution)
- Evidence that supported or contradicted each ICP candidate
- Marketplace Side Preflight validation/refutation plus side coverage/exclusion rationale
- The scoring rationale for primary ICP selection
- Any data gaps or areas where research was inconclusive

### `research/.progress.yaml`

Product-path manifest created or updated when secondary ICPs, Cross-ICP Analysis, or product-line recommendations create parked or promotable paths.

### Product-Path Output Convention

When multiple active product paths exist or the user asks for cross-path ICP output, write:
- `research/{slug}/icp.md` — full 9-section ICP per product path
- `research/{slug}/icp-search-log.md` — search log per product path
- `research/icp.md` — unified cross-path summary with top-level prioritization

## Task Classification

When this skill produces follow-up work, file it by execution semantics:

- Immediately actionable implementation or documentation work goes in `tasks/todo.md`.
- Human-only external actions tied to automated steps go in `tasks/manual-todo.md` with `_(blocks: Step N.X)_` or `_(after: Step N.X)_`.
- One-time condition-gated records go in `tasks/record-todo.md` with source, condition, non-blocking reason, evidence, and promotion rule.
- Cadence-based reviews go in `tasks/recurring-todo.md` with cadence, owner/agent, next due, evidence path, and escalation conditions.

## Constraints

- **Parent does not execute frameworks.** It bootstraps candidates, selects frameworks, and synthesizes. `/exec` handles framework execution.
- **Synthesis requires at least one framework output.** Do not synthesize from zero evidence.
- **Mode detection is evidence-based.** Do not override mode detection without user confirmation.
- **Stay in problem space.** Do not propose features, architecture, UI, or technical solutions. That is `/spec-interview`'s job.
- **Evidence-based.** Every claim in the ICP document must trace back to research evidence. Do not fabricate personas from assumptions.
- **In existing-project mode**, note misalignments between what's built and what the ICP research suggests, but do not prescribe fixes — that's `/mvp-gap`'s job.
- **Primary ICP must use the canonical 9 top-level `##` sections** — downstream skills (`/spec-interview`, `/mvp-gap`, `/roadmap`, `/journey-map`, `/competitive-analysis`) parse these exact headers.
- **Section 10 captures behavioural signals only** — how personas find, evaluate, and choose solutions. Do not include GTM strategy, channel analysis, budget authority, procurement process, or pricing expectations — those belong in downstream skills.
- **WTP is evidence, not pricing strategy.** Capture budget ownership, paid alternatives, current spend/time-cost proxies, switching-cost tolerance, economic urgency, and price sensitivity cues only as segment-fit and urgency evidence. Do not convert WTP evidence into pricing recommendations; route raw signals to `/monetization`.
- **Do not overwrite existing `research/icp.md`** without asking the user first.
- **Minimum research depth for bootstrapping**: at least 8 WebSearch queries before identifying ICP candidates.
- **Present before writing.** Never write output files until findings have been presented to the user and validated.

## Interview Protocol

**Step 1 — Gather context.** Read `.agents/project.json`, README, CLAUDE.md, existing research and specs, git history, and any argument-provided context. Build an internal evidence base before asking questions.

**Step 2 — Assumptions manifest.** Present 3–7 assumptions about the user's situation, goals, and constraints. Tag each with source (`[from prompt]`, `[from repo]`, `[from research]`, `[inferred]`). Ask the user to confirm, correct, or flag before proceeding.

**Step 3 — Focused interview.** Ask 1–3 questions per turn via `AskUserQuestion`. Research and recommend by default — present options with a recommended default. Continue until all areas are covered or the user signals enough.

**Step 4 — Coverage checkpoint.** Present a summary of everything established. Ask the user to confirm completeness before building the alignment page.

## Alignment Page

When this skill produces durable deliverables (research, specs, plans, reports, prototypes, or any document output), build a full-depth HTML alignment page following `ALIGNMENT-PAGE.md` in this skill's directory. Output: `alignment/customer-discovery-{topic}.html`.

## Default Shipping Contract

Follow the shared shipping contract convention in CLAUDE.md.
