Install in seconds
Install this skill
Copy the command and run it in your terminal. You can review the source before installing.
terminal
git clone https://github.com/crbnos/carbon

Works with Git. The repository opens in your current directory.

🔥
QualityTypeScript

Grill

by crbnos

Stress-tests a plan, spec, or design by interviewing the author one question at a time until every open decision is resolved, cross-checking answers against the codebase and surfacing contradictions.

2.3K stars326 forksAdded 2026/07/21
businesserpleanmanagementmanufacturingmcp-servermespostgresqlqmsreact-routersupabasetypescript

Documentation

README

grill — stress-test a design by interviewing its author

Input: a plan, spec, or design idea (in a file or only in chat). Output: every open decision resolved with the human one branch at a time, each resolution written to its canonical home, and every contradiction between the user's answers and the codebase surfaced along the way.

Supervised only. This skill exists to interview a human; there is no autonomous variant. Inside an automated loop (conductor, headless/outer-loop runs) do NOT invoke it — spec-writing's autonomous mode (recommendation-based resolutions recorded as **Autonomous:**, Ask-First territory → BLOCKED) is the substitute.

Announce at start: "Using the grill skill — stress-testing {target}."

Step 1: Identify the target and its write destination

Grilling Questions come from Resolutions written to
A spec (.ai/specs/…) its Open Questions section, plus anything fuzzy in Design Decisions inline in the spec: - [x] {Question} — **Answer:** {decision and rationale}, plus a changelog entry when done
A spec in design (spec-writing Step 5 — no file yet) the question list assembled in spec-writing Step 4 carried into the spec's Open Questions section (pre-checked, with answers) when the spec is written in Step 6
A plan (.ai/plans/…) ambiguous or risky tasks, missing acceptance criteria the affected task in the plan file
An idea in chat (no artifact) the whole decision tree of the idea .ai/runs/{YYYY-MM-DD}-grill-{slug}.md — create it when the first decision lands

If the target has no artifact and the grill reveals it is spec-worthy (new module, data-model change, or 3+ files — the /spec-writing table), say so and offer /spec-writing. Continue grilling artifact-less only if the user declines.

Step 2: Pick the depth from the blast radius

Target involves Depth
New module, data-model change, or cross-module behavior Full grill — strictly one question per message
Anything smaller Light grill — closely-related questions may be grouped, max 2–3 per message

Depth changes grouping only. Every rule in Step 3 applies at both depths, and never present the entire question list at once and wait for batch answers.

Step 3: Interview

Walk the decision tree branch by branch, resolving dependencies between decisions one by one. Wait for the user's answer before continuing. For every question:

  • Order by dependency: settle decisions that other questions hinge on first.
  • Attach your recommended answer with a one-line rationale.
  • If the question can be answered by exploring the codebase or an existing research file, answer it that way instead of asking.
  • Cross-check every answer against the code. Surface contradictions immediately, with file references: "you said X, but {file} does Y — which is right?"
  • Stress-test fuzzy answers with a concrete scenario before accepting them ("a PO has 3 lines and one is already received — what happens on cancel?").
  • Sharpen fuzzy terms. When the user uses a vague or overloaded word, propose the precise canonical term. Check packages/glossary (the terms object in @carbon/glossary) for an existing definition and challenge conflicts: "the glossary defines {term} as {definition}; you seem to mean {other} — which is it?"

Step 4: Write back as each decision lands

Do not batch write-backs to the end of the session — record each resolution in the Step 1 destination in the same turn it is decided. Two extra destinations apply regardless of target:

  • A decision that sets a durable convention beyond this feature → update the matching .claude/rules/*.md file in the same turn.
  • A genuinely new canonical domain term → offer a @carbon/glossary entry, only when all three hold: the term is user-facing (UI or docs), the grill revealed real ambiguity, and the user confirmed the definition. Follow packages/glossary/AGENTS.md (its "Ask First" rule is satisfied by the user's confirmation in the interview).

Done when

  • No unresolved branches: every question answered by the user, the codebase, or an explicit documented "out of scope" decision
  • Every resolution recorded in the Step 1 destination — none live only in chat
  • Durable conventions reflected in .claude/rules/; glossary offers made where the three-part test passed

Anti-patterns

  • Dumping the full question list in one message and accepting batch answers
  • Accepting an answer without checking it against the code
  • Resolving a question yourself to keep moving — only the user, the codebase, or a documented out-of-scope decision resolves a question
  • Recording decisions only in chat ("I'll write them up at the end")

Red flags — thinking any of these means the grill is being defeated; STOP:

  • "the user probably means X, I'll assume it" (that assumption IS the question)
  • "we can settle this during implementation"
  • "I'll batch the write-backs when the session ends"

More from crbnos

Other Claude Code skills by this author in the directory.