From market-validation
Validate whether there is a real market for a product idea, end to end: scope questions → a multi-angle web-research workflow with mandatory live-URL verification → a cited evidence pack → a Tufte HTML deck + PDF + PPTX → a build/integrate brief and an emitted workflow-atlas market map. Use when the user asks "is there a market for X", "validate demand for", "prove the market for", "should I build X", "market research / competitor + willingness-to-pay evidence for X", or wants a fundable evidence pack.
How this skill is triggered — by the user, by Claude, or both
Slash command
/market-validation:market-validationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Runs the proven pipeline that turns a product idea into a defensible, cited market-evidence pack plus
assets/build_deck.pyassets/deck.template.htmlassets/platatlas/brief.template.mdassets/platatlas/emit_atlas.pyassets/research-workflow.jsreferences/example-shiftmate/brief.mdreferences/example-shiftmate/deck-data.jsonreferences/verification-discipline.mdreferences/workflow-atlas-schema.mdtests/js/harness.mjstests/js/research-workflow.retry.test.mjstests/test_build_deck.pytests/test_emit_atlas.pyRuns the proven pipeline that turns a product idea into a defensible, cited market-evidence pack plus
shareable artifacts. Generalized from the ShiftMate run (see references/example-shiftmate/).
references/verification-discipline.md and follow it. Live-URL verification and the
counter-evidence angle are non-negotiable. Apply the same honesty to your own integration claims.Ask the user 3 questions with AskUserQuestion (one call, three questions):
Assemble a RunConfig: { product, oneLiner, customer, geography, date, scope } where scope is a 2-3
sentence paragraph (market definition + customer + geography + "prefer recent sources / current status as
of ").
You compose the research angle set (the script does NOT invent angles — spec R2):
pain, competitor, wtp, counter (counter-evidence).{ key, title, focus } with a concrete focus.Launch the bundled workflow:
Workflow({
scriptPath: "<skill-dir>/assets/research-workflow.js",
args: { config: RunConfig, angles: [ ...angleObjects ] }
})
It runs investigate → curate → live-URL verify → synthesize and returns
{ report, survivors[], competitors[], droppedCount }. (survivors = verified claims with quotes + URLs.)
deck-data.jsonFrom the workflow's survivors + competitors + report, assemble ONE deck-data.json (the single source
of truth). This report→deck-data.json step is a manual seam where run-to-run quality varies most — mirror
references/example-shiftmate/deck-data.json closely (assign each competitor a tier, number every source,
map every inline [n] ref to the sources list). Required blocks: meta,
verdict (with HIGH/MODERATE/LOW confidence), pain, categories (tiers), competitors (with a
category per the tiers), competitorKicker, wtp, global, counter (risks + gaps), sources
(numbered; every cited URL). Optional blocks — include only if the data exists: sizing (durable vs
frozen/ended bars), funding (events with date "YYYY-MM", amount, tier), homeowner/demand stats,
and process ({steps:[{label}]} — the workflow the product targets, for the atlas). Also keep the full
markdown evidence pack (the workflow's report) as the durable write-up.
<python-with-python-pptx> <skill-dir>/assets/build_deck.py deck-data.json --out <out-dir> --pdf
<slug>.html (always; self-contained Tufte deck, clickable citations, in-page Save-PDF /
Export-PPTX buttons), <slug>.pptx (if python-pptx importable, else PPTX_SKIPPED), and <slug>.pdf
(if --pdf and chromium present, else PDF_SKIPPED).~/.rebateops-viz-venv/bin/python, or create one
(python3 -m venv ~/.mv-venv && ~/.mv-venv/bin/pip install python-pptx). The HTML alone satisfies
"export to PDF/PPTX" via its buttons, so missing python-pptx/chromium is not fatal — report what was made.python3 <skill-dir>/assets/platatlas/emit_atlas.py deck-data.json <out-dir>/atlas
Produces nodes.json + flows.json for a repo's docs/workflows/. Describe these as "shape-valid;
end-to-end load UNTESTED" unless references/workflow-atlas-schema.md records a passed load round-trip
(spec R3). Do not claim the atlas "works in workflow-atlas today."assets/platatlas/brief.template.md from the evidence
pack — including the Project-2 spec stub (a new POST …/atlases/import endpoint so the map becomes
one-click). Project 2 is its own brainstorm → build cycle; this skill only emits the JSON + the stub.deck-data.json, the markdown evidence pack, <slug>.html (+ .pdf/.pptx if produced), atlas/nodes.json
atlas/flows.json, and the build/integrate brief. Surface them to the user (SendUserFile).assets/research-workflow.js was rewritten to read args.config/args.angles and to return
{ report, survivors[], competitors[], droppedCount }, but it has only ever executed in its earlier
hardcoded form. On the first run, confirm args.angles actually flows into the investigator prompts and
that the returned survivors/competitors match what Phase 2 consumes — before trusting the ~1.5M-token output.references/workflow-atlas-schema.md).
Do not tell the user it "works in workflow-atlas today."deck-data.json) is a manual seam. No code automates it; lean hard on the golden example.references/verification-discipline.md — the non-negotiable rules (read first).references/workflow-atlas-schema.md — the atlas output contract + the unproven load path.references/example-shiftmate/ — a full worked example (deck-data.json + brief.md) to mirror.python3 -m pytest <skill-dir>/tests -q — smoke-tests the deck generator (full + minimal data) and the
atlas emitter (shape + referential integrity). Run after editing build_deck.py or emit_atlas.py.node --test '<skill-dir>/tests/js/*.test.mjs' — exercises assets/research-workflow.js via a harness
(tests/js/harness.mjs) that replicates the Workflow runtime (wraps the script body in an async function
and injects stubbed agent/parallel/phase/log/args). Covers the investigator retry / looser-schema
fallback: a flaky angle (null-or-throw on the strict attempt) is recovered on retry, a permanently-failing
angle is logged as DROPPED by name (no silent cap), and the happy path makes no spurious retry/drop. Run
after editing the investigator section of research-workflow.js.Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub craigm26/founder-skills --plugin market-validation