Finding Unknowns
The map is not the territory. The prompt, the plan, and the context window are
the map; the codebase, the domain, and the user's actual intent are the
territory. The gap between them is the unknowns — and an unknown found before
code is written costs minutes, while the same unknown found three PRs later
costs the three PRs.
This skill is a guided conversation: the quadrant walk. Together with the
user you fill in a four-quadrant map of the task, one quadrant per stage, and
the user walks away holding the completed map. The map is the deliverable;
implementation is a different task that starts only after the map is handed
over.
Two moves apply at every stage:
- Reacting beats imagining — for tacit unknowns. When the unknown is
taste, shape, vocabulary, or "I'll know it when I see it", never ask the
user to describe what they want when you can hand them something concrete
to react to — a rendered option, a clickable mock, a decisions table.
Reacting extracts knowledge the user has but cannot articulate unprompted.
When the unknown is a factual constraint or an architectural decision, ask
the highest-blast-radius question directly, with a recommendation.
- Every artifact assembles the reply. End each artifact with the user's
next message pre-drafted: steal/skip chips, resonate checkboxes, a
decisions table, a copyable sharpened prompt — so their reaction becomes
their next message with near-zero typing.
The Quadrant Walk
Five stages, walked in order, one at a time. When you enter a stage, read
its reference file and follow it. Name the current quadrant as you go — the
user should always know where they stand on the map — and finish the stage in
front of you before opening the next.
- Known knowns — scan the
territory, then open with the settled ground.
- Known unknowns — the questions
you can name; resolve them one at a time.
- Unknown knowns — extract the
taste and tacit context nobody has put into words.
- Unknown unknowns — sweep the
territory for landmines.
- Hand over the map — the
completed four-quadrant map, the walk's only done-condition.
When the user moves on to build, review, merge, or hand off what the walk
mapped — or asks for implementation notes, a buy-in doc, a quiz gate, or a
session handoff — read after the walk: the
map lives on past planning.
Scope: the full walk is for a full task. When the user asks for one slice
("do a blindspot pass", "quiz me on this change", "write the handoff"), run
that stage or move alone, recommend the next cheapest one, and stop — never
force the whole walk onto a request that named its slice.
Rules
- For a full walk, walk the quadrants in order, one stage at a time, naming
the current quadrant; the walk ends with the map in the user's hands — no
map, not done. For a named slice, the Scope rule overrides quadrant order:
run only that stage or move, then stop.
- Stages order the walk; they never embargo information. A finding that
materially bears on a decision in flight is disclosed the moment you have
it, then filed on the map under its quadrant — never held back for its
stage's scheduled turn.
- Nothing closes off-screen. Any question or judgment call the map records as
closed must have been shown to the user first — including ones the
territory answered.
- An unknown closes only on evidence — a cited file, the user's explicit
word, or observed output. "Seems right" keeps it OPEN.
- A conflict between two sources of truth — spec vs code, the user's words vs
the territory — stops the walk at that point: name it, show both sides, let
the user rule. Never silently pick one. A disclosed conflict takes the
floor as the current question — asked alone, in the slot any other question
would have taken, and like any question it carries your recommended answer:
recommending is not deciding. When several conflicts surface at once, ask
the highest-blast-radius one; file the rest as queued OPEN conflicts, one
per turn.
- Agreement is not a deliverable. When the user's chosen direction carries a
concrete cost, put the cost in front of them — quantified where possible —
before walking on. The walk exists to find problems while they are cheap.
- Claims about the territory cite real files actually read; invented data is
labeled as such. A fabricated specific destroys the map's authority.
- Start the map file at the end of stage 1 whenever the walk will span more
than one sitting, produce artifacts, or end in a handoff, and update it as
each stage closes; a short single-sitting walk may assemble the map at
hand-over. Never let a context reset eat the walk. Map files, mocks, and
notes live in a scratch or repo-ignored path unless the user asks to
commit them.
- HTML artifacts are self-contained single files: inline CSS/JS, no external
requests, plausible fake data over lorem ipsum.
- Stop at every stage boundary that needs the user's reaction. Never barrel
into implementation on unconfirmed guesses — implementing is a separate
task that begins after the map is delivered.
1---2name: finding-unknowns3description: Guide the user through a quadrant walk that maps the unknowns of a task — open by listing the known knowns, then work through known unknowns, unknown knowns, and unknown unknowns one stage at a time, ending with a complete four-quadrant map in the user's hands. Use when the user explicitly asks for a blindspot pass, unknown unknowns, "what am I missing / what should I be asking", a one-question-at-a-time interview, or several directions to react to; when ambiguity or unfamiliarity is high enough that building now would likely cause rework; when a reference implementation must be understood before porting; or for a named after-walk slice — implementation notes / deviations log, a buy-in doc, a quiz gate before merge, or a session handoff (run only that slice). Do not invoke for ordinary implementation of a sufficiently specified task.4---56<!-- Based on explore-unknowns from dzhng/skills (MIT, Copyright (c) David Zhang),7 itself codifying Thariq Shihipar's "A Field Guide to Fable: Finding Your Unknowns".8 Extended with patterns from Addy Osmani's agent-skills and davidondrej/skills. -->910# Finding Unknowns1112The map is not the territory. The prompt, the plan, and the context window are13the map; the codebase, the domain, and the user's actual intent are the14territory. The gap between them is the unknowns — and an unknown found before15code is written costs minutes, while the same unknown found three PRs later16costs the three PRs.1718This skill is a guided conversation: the **quadrant walk**. Together with the19user you fill in a four-quadrant map of the task, one quadrant per stage, and20the user walks away holding the completed map. The map is the deliverable;21implementation is a different task that starts only after the map is handed22over.2324Two moves apply at every stage:2526- **Reacting beats imagining — for tacit unknowns.** When the unknown is27 taste, shape, vocabulary, or "I'll know it when I see it", never ask the28 user to describe what they want when you can hand them something concrete29 to react to — a rendered option, a clickable mock, a decisions table.30 Reacting extracts knowledge the user has but cannot articulate unprompted.31 When the unknown is a factual constraint or an architectural decision, ask32 the highest-blast-radius question directly, with a recommendation.33- **Every artifact assembles the reply.** End each artifact with the user's34 next message pre-drafted: steal/skip chips, resonate checkboxes, a35 decisions table, a copyable sharpened prompt — so their reaction becomes36 their next message with near-zero typing.3738## The Quadrant Walk3940Five stages, walked in order, one at a time. **When you enter a stage, read41its reference file and follow it.** Name the current quadrant as you go — the42user should always know where they stand on the map — and finish the stage in43front of you before opening the next.44451. **[Known knowns](references/stage-1-known-knowns.md)** — scan the46 territory, then open with the settled ground.472. **[Known unknowns](references/stage-2-known-unknowns.md)** — the questions48 you can name; resolve them one at a time.493. **[Unknown knowns](references/stage-3-unknown-knowns.md)** — extract the50 taste and tacit context nobody has put into words.514. **[Unknown unknowns](references/stage-4-unknown-unknowns.md)** — sweep the52 territory for landmines.535. **[Hand over the map](references/stage-5-hand-over-the-map.md)** — the54 completed four-quadrant map, the walk's only done-condition.5556When the user moves on to build, review, merge, or hand off what the walk57mapped — or asks for implementation notes, a buy-in doc, a quiz gate, or a58session handoff — read [after the walk](references/after-the-walk.md): the59map lives on past planning.6061**Scope:** the full walk is for a full task. When the user asks for one slice62("do a blindspot pass", "quiz me on this change", "write the handoff"), run63that stage or move alone, recommend the next cheapest one, and stop — never64force the whole walk onto a request that named its slice.6566## Rules6768- For a full walk, walk the quadrants in order, one stage at a time, naming69 the current quadrant; the walk ends with the map in the user's hands — no70 map, not done. For a named slice, the Scope rule overrides quadrant order:71 run only that stage or move, then stop.72- Stages order the walk; they never embargo information. A finding that73 materially bears on a decision in flight is disclosed the moment you have74 it, then filed on the map under its quadrant — never held back for its75 stage's scheduled turn.76- Nothing closes off-screen. Any question or judgment call the map records as77 closed must have been shown to the user first — including ones the78 territory answered.79- An unknown closes only on evidence — a cited file, the user's explicit80 word, or observed output. "Seems right" keeps it OPEN.81- A conflict between two sources of truth — spec vs code, the user's words vs82 the territory — stops the walk at that point: name it, show both sides, let83 the user rule. Never silently pick one. A disclosed conflict takes the84 floor as the current question — asked alone, in the slot any other question85 would have taken, and like any question it carries your recommended answer:86 recommending is not deciding. When several conflicts surface at once, ask87 the highest-blast-radius one; file the rest as queued OPEN conflicts, one88 per turn.89- Agreement is not a deliverable. When the user's chosen direction carries a90 concrete cost, put the cost in front of them — quantified where possible —91 before walking on. The walk exists to find problems while they are cheap.92- Claims about the territory cite real files actually read; invented data is93 labeled as such. A fabricated specific destroys the map's authority.94- Start the map file at the end of stage 1 whenever the walk will span more95 than one sitting, produce artifacts, or end in a handoff, and update it as96 each stage closes; a short single-sitting walk may assemble the map at97 hand-over. Never let a context reset eat the walk. Map files, mocks, and98 notes live in a scratch or repo-ignored path unless the user asks to99 commit them.100- HTML artifacts are self-contained single files: inline CSS/JS, no external101 requests, plausible fake data over lorem ipsum.102- Stop at every stage boundary that needs the user's reaction. Never barrel103 into implementation on unconfirmed guesses — implementing is a separate104 task that begins after the map is delivered.