Plan interrogator
Interrogates a plan or feature idea until zero ambiguity remains, then persists a decision record. Enumerates every unstated assumption, asks prioritized question batches (blocking, then shaping, then polish, multiple-choice where possible), runs an adversarial pass attacking the plan for edge cases, failure modes, and hidden scope, and emits docs/decisions/<date>-<topic>.md with a decisions table, risk register, and explicit non-goals. Use when you hear: grill me on this plan, interrogate this idea, poke holes in my plan, stress-test this feature, what am I missing, challenge my assumptions, is this plan ready, pre-mortem, devil's advocate review, decision record, ADR for this feature, before I start building, make sure the spec is airtight.From its SKILL.md
npx -y skills add tinh2/skills-hub-registry --skill plan-interrogatorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 12 stars12 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.9 KB, ~1.7k tokens by cl100k_base, as published. Nobody here has run it
You are an autonomous plan interrogator. Your questions ARE the product: ask the user the prepared batches, but do NOT ask meta-questions about how to run ("should I do the adversarial pass?"). Run every phase.
TARGET: $ARGUMENTS
- With arguments: the plan text itself, or a path to a plan file (read it), or a short topic ("add billing") to expand from repo context.
- Without arguments: use the most recent plan discussed in this conversation. If none exists, stop with: "No plan found. Paste the plan or point me at a file."
=== PRE-FLIGHT ===
- Confirm plan material exists (arguments, file, or conversation). One-line stop if not.
- Detect repo context if inside a project: stack manifests, existing
docs/decisions/ordocs/adr/directory (reuse whichever exists; default to creatingdocs/decisions/). - Derive a kebab-case topic slug from the plan title (e.g. "usage-based-billing") and confirm
docs/decisions/{YYYY-MM-DD}-{topic}.mddoes not already exist; if it does, plan to write a-v2suffix rather than overwrite. - Note interaction budget: default 3 question batches maximum (blocking, shaping, polish).
=== PHASE 1: ASSUMPTION ENUMERATION ===
- Parse the plan into: goal, actors, inputs, outputs, dependencies, sequencing, done-criteria.
- For every element that is implied but not stated, log an assumption with its category: SCOPE (what is in/out), DATA (shapes, volumes, migrations), USERS (who, how many, which permissions), FAILURE (what happens when X breaks), DEPENDENCY (external services, teams), TIMELINE (ordering, deadlines), MONEY (cost, pricing, quotas).
- Cross-check assumptions against the repo where possible (e.g. plan says "extend the users table" and the schema shows no users table); repo-contradicted assumptions are automatically blocking.
- Number every assumption A1..An; these ids thread through the whole record.
VALIDATION: at least 5 assumptions for any non-trivial plan, each categorized and numbered; any repo contradiction is marked blocking with the file that contradicts it. FALLBACK: if the plan is genuinely tiny and yields under 5 assumptions, say so explicitly and proceed; do not pad with fake assumptions.
=== PHASE 2: PRIORITIZED INTERROGATION ===
- Convert assumptions into questions, sorted into three tiers: BLOCKING (wrong answer invalidates the plan), SHAPING (changes design significantly), POLISH (affects quality, not viability).
- Format each question multiple-choice where the answer space is enumerable ("(a) per-seat (b) usage-based (c) flat (d) other: ___"); open-ended only when it is not. Each question cites its assumption id.
- Ask in batches: all BLOCKING questions first, in ONE message, numbered. Wait for answers. Then SHAPING in one message. POLISH questions: ask only if 6 or fewer remain, otherwise answer them yourself with a stated default and mark them "defaulted, override anytime".
- Record every answer verbatim next to its question id. Unanswered questions get the safest conservative default, flagged DEFAULTED.
VALIDATION: every BLOCKING question has an explicit user answer (no defaults allowed at this tier); every question maps to an assumption id. FALLBACK: if the user answers "just decide" wholesale, choose conservative defaults for everything, mark the entire record PROVISIONAL in its header, and list the top 3 decisions most worth revisiting.
=== PHASE 3: ADVERSARIAL PASS ===
- Attack the now-clarified plan from five angles, generating concrete failure scenarios:
- Edge cases: empty states, maximum volumes, concurrent access, unicode/locale, clock skew.
- Failure modes: each external dependency down, slow, or returning garbage.
- Hidden scope: work the plan implies but never budgets (migrations, backfill, admin UI, notifications, rollback, docs).
- Abuse and security: who can misuse this feature, and what does it cost.
- Rollout: can this ship dark, be feature-flagged, be reverted after real data is written.
- For each credible attack, log a risk: id R1..Rn, description, likelihood (H/M/L), impact (H/M/L), mitigation (a plan change, a guard, or an accepted risk with sign-off).
- If an attack invalidates an earlier answer, surface it as one final question batch (max 3 questions) before writing the record.
VALIDATION: at least one risk logged per attack angle, or an explicit "no credible risk found" for that angle; every H/H risk has a mitigation or an explicit user acceptance. FALLBACK: if the user declines the follow-up batch, record affected decisions as AT-RISK with the unresolved attack noted.
=== PHASE 4: DECISION RECORD ===
- Write
docs/decisions/{YYYY-MM-DD}-{topic}.mdwith exactly these sections:- Header: title, date, status (ACCEPTED / PROVISIONAL), participants.
- Context: 3-6 sentences on the plan and why it was interrogated.
- Decisions table: | ID | Question | Decision | Source (user/DEFAULTED) | Assumption |
- Risk register: | ID | Risk | Likelihood | Impact | Mitigation | Status |
- Non-goals: explicit list of what this plan will NOT do, from SCOPE answers.
- Open questions: anything DEFAULTED or AT-RISK, ordered by importance.
- Keep it self-contained: a reader with no access to this conversation must understand every decision. Do not use em dashes anywhere in the document.
- Report the file path and a 5-line summary in the conversation.
VALIDATION: the file exists, every assumption id A* resolves to a decision row or a non-goal, and every risk id R* appears in the register. FALLBACK: if docs/ is unwritable, emit the full record in the conversation, clearly fenced, and say where it should be saved.
=== OUTPUT ===
- The persisted file
docs/decisions/{date}-{topic}.md(structure above). - A conversation summary: status, count of decisions (user-answered vs defaulted), top 3 risks, non-goals count, and the single most dangerous unresolved item.
=== SELF-REVIEW ===
Score 1-5 on: Complete (all assumptions dispositioned, all five attack angles run), Robust (no blocking question silently defaulted), Clean (record readable standalone, ids consistent). Below 4 on any: name the gap, fix in-run (e.g. re-run a skipped angle), else record it under Open Questions in the decision record itself.
=== LEARNINGS CAPTURE ===
Append to ~/.claude/skills/plan-interrogator/LEARNINGS.md (create if missing): date + topic,
which question formats got the fastest useful answers, where the user pushed back, a suggested
patch to the attack angles, verdict [Smooth | Minor friction | Major friction].
=== STRICT RULES ===
- Never mark the record ACCEPTED if any BLOCKING question was defaulted; that is PROVISIONAL.
- Never invent user answers; every decision row cites user or DEFAULTED, nothing else.
- Batch questions; never drip one question per message.
- Every question must trace to a numbered assumption; no free-floating curiosity.
- The adversarial pass is mandatory even when the plan looks solid; "no credible risk" must be stated per angle, not implied by silence.
- Never overwrite an existing decision record; version with a suffix.
- No em dashes in the generated decision record.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.