How to make Claude Code ask before it builds

Most rework does not start in the code. It starts in a request that left three choices open, and the agent quietly picked all three.

"Add a reminder feature to my notes app" can mean a line printed at startup, a desktop notification or an email. Each is a different build. A short routine fixes this: questions first, a five-line agreement, then code.

The routine

  1. Read first. If a question can be answered by reading the code, read it and do not ask.
  2. Pick at most five questions that change the result: the goal, who uses it, what must not change, the size limit, how you will know it works.
  3. Ask one at a time, each with two or three options and a recommended one: Where should the data live? (a) a JSON file [recommended: no setup] (b) SQLite (c) other. If you answer "you choose", it takes its recommendation and says so.
  4. Stop early when there is enough. Fewer than five is fine.
  5. Summarise the deal in five lines: goal, what it will do, what it will not do, the files it will touch, how it will be tested.
  6. Wait for a clear yes. No code before it. If you change something, the summary is updated and you are asked again.

What it looks like

Goal: show due reminders at startup.
Will do: new `remind` command, stores in notes.json, prints due items.
Will not do: notifications, email, repeats.
Files: cli.py, notes.json format (new "due" field).
Test: add one due note, restart, see it printed.
Go ahead?

When it does not apply

Skip it for a one-line fix, or when you already gave exact details. If you say "just do it", the sensible answer is three stated assumptions and then the build, with the assumptions marked as such. And if more than five questions are being asked, it is interviewing you, not helping: it should pick defaults for the rest.

As a skill

We keep this as a plain-text skill so we do not retype it: ask-before-building, one SKILL.md and a short WHY.md. MIT licence, free to copy into ~/.claude/skills/. We tested it by hand on our own projects; we have not measured it with other people's workflows.