Use when the user has an idea for an app, tool, or feature and wants to be interviewed in depth first — answering structured clarifying questions until the requirements are fully pinned down — before it gets built end-to-end. Triggers - "ask me questions then build", "interview me about my idea", "help me spec this out and build it", vague ideas the user wants to shape interactively.
76
96%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No known issues
Interview the user relentlessly with structured questions until zero decision-changing ambiguity remains, then build the product end-to-end autonomously. The user's answers are LAW; internal judgment fills only the gaps the user explicitly delegates. Deliverables are files on disk plus a short chat summary.
Seed idea: the skill argument; if empty, the user's message.
If the request is not to build/create software, say so in one line and answer normally without this pipeline.
Goal: replace every assumption with the user's actual answer. Ask in rounds using the structured multiple-choice question tool (AskUserQuestion): up to 4 questions per round, each with 2–4 concrete options plus descriptions of their consequences. Put your recommended option first, labeled "(Recommended)".
01-intent.md's assumptions table.One git repo rooted at builds/<slug>/ (not just app/ — the interview transcript, plan, stories, ledger, and evidence are the proof-of-work and must share history with the code they prove):
builds/<slug>/
00-seed.txt # seed idea verbatim, written first
00-interview.md # every question asked + the user's answer, verbatim
01-intent.md # Step 1
02-plan.md # Step 2
03-stories.md # Step 3
04-ledger.md # Step 4 — live status board
evidence/ # Builder oracle runs, per story — COMMITTED (proof-of-work)
adversary/ # Adversary oracle re-runs + scratch — gitignored, never app/
app/ # the productSlug = kebab-case from the seed. Existing dir: same seed → resume from the ledger (and skip Step 0 if 00-interview.md is complete); different seed → append -2, -3, …
01-intent.mdCompile the interview into a decisive brief (≤ 1 page, no options, no TBD). Mark each line's provenance: [user] for answered, [delegated] for Council-ruled.
| # | Assumption | Material? | — delegated decisions only.02-plan.mdapp/ layout.| ID | Task | Files | Definition of Done | — every DoD testable, no "etc."03-stories.md| ID | Title | Implements | Deps | Increment | Status |. Increment 1 = walking skeleton. Every plan task appears in some story's Implements (100% coverage, no orphans).### US-<n> — <title><role>, I want <capability>, so that <benefit>.Scenario: blocks — happy path plus at least one negative/edge case (use the edge cases the user named in the interview). No story may skip the negative case; if truly none applies, write Scenario: N/A — <one-line reason> explicitly rather than omitting it.- [ ] items derived 1:1 from the Gherkin. Oracle naming: name the oracle by behavior, not by a literal test function name that doesn't exist yet — e.g. "a test proving grade 1 yields the spec EF value", not test_ef_grade1. The exact test name is filled in — and cross-checked against the real file — only when the story closes (see 4.1 step 3).- [ ] list. Files: paths touched.Standards: INVEST, vertical slices, zero TBDs, each story completable in one focused session. Nice-to-haves → "Out-of-MVP backlog" the loop never picks up.
Embody the senior engineer for the chosen stack. Two minds run this loop:
04-ledger.md from this exact template:# Ledger — <slug>
seed: <verbatim seed>
stack: <stack> | toolchain: <available|unavailable> | started: <timestamp>
SCOREBOARD: done=0 self=0 unverified=0 blocked=0 todo=<N>
| ID | Title | Deps | Status | Attempts | Evidence | Last result |
|----|-------|------|--------|----------|----------|-------------|
## Journal
## ImpedimentsStatus values: todo / doing / done / done-self / done-unverified / blocked. Evidence column: the path to that story's evidence dir, filled in as soon as the first oracle runs.
2. Toolchain probe: run the stack's version + test-runner commands; record the result in the header.
3. git init at builds/<slug>/ (the whole tree). Write a stack-appropriate .gitignore that excludes app/'s deps/build output, .env*, and adversary/ (QA scratch and re-run logs are regenerable and not part of the shipped deliverable — evidence/ is the committed proof; adversary/ stays out of history so it never bleeds into a story commit). Set a repo-local commit identity if none exists.
todo story whose deps are done/done-self/done-unverified.app/ → author the tests the Gherkin implies, using real test names.evidence/US-<n>/<seq>-<oracle>.txt. Evidence format contract (mandatory): each Builder evidence file's first line is COMMAND: <exact command run> and its last line is EXIT_CODE: <int> — a file missing either does not count as evidence. Tick a checklist item only by citing its evidence file.US-<n>: <title> commit in the repo root (builds/<slug>/), touching only app/ (plus that story's evidence/US-<n>/); verify git status is clean of stray adversary/ files. The Adversary re-runs oracles against files on disk, so it must verify a stable committed state, never a half-written working tree. Do any history-reconstruction only when no Adversary is running.app/ path, instructed: "Verify the committed state at HEAD, not any later uncommitted edits. Re-run the oracles yourself from adversary/US-<n>/ as your scratch dir — never write into app/. Save each re-run with the COMMAND:/EXIT_CODE: contract to adversary/US-<n>/ (both fields present; for your own QA files EXIT_CODE need not be the literal last line — a trailing note is fine). Try to find a failing criterion; report pass/fail per item." Fail-closed: any Adversary fail reopens the story (consumes an attempt); the fix lands as a follow-up commit.done-self.done-self.| Result | Status | Next |
|---|---|---|
| All items evidence-proven + Adversary-confirmed in a fresh context (first attempt or after one respawn) | done | update ledger, next story |
| Proven, but Adversary ran same-thread (no subagent, or died twice) or a criterion is judgment-only (pure UX) | done-self | update ledger, next story |
| Toolchain genuinely unavailable (re-probe once before degrading) | done-unverified | code+tests authored & committed, next |
| Any item fails | attempt++ | diagnose, fix, re-prove, follow-up commit |
| 3 attempts exhausted, or needs a real secret/paid resource/destructive action | blocked | log impediment, next story |
Attempt accounting (explicit): the initial build-and-prove pass (steps 2–5a) is attempt 1. Each fail→fix→re-prove cycle increments the counter; blocked triggers once attempt 3 also fails (at most 2 retries after the initial attempt). Security-tagged stories (auth, secrets) never reach done on mocked credentials — cap at done-self with a journal note.
7. Update the ledger — the story's row (incl. Evidence column), the SCOREBOARD line, and a journal entry (≤ 8 lines). Code is already committed (step 4); this is bookkeeping only.
evidence/. Any story whose oracle no longer passes → reopen and back through 4.1.done/done-self story, git log --grep "^US-<n>:" must return a commit AND git show --stat on it must touch at least one file the story declared in its Files list. A commit that exists but contains none of the story's code (bundled into a neighbor's commit) fails and the story is reopened — existence alone is not integrity.01-intent.md and confirm it is literally present and working in the shipped app/ — invoke it, don't just find its function. Any feature silently dropped or quietly narrowed is either implemented as a new story or explicitly moved to "Out of scope" in 01-intent.md with a journal entry. A promise the app doesn't keep is a defect. (Especially important here: the interview made explicit promises to the user.)blocked story gets up to 3 fresh-approach retries (max 6 total attempts per story, per the v3 attempt accounting above).README.md in app/ with exact setup/run/test commands that actually work on this machine's real toolchain — verified by running them verbatim from a fresh clone (if the box is uv-only, the README says uv, not pip; a command that fails as written is a docs honesty gap). And any narrowed superlative stated honestly.01-intent.md's "Top 3 usage scenarios" step by step, not just "exit code 0" — this catches a feature that passes its unit tests but doesn't deliver the promised experience. Capture the replay as evidence. Portable-path rule: any standalone smoke script MUST resolve paths relative to its own location (or take them as args) — never hardcode an absolute path to the build dir, or it silently tests the original copy from anywhere and passes even against broken code. Verify by running it from a fresh clone elsewhere.done → declare "All stories machine-verified."done-unverified → do not claim success; report "authored but unverifiable — no toolchain."blocked → list each ID + precise blocker, then ask the user exactly once: "N stories need your input — take them up now?" If yes, ask minimal targeted questions scoped to the blockers, then run those stories back through 4.1.Slug + stack + one-line product statement; artifact paths; SCOREBOARD counts; how to run the app; which decisions were [user] vs [delegated] (material only, including any narrowed superlative and its honest README wording); the 4.4 blocked question if any.
6d8d33a
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.