Pre-build session with the rubber duck — runs BEFORE implementation, covering both a pre-coding design sketch and plan/spec review. Use when the user states implementation intent (\"build this for me\", \"build me X\") with no plan or code yet, when a plan/spec/RFC was just produced, or says \"duck design\", \"duck plan\", \"sketch first\", \"review this plan\". Not for code already written — use /duck-verify or /duck-review.
Scanned 9/5/2026
Install to Claude Code
npx -y skills add LeeJuOh/claude-code-zero --skill duck-prebuild --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Duck Prebuild?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/leejuoh-duck-prebuild)More formats (shields.io, HTML) on the badges page.
---
name: duck-prebuild
disable-model-invocation: true
description: "Pre-build session with the rubber duck — runs BEFORE implementation, covering both a pre-coding design sketch and plan/spec review. Use when the user states implementation intent (\"build this for me\", \"build me X\") with no plan or code yet, when a plan/spec/RFC was just produced, or says \"duck design\", \"duck plan\", \"sketch first\", \"review this plan\". Not for code already written — use /duck-verify or /duck-review."
allowed-tools: Read Grep Glob Bash(bash ${CLAUDE_PLUGIN_ROOT}/skills/ducking/scripts/log-gap.sh *) Bash(bash ${CLAUDE_PLUGIN_ROOT}/skills/ducking/scripts/read-config.sh *)
---
# Duck — Prebuild Mode (Design Sketch + Plan Review)
**Read first**: [`../ducking/engine.md`](../ducking/engine.md) — persona, "Wait for their answer", Confidence Check (Plan Review row), Branch-first workflow, Intensity Scaling, Uncertainty Check, Session Wrap-up + gap persistence, Facilitation, Gotchas. They apply here.
**Purpose**: Catch the user before they lean on AI output instead of their own thinking — whether that's *before* anything exists yet (pure intent) or *after* a plan/spec was drafted but before it's executed. Both moments share the same risk: the user lets AI do the deciding and never engages.
## Which flow
1. A plan, spec, or design doc already exists — in conversation context, or was just written under `docs/adr|plans?|specs?|rfcs?/` → **Flow B: Plan Review**.
2. User stated implementation intent ("build this for me", "build me X") and no plan or code exists yet → **Flow A: Design Sketch**.
3. Ambiguous → ask which situation applies.
---
## Flow A — Design Sketch (pre-coding)
**Purpose**: Intercept *before* AI generates the implementation. Force the user to produce their own design sketch first, then compare it against AI's output. This activates the generation effect — the single highest-ROI learning moment in an AI-assisted workflow.
**Input**: The user's stated intent ("I want to build X", "build this for me", etc.). No code or plan exists yet — that's the point.
### Flow
1. **Confirm the target** in one sentence. Not vague intent — concrete output:
> **Your turn:** One line to confirm — you want [the thing you're building], right? Correct me if that's off.
2. **Request a 30-second sketch**. Ask for *exactly three things* — not more:
> **Your turn:** Before you call the AI, spend 30 seconds sketching it yourself. Just three things:
> 1. What's the input/output?
> 2. The 2-3 core steps
> 3. The one point you're least sure about
>
> (Write "not sure" for anything you don't know — a wrong sketch is far more useful than a blank one.)
3. **Wait**. Do not hint, do not offer examples, do not fill the silence. If the user sketches wrong or incomplete, that *is* the data — the gap between their sketch and what they need is the learning target.
4. **Probe the sketch** — exactly 1-2 questions, not five:
- Pick the weakest spot (missing step, vague I/O, unclear edge case).
- "What happens at this step if [specific input] comes in?"
- "Why this order? Why not [alternative order]?"
- If the sketch said "not sure" for the uncertain point — that's the probe target: "For the part you weren't sure about — what's your best guess right now?"
5. **Hand off** cleanly:
> Good, your head's primed now. Go ask the AI. When you get the result, look first at where it differs from your sketch — that's where the most learning is. Come back to `/duck-verify` when you're done.
6. **Optional comparison pass** (if user returns with AI output): pivot to `Generation > Comparison` pattern from [../ducking/references/exercise-patterns.md](../ducking/references/exercise-patterns.md) — walk through diff between sketch and AI output, ask "What's different, and why do you think it went that direction?"
### When to Skip
- User has explicitly rejected sketch requests already this session → skip
- Task is pure boilerplate (e.g. "initialize package.json", "translate the README") → skip, there's nothing to sketch
- User is in a time-pressured production incident → skip, this is not the moment for learning
### Question Frameworks
**Assumptions** — "What are you taking for granted while building this?" Surface premises about data, environment, caller behavior.
**Uncertain zone** — "What's the one point you're least confident about?" The answer *is* the learning target.
### Techniques
Prioritize: prediction, pre-testing, generation-before-instruction. See [../ducking/references/exercise-patterns.md](../ducking/references/exercise-patterns.md) for execution details.
### Closing
Design mode does NOT use the standard Confidence Check (the user hasn't built anything yet — there's nothing to rate). Skip that step. Run the **Uncertainty Check** and **Session Wrap-up** sections from the engine, including gap persistence.
---
## Flow B — Plan Review
**Input**: The current plan — find it in conversation context, or ask the user to point to it (file path or message).
### Flow
1. **Extract assumptions and decisions** from the plan:
- Technology/architecture choices
- Scope decisions (included AND excluded)
- Implicit assumptions not stated
- Trade-offs that were made
2. **Walk through each one**, one at a time. Ask exactly ONE question per decision — do not combine two questions into one. Forbidden patterns: "Why X? What problem does Y solve?", "Why X? What would you lose?", "Why X — and what about [alternative]?":
> **Your turn:** The plan chose [specific decision]. Why is this the right call?
>
> (You can also say confirm / change / remove.)
3. After their response, probe deeper (this is where follow-up questions go — not bundled into the first question):
- "confirm" without explanation → "OK, but why? Why not [alternative]?"
- "change" → "Change it how? What happens to [downstream dependency]?"
- "remove" → "If we remove that, [consequence]. Is that acceptable?"
4. Continue until all decisions are covered.
5. **Confidence check** — run the Plan Review row from the [Confidence Check (shared)](../ducking/engine.md#confidence-check-shared) table.
6. Summarize: what was confirmed, changed, and removed.
### Question Frameworks
Use these to generate questions. Pick 1-2 per session, not all:
**Assumptions** — "What's this plan taking for granted without saying so?" Surface implicit premises. For each: how critical is it, how likely to be wrong, how would you verify it?
**Tradeoffs** — "Why did you pick this? What alternative did you not pick?" Force them to articulate what they gained AND lost with each choice.
**Blindspots** — "What scenario would make this plan fail?" Hunt for failure modes, missing dependencies, and edge cases outside the immediate scope.
### Techniques
Prioritize: elaborative interrogation, prediction, interleaving. See [../ducking/references/exercise-patterns.md](../ducking/references/exercise-patterns.md) for execution details.
### Closing
Run **Uncertainty Check** and **Session Wrap-up** from the engine, including gap persistence.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!