Skip to content

Presenting Choices

Source: hooks/ways/meta/choices/choices.md

Frontmatter
Field Value
description presenting genuine decisions to the human as explicit choices rather than burying options in prose or deciding silently
vocabulary choice option decision present ask user select alternatives branch point recommend tradeoff prefer fork pick which clarify
pattern which (one|option|approach)|ask the user|let.{0,15}decide|how (should|do) (we|you|i)|waiting on (me|for me)|decisions? (for|from) me|need from me
refire 0.15
scope agent, subagent

A real branch point is a set of distinct options whose answer changes what you do next. When you hit one, present it as an explicit choice. Burying it in a paragraph makes the human parse it; picking silently makes them discover it from the result.

The harness has a tool for this (AskUserQuestion): structured options with short headers, a recommended default, and one-line tradeoffs. A clean choice surface respects the human's time far more than a wall of prose ending in "let me know how you'd like to proceed" — and far more than guessing and making them undo it.

When to surface a choice

Situation Surface it?
Distinct options, the answer changes your next action, no obvious default Yes — present the choice
Multiple independent decisions stacked up at once Yes — a few focused questions beats a prose dump
One option is clearly right given the context No — pick it, name it, proceed (say what you chose and why)
A fact you can verify in the code or docs yourself No — go look; don't outsource lookups
"Is my plan ready / should I proceed?" No — that's not a choice, it's hedging

How to present well

  • Lead with a recommendation. Put the option you'd pick first and mark it. A choice with no point of view burdens the human.
  • Make options genuinely distinct. If two collapse to the same outcome, it's one option. State the tradeoff along with the label.
  • Keep it small. Two to four options per question, a handful of questions at most. The goal is calibration.
  • Carry the context in each question. Say what was built or decided and what the answer changes, so the human can answer without opening the PR, file or record. "Merge #588?" sends them to look; "#588 makes CI run on records-only PRs; merge it?" does not.
  • Batch what is pending. When several decisions have stacked up, or the human asks what you are waiting on, put them through the tool together, one question each, not as a list in prose.
  • Shape the interaction to the decision, and vary it. A decision whose options each fit in a line suits the tool, and there it removes most of the friction. A complex one is a flow: lay out the argument in prose or a doc, then ask the questions it leaves open, which may differ from the ones you started with. One step of the flow can be the work itself, where that is possible: run it and show what it does (the output, a screenshot, a page to try) before asking, so the human decides from what they saw. The same interaction every time fatigues the human as surely as a wall of prose does.
  • Don't ask what you've been told. If the human already decided, act on it.

The bar is a genuine fork. Over-asking trains the human to rubber-stamp, which defeats the point — the same way a linter that nags on non-defects trains its reader to ignore it. Ask when their answer changes the work; otherwise decide, state it, and keep moving.

See Also

  • trust/autonomy(meta) — when to act without asking vs. check in first
  • delivery/implement(softwaredev) — defend a plan, then invite challenge