$npx -y skills add JuliusBrussee/cavekit --skill grillCalibrated interrogation of a fuzzy idea before it becomes a spec. Asks one question at a time, recommends an answer, and lands each answer in §G (goal) or §C (constraints) — unknowns parked as ? items, never guessed. The cheapest place to kill a bad idea is before §T exists. T
| 1 | # grill — sharpen idea before spec |
| 2 | |
| 3 | **One question at a time. Every answer lands in a § or gets parked `?`. Never guess a constraint into existence.** |
| 4 | |
| 5 | Plan-then-execute guesses the fuzzy parts & builds the wrong thing. |
| 6 | Grill drags the fuzz into §G/§C *before* a single §T row exists. |
| 7 | A bad assumption caught here costs one question. Caught in §B it costs a bug. |
| 8 | |
| 9 | ## WHEN TO GRILL |
| 10 | |
| 11 | - Idea is one sentence & you can feel the holes. |
| 12 | - Multiple readings of the goal exist & you are about to pick one silently. |
| 13 | - Before `/spec new` on anything non-trivial. |
| 14 | - User asks to be challenged / stress-tested. |
| 15 | |
| 16 | Skip for a typo or a one-line fix. Grill scales to uncertainty, ⊥ to ego. |
| 17 | |
| 18 | ## CALIBRATE FIRST |
| 19 | |
| 20 | One opening read, not a quiz: |
| 21 | 1. How well does user know this domain? (sets question depth) |
| 22 | 2. How locked is the idea? (exploring vs committed) |
| 23 | 3. Pressure wanted: light / normal / brutal. |
| 24 | |
| 25 | Match it. Brutal grilling on a half-formed idea just demoralizes. Light |
| 26 | grilling on a committed plan misses the load-bearing flaw. |
| 27 | |
| 28 | ## QUESTION LADDER |
| 29 | |
| 30 | Climb in order. Each rung, ask **one** question, **recommend** an answer, wait. |
| 31 | |
| 32 | 1. **Goal** — what must the code *do*, in one line? (→ §G) |
| 33 | 2. **Done** — how do we know it works? name the observable. (→ §C / future §V) |
| 34 | 3. **Boundary** — what is explicitly out of scope? (→ §C) |
| 35 | 4. **Lock** — what tech/lib/pattern is non-negotiable? what is forbidden? (→ §C) |
| 36 | 5. **Surface** — what does the outside world touch — cmd, api, file, env? (→ §I) |
| 37 | 6. **Edge** — the one input that breaks the happy path? (→ future §V) |
| 38 | 7. **Unknown** — what do we *not* know yet? (→ park as `?` §C bullet) |
| 39 | |
| 40 | Stop climbing the moment the spec would be unambiguous. Do not ask all seven by reflex. |
| 41 | |
| 42 | ## ANSWER FORMAT |
| 43 | |
| 44 | Each question carries a recommended answer so the user can grunt "yes" & move: |
| 45 | |
| 46 | > Q: auth — session cookie or JWT? |
| 47 | > rec: JWT — stateless, you named horizontal scaling as a §C. |
| 48 | > (a) JWT (b) cookie (c) something else? |
| 49 | |
| 50 | ## HANDOFF |
| 51 | |
| 52 | When done, emit a compact block — goal line, constraint bullets, surfaced |
| 53 | unknowns as `?` — and hand to the **spec** skill to write §G/§C. Grill proposes; |
| 54 | spec is the sole mutator. Never write SPEC.md directly. |
| 55 | |
| 56 | ## WHEN TO STOP |
| 57 | |
| 58 | Done when ALL hold: |
| 59 | - §G is one line, one reading, zero "or maybe". |
| 60 | - §C covers every non-negotiable the user stated or implied. |
| 61 | - Every blocking unknown is either answered or parked as an explicit `?`. |
| 62 | |
| 63 | Unresolved blocking unknown that needs the outside world → recommend `/research`, not a guess. |
| 64 | |
| 65 | ## BOUNDARIES |
| 66 | |
| 67 | - ⊥ make product decisions for the user. Recommend, never decide. |
| 68 | - ⊥ write SPEC.md. Hand structured answers to spec. |
| 69 | - ⊥ ask in bulk. One question, one recommendation, wait. |
| 70 | - ⊥ grill a trivial change. Right-size or skip. |