From dudu
Idea-stage wedge selection. Maps the category (competitors, pricing, funding), then compares 2–5 candidate personas on pain, WTP, reachability, and segment size to recommend a wedge. Pre-product, secondary-research only.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dudu:idea-validationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Map the category, then compare candidate ICPs against it, and pick the strongest wedge. Read `lib/research-protocol.md` and `lib/playwright-auth.md` first. Budget: ~15 fetches for the market map + ~6–8 fetches per candidate, ~60 fetches total.
Map the category, then compare candidate ICPs against it, and pick the strongest wedge. Read lib/research-protocol.md and lib/playwright-auth.md first. Budget: ~15 fetches for the market map + ~6–8 fetches per candidate, ~60 fetches total.
dudu:customer-discovery). IS NOT a deep one-wedge rehearsal (that's dudu:market-problem). IS NOT a defensible TAM (that's dudu:market-sizing). IS NOT a deep competitor diligence on a chosen company (that's dudu:competitive-landscape) — the market layer here is category-shaping for wedge selection, not company-vs-company combat analysis.State these distinctions in the artifact every time. The point of this skill is which wedge in which category, not is there real demand — only real interviews settle that.
dudu:market-problem when the ICP input would otherwise be a guess.If the founder already has paying customers or strong customer-discovery signal, skip this and run dudu:market-problem directly.
Required (prompt if missing):
Optional:
Idempotency check. Artifact: deals/<slug>/idea-validation.md. Candidate profiles live under deals/<slug>/candidates/. The market map lives at deals/<slug>/market-map.md.
If deals/<slug>/idea-validation.md exists and --force was not passed, print "Artifact already exists at deals//idea-validation.md. Pass --force to overwrite." and stop.
Goal: understand the market the idea would enter, independent of which persona it targets. This is the category-shaping pass. Write deals/<slug>/market-map.md. Cap at ~15 fetches across:
Write market-map.md with these sections:
# Market map: <Category>
**Generated:** <ISO timestamp>
## Category boundary
[1–2 sentences: what's in scope, what's out. Name the category in the founder's language and in analyst language if they differ.]
## Direct competitors
| Product | Positioning | Pricing | Stage / last raise | Primary ICP | Source |
|---------|-------------|---------|--------------------|-------------|--------|
| ... | ... | ... | ... | ... | [link] |
## Indirect competitors / status quo
| Substitute | Why people use it today | Why it's inadequate (verbatim quotes if available) | Source |
|------------|--------------------------|----------------------------------------------------|--------|
| ... | ... | ... | [link] |
## Pricing benchmarks
- Low tier: $X/seat/mo or $X/yr — [product, link]
- Mid tier: ...
- Enterprise: ...
- **Pricing model dominant in this category:** freemium / seat / usage / services
- **Implication for WTP:** [one sentence]
## Funding and tailwinds (last 18 months)
[3–6 bullet points with citations: who raised, what they pitched, what stage]
## Structural shifts
[One paragraph with citations, or "no clear shift identified."]
## Category verdict
Pick one and justify in one sentence:
- **Empty** — no commercial precedent. New category bet.
- **Forming** — early funded entrants, no clear leader.
- **Contested** — multiple funded players, room for differentiation.
- **Saturated** — clear leader(s) own the category; differentiation must be sharp.
## Sources
- ...
The five source categories above are independent. Dispatch one worker subagent per category, all concurrently in a single turn. See lib/research-protocol.md § Parallelization for the cross-platform mapping (Claude Code: Agent with subagent_type="general-purpose"; Codex: spawn_agent with agent_type="worker" and multi_agent = true in config).
Group into 4 subagent batches (combine the two competitor categories so direct/indirect overlap is resolved in one place):
Each subagent prompt MUST include: the category name in both founder and analyst language, the deal's product description, the fetch cap for that batch, the citation and source-honesty rules from lib/research-protocol.md (pasted), and the required return shape (rows for the relevant market-map.md table or bullets for the relevant section, plus a Sources list).
In the main session: fill any Crunchbase gaps via Playwright (per lib/playwright-auth.md), pick the category verdict, and write market-map.md.
If candidates were supplied, write each to deals/<slug>/candidates/candidate-K.md using the profile template below. If not supplied, generate 3 candidates that span meaningfully different axes — e.g., different company size, different job-to-be-done, different industry — not three flavors of the same buyer.
Use market-map.md to inform candidate generation: candidates should target underserved or differently-served slices of the category, not the slice every direct competitor already owns.
Candidate profile template (candidates/candidate-K.md):
# Candidate <K>: <short label>
**Segment:** <industry / company size / role band>
**Buyer role:** <job title that signs the contract>
**User role:** <job title that uses the product daily — may be the same>
**Buying trigger:** <the moment that makes them shop>
**Why this candidate is plausible:** <one sentence>
**How this differs from the other candidates:** <one sentence — must be a real difference, not a synonym>
**Which competitors from the market map already serve this candidate:** <list, or "none identified">
**Which substitutes/status-quo from the market map this candidate uses today:** <list>
Hard rule: each candidate must differ from the others on at least one of {industry, company-size band, buyer role, buying trigger}. If two candidates collapse onto the same axis, merge them.
The category-level research from Step 1 is shared across candidates, so per-candidate work focuses on what's specific to this slice. For each candidate, spend up to ~6–8 fetches across:
Apply lib/research-protocol.md citation rules. If a dimension can't be sourced for a candidate, write "Not found in public sources" — never invent. Do not re-fetch category-level data already in market-map.md; cite it.
Candidates are independent. With 2 or more candidates, dispatch one worker subagent per candidate, all concurrently in a single turn. See lib/research-protocol.md § Parallelization for the cross-platform mapping (Claude Code: Agent with subagent_type="general-purpose"; Codex: spawn_agent with agent_type="worker" and multi_agent = true in config).
Each subagent prompt MUST include:
candidates/candidate-K.md contents) and the deal's one-line problem statement.market-map.md so the subagent can cite category facts without re-fetching them.lib/research-protocol.md (paste, don't reference). If a dimension can't be sourced, the subagent must write "Not found in public sources" — never invent.? with one-line evidence-anchored rationale citing a source), the 3 strongest verbatim evidence quotes for that candidate (each with link), and a Sources list.After all subagents return, in the main session:
market-map.md (it's the same for every candidate); merge with the subagent rubric scores from the four dimensions above. Proceed to Step 4.With a single candidate this skill does not apply — escalate to dudu:market-problem directly.
Score every candidate on the same seven dimensions, 1–5, with a one-line evidence-anchored rationale per score. Refuse to score without a citation; mark as ? if the evidence is missing and explain in the rationale.
| Dimension | What scores high (5) | What scores low (1) |
|---|---|---|
| Pain severity | Multiple verbatim complaints calling it urgent/critical/blocker | Pain only inferred from product marketing |
| Pain frequency | Daily/weekly recurring | Annual or one-off |
| WTP proxy | Segment already pays >$X for adjacent tools; explicit price quotes; category pricing supports venture economics | No comparable spending pattern; free tools dominate; category pricing is structurally low |
| Reachability | Public lists, identifiable channels, named communities | Diffuse, no clear way to find or contact 100 of them |
| Category proof | Funded startups + paying users in the broader category (from market map) | No commercial precedent; category is inert or dead |
| Competitive room for this candidate | No incumbent loudly owns this candidate's slice; room to land a wedge | A clear leader already serves this exact candidate well |
| Segment size | Reachable population large enough that a wedge of it sustains a startup | Too small to support a venture outcome |
Notes on the rubric:
market-map.md and is the same value for every candidate of a given idea. It's the "is anyone making money in this category at all?" check.? (insufficient evidence) is more honest than a guessed score. Multiple ?s on the same candidate is itself a finding: "we can't tell yet."Build the head-to-head matrix. Then write the comparison narrative: where do candidates agree, where do they diverge, and which dimensions carried the most weight? Explicitly call out where the market map made a candidate look better or worse than it would have looked in isolation.
Pick one of:
Confidence floor: if 3+ dimensions are ? for the lead candidate, confidence cannot exceed Low. Also: if the market map's category verdict is Empty and there is no candidate with concrete WTP evidence, confidence cannot exceed Low regardless of other scores.
# Idea validation: <Company>
**Deal:** <slug>
**Generated:** <ISO timestamp>
> ⚠️ Idea-stage analysis from secondary sources only. This skill picks *which wedge looks strongest on paper* — it does not validate that real customers will buy. Real signal comes from `dudu:customer-discovery`. Deep competitor combat analysis comes from `dudu:competitive-landscape`.
## Problem statement
> [One sentence the VC/founder gave us]
## Market map (summary)
Full map: `market-map.md`.
- **Category boundary:** [one line]
- **Category verdict:** Empty / Forming / Contested / Saturated
- **Direct competitors counted:** N (top 3: ..., ..., ...)
- **Pricing range observed:** $X–$Y (model: freemium / seat / usage / services)
- **Funding signal (last 18mo):** [one line — e.g., "4 Seed/A rounds totaling $X in this category" or "no funding activity found"]
- **Structural shift:** [one line, or "none identified"]
- **Implication for wedge selection:** [one sentence — e.g., "Saturated at enterprise, open at SMB" / "Empty category — burden of proof on demand evidence"]
## Candidates
| # | Segment | Buyer role | Buying trigger | Differs from others on |
|---|---------|------------|----------------|------------------------|
| 1 | ... | ... | ... | ... |
| 2 | ... | ... | ... | ... |
| 3 | ... | ... | ... | ... |
Full profiles: `candidates/candidate-1.md`, `candidates/candidate-2.md`, `candidates/candidate-3.md`.
## Comparison matrix
| Dimension | Candidate 1 | Candidate 2 | Candidate 3 |
|-----------|-------------|-------------|-------------|
| Pain severity | <1–5 or ?> — <evidence> | ... | ... |
| Pain frequency | ... | ... | ... |
| WTP proxy | ... | ... | ... |
| Reachability | ... | ... | ... |
| Category proof | <same value for all candidates — from market map> | <same> | <same> |
| Competitive room for this candidate | ... | ... | ... |
| Segment size | ... | ... | ... |
| **Composite** | <sum / mean, with `?` count> | ... | ... |
## Competitor overlap by candidate
| Direct competitor | Targets candidate 1? | Targets candidate 2? | Targets candidate 3? | Evidence |
|-------------------|----------------------|----------------------|----------------------|----------|
| ... | yes/no/partial | ... | ... | [link] |
[Use this to make the "Competitive room" scores defensible. A candidate with no competitor overlap rows is either greenfield or invisible — the narrative should say which.]
## Where candidates diverge
[2–4 dimensions where the candidates produced meaningfully different scores. These are the decision-driving dimensions — call them out.]
## Where candidates agree
[Any dimension where all candidates scored similarly. Often this means the dimension isn't decision-relevant for *this* idea; useful to retire from further analysis.]
## Strongest evidence per candidate
### Candidate 1
- [Verbatim quote or stat] — [link]
- [Verbatim quote or stat] — [link]
- [Verbatim quote or stat] — [link]
### Candidate 2
[same shape]
### Candidate 3
[same shape]
## Wedge recommendation
- **Verdict:** Lead candidate identified / Tie / No viable wedge yet
- **Lead (if any):** Candidate <K>
- **Confidence:** Low / Medium / High
- **Why:** [3 sentences anchored on the rubric]
- **What would change my mind:** [2–3 specific things that, if discovered, would flip the recommendation]
- **Recommended next step:** [Run `dudu:market-problem` against Candidate <K> / Run `dudu:competitive-landscape` for the lead candidate's slice / Run `dudu:customer-discovery prep` for Candidate <K> / Pivot the idea — see open questions]
## Open questions
[5–10 questions the next research step needs to answer. Each rooted in a `?` cell, a divergence call-out, or a gap in the market map — not generic.]
## Sources
- [Title](url) — which layer (market map / candidate K) and which dimension(s) it informed
- ...
deals/<slug>/manifest.json skills_completed["idea-validation"] to the current ISO-8601 UTC timestamp. Add the key if it doesn't exist; this skill is optional and not part of the six required by the dudu:diligence orchestrator.market-map.md.Next: dudu:market-problem (ICP = Candidate <K>).Two artifacts are designed to feed downstream skills:
market-map.md — the category landscape. Hand it to dudu:competitive-landscape as starting context so it doesn't re-discover the same competitors; that skill goes deeper on the chosen company's combat position.candidates/candidate-<K>.md — the lead candidate profile. Structured to be pasted directly as the ICP input for downstream skills:
dudu:market-problem — when prompted for ICP, supply the lead candidate; pass market-map.md as additional context to skip re-research of the category.dudu:market-sizing — the lead candidate's segment + buyer role + buying trigger are exactly the wedge-ICP shape that skill expects.dudu:customer-discovery prep — the lead candidate's segment characteristics seed the target list when persona profiles don't yet exist.npx claudepluginhub ying-kai-liao/dudu --plugin duduCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.