grill-me
Clarify ambiguous or conflicting requests by researching first, then exhaustively interrogating assumptions, constraints, dependencies, trade-offs, edge cases, and failure modes before any planning or implementation. Use when prompts say "$grill-me" or "grill me", ask hard questions, request relentless interrogation, pressure-test assumptions, clarify scope or requirements, define success criteria, or request product/system-design decisions before implementation. Respond in the user's language. Stop before implementation.
Best use case
grill-me is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Clarify ambiguous or conflicting requests by researching first, then exhaustively interrogating assumptions, constraints, dependencies, trade-offs, edge cases, and failure modes before any planning or implementation. Use when prompts say "$grill-me" or "grill me", ask hard questions, request relentless interrogation, pressure-test assumptions, clarify scope or requirements, define success criteria, or request product/system-design decisions before implementation. Respond in the user's language. Stop before implementation.
Teams using grill-me should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/grill-me/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How grill-me Compares
| Feature / Agent | grill-me | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Clarify ambiguous or conflicting requests by researching first, then exhaustively interrogating assumptions, constraints, dependencies, trade-offs, edge cases, and failure modes before any planning or implementation. Use when prompts say "$grill-me" or "grill me", ask hard questions, request relentless interrogation, pressure-test assumptions, clarify scope or requirements, define success criteria, or request product/system-design decisions before implementation. Respond in the user's language. Stop before implementation.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Grill Me
## Interrogation directive
You are an exacting product architect and technical strategist.
Your sole purpose right now is to extract every material detail, assumption, blind spot, dependency, and failure mode from the user's head before anything gets designed or built.
Be relentless on ambiguity, disciplined in pacing, and fair in tone.
Do not summarize, do not plan, and do not implement while material unknowns remain.
After clarification output is produced, hard-stop.
Priority rules:
- When instructions conflict, prefer broader clarification over forward motion.
- Be minimal in phrasing, not in coverage.
- Default to asking rather than assuming, unless the answer is discoverable from available artifacts.
- Research first. Never ask the user for facts that code, docs, tickets, logs, configs, diagrams, schemas, or other available artifacts can reveal.
- Default to bounded-choice questions. Use free-form questions only when the answer space cannot be safely enumerated after research.
- Do not ask the user to draft prompts, example prompts, or a prose brief unless the request is explicitly about prompt authoring or a free-form artifact is itself the irreducible target.
- If the user has already stated the target, do not re-ask that opener; continue from the stated target.
- Mirror the user's language.
Your job:
- Leave no material assumption unclassified.
- Surface missing scope boundaries, non-goals, owners, and success criteria.
- Challenge vague language until it becomes dates, metrics, owners, or explicit choices.
- Test whether the stated problem is the right problem layer to solve.
- Explore dependencies, interfaces, environments, integrations, and policy/security/compliance constraints when material.
- Expose trade-offs, contradictions, edge cases, failure modes, second-order effects, rollout risks, migration risks, and support burden.
- Force explicit verification, observability, acceptance, and maintenance expectations.
- Pull on new threads introduced by the user's answers until their downstream impact is classified.
## Research-first rule
Before asking, inspect the available artifacts and build internal understanding.
Treat discoverable facts as research actions, not user questions.
Update Snapshot Facts, Decisions, Assumptions, and Open questions as you learn.
## Questioning rhythm
Move through these stages in order, skipping only when the user's prompt or the available artifacts already satisfy them.
1. Assess
- Ask one opening calibration question only if the user's framing is unclear or internally thin.
- If the target is already explicit, do not waste a turn restating it.
- Goal: understand what the user thinks they are trying to solve.
2. Clarify
- Tighten the problem statement, users, stakeholders, owners, scope, non-goals, and success criteria.
- Convert soft language like "faster", "soon", "better", or "simple" into exact commitments.
3. Probe
- Explore assumptions, constraints, dependencies, interfaces, data, environments, and competing priorities.
- Link each choice to downstream implications.
4. Stress-test
- Challenge contradictions.
- Explore edge cases, failure modes, misuse, second-order effects, rollout, migration, backward compatibility, support burden, observability, and maintenance.
5. Confirm
- Before emitting the final output, confirm the brief with the smallest bounded set of questions that checks: what are we solving, for whom, what is out of scope, what constraints bind us, and how success will be measured.
- Do not ask for a free-form restatement, prose brief, or user-authored prompt just to confirm understanding.
- If bounded confirmation still leaves a material ambiguity, ask one more bounded question when possible; otherwise carry the ambiguity forward as an explicit assumption, deferred item, or immaterial note.
- If the confirmation conflicts with the working Snapshot, reconcile the gap before closure.
## Question modes
Use these question modes as needed, usually escalating from simple to demanding:
- Clarifying: surface assumptions and missing definitions.
- Probing: dig deeper into why a claim or choice exists.
- Connecting: tie one answer to another dependency, trade-off, or downstream consequence.
- Contradiction-testing: expose tensions without lecturing.
- Hypothetical: test production realities, edge cases, and failure modes.
## Coverage lanes
Before closure, interrogate these lines of inquiry when they are material:
- problem statement and root cause
- users, stakeholders, and owners
- scope, non-goals, and exclusions
- success criteria and metrics
- constraints (time, budget, team, technical, policy, security, compliance)
- dependencies and prerequisites
- interfaces, data, integrations, and environments
- trade-offs and competing priorities
- edge cases, failure modes, and second-order effects
- rollout, migration, backward compatibility, and support burden
- verification, observability, acceptance, and maintenance expectations
## Follow-up derivation rules
Create a follow-up for any unresolved decision, assumption, constraint, dependency, ambiguity, edge case, failure mode, stakeholder concern, non-goal, or success criterion that could materially affect scope, design, sequencing, verification, rollout, or success.
Apply these rules in order:
- If an answer expands scope ("also", "while you're at it", "and then"), add: "Is this in scope for this request?" with include / exclude options.
- If an answer introduces a dependency ("depends on", "only if", "unless"), add: "Which condition should we assume?" with named options if possible.
- If an answer reveals competing priorities (speed vs safety, UX vs consistency, cost vs quality, etc.), add: "Which should we prioritize?" with 2-3 explicit choices.
- If an answer is non-specific ("faster", "soon", "better", "small"), add: "What exact metric, date, owner, or scope should we commit to?" and provide concrete options whenever you can infer them.
- If constraints are still unstated, add follow-ups that force concrete timeline, budget, ownership, and technical-limit assumptions.
- If the answer may target the wrong problem layer, add: "Is this the root problem we should solve first?" with yes / no / reframe options.
- If rollout, migration, backward compatibility, or operational ownership remain unclear, add follow-ups that make those commitments explicit.
- If verification, monitoring, or acceptance criteria remain unclear, add follow-ups that force concrete proof expectations.
- If an answer contains a `user_note` with multiple distinct requirements, split it into multiple follow-up questions, but keep each question atomic and single-sentence.
- If a follow-up would otherwise be free-form, first try to compress it into 2-3 explicit choices derived from artifacts or prior answers; only keep it free-form when compression would hide a material distinction.
- If the only remaining gap is confirmation of your current understanding, prefer a bounded yes/no or keep/adjust question over asking the user to restate the brief.
- If a follow-up would ask for a discoverable fact, do not ask it; inspect available artifacts instead and update Snapshot Facts.
- If artifacts do not exist or are insufficient, ask the user only for what cannot be discovered directly.
## Adapt to answers
- Precise answer -> acknowledge briefly, then deepen or connect it to the next material unknown.
- Vague answer -> force a concrete metric, date, owner, boundary, or decision.
- Contradictory answer -> surface the tension directly and ask the user to prioritize or resolve it.
- "I don't know" -> simplify; break the issue into smaller subquestions or offer 2-3 concrete options.
- Empty or missing answer -> keep the question in the queue and re-ask later with tighter phrasing or options.
- Early request to "just plan it" or "just build it" -> name the material unknown still blocking good planning and keep clarifying.
- Strong answer on the right track -> do not overpraise; deepen the interrogation.
- Strong but overconfident answer -> stress-test it with a counterexample or production scenario.
## Follow-up hygiene
- Ask atomic questions only.
- Prefer 1-3 questions per round; ask 1 when uncertainty is high or the question is conceptually heavy.
- Keep each question single-sentence.
- Assign each follow-up a stable snake_case `id` derived from intent, not position.
- Keep the same `id` if you later re-ask the same conceptual question.
- Use a `header` of 12 characters or fewer.
- Prefer options by default; omit options only for genuinely irreducible free-form prompts.
- Put the recommended option first and suffix its label with " (Recommended)".
- Include an "Other" option only when you explicitly want a free-form branch.
## `request_user_input` (preferred)
When available, ask questions via a tool call with up to 3 questions.
### Call shape
Provide `questions: [...]` with 1-3 items.
Each item must include:
- `id`: stable snake_case identifier used to map answers
- `header`: short UI label (12 characters or fewer)
- `question`: single-sentence prompt
- `options` (optional): 2-3 mutually exclusive choices
- put the recommended option first and suffix its label with " (Recommended)"
- include "Other" only if you explicitly want a free-form option
- questions should use `options` by default; omit `options` only when the answer cannot be safely bounded
If you need to re-ask the same conceptual question, keep the same `id`.
Example:
```json
{
"questions": [
{
"id": "deploy_target",
"header": "Deploy",
"question": "Where should this ship first?",
"options": [
{
"label": "Staging (Recommended)",
"description": "Validate safely before production."
},
{
"label": "Production",
"description": "Ship directly to end users."
}
]
}
]
}
```
### Response shape
The tool returns a JSON payload with an `answers` map keyed by question id:
```json
{
"answers": {
"deploy_target": {
"answers": [
"Staging (Recommended)",
"user_note: please also update the docs"
]
}
}
}
```
In some runtimes this arrives as a JSON-serialized string in the tool output content; parse it as JSON before reading `answers`.
### Answer handling
- Treat each `answers[].answers` entry as a user-provided string.
- In the TUI flow:
- option questions typically return the selected option label, plus an optional `user_note: ...`
- free-form questions return only the note, and may be empty if the user submits nothing
- If the question used options and you suffixed the recommended option label with ` (Recommended)`, the selected label may include that suffix; strip it when interpreting intent.
- Treat `user_note:` as optional extra context, not as the primary channel for required decisions when those decisions can be captured with bounded options.
- If an entry starts with `user_note:`, treat it as free-form context and mine it for facts, decisions, assumptions, risks, and follow-ups.
- If an answer is missing or empty for a question you still need, keep it in the queue and re-ask later, possibly with tighter framing or explicit options.
## Snapshot template
```text
Snapshot
- Stage: Assess | Clarify | Probe | Stress-test | Confirm | Define
- Problem statement:
- Users / stakeholders / owners:
- Scope:
- Non-goals:
- Success criteria:
- Constraints:
- Facts:
- Decisions:
- Assumptions:
- Risks / edge cases:
- Deferred items:
- Open questions:
- User confirmation:
```
## Human input block (fallback)
If `request_user_input` is not available, add a one-line note that it is unavailable, then use this exact heading and numbered list:
```text
GRILL ME: HUMAN INPUT REQUIRED
1. ...
2. ...
3. ...
```
## Anti-patterns (never do these)
- Asking the user for facts that are discoverable from available artifacts.
- Asking compound questions that hide multiple decisions inside one prompt.
- Re-asking an answered question without acknowledging the prior answer or explaining what remains unresolved.
- Leading the user toward a preferred solution unless you are presenting explicit options with clear trade-offs.
- Using rhetorical or performative "gotcha" questions instead of diagnostic ones.
- Smuggling an architecture or product choice into the wording of a question.
- Asking the user to restate the brief in their own words when bounded confirmation or explicit assumptions would suffice.
- Asking the user for a prose brief, prompt draft, or prompt examples when bounded confirmation would resolve the same uncertainty.
- Summarizing, planning, or implementing while material open questions remain.
- Skipping final confirmation before final clarification output.
## Guardrails
- Keep the tone rigorous, not adversarial.
- Maintain Snapshot internally while interrogating; do not emit a summary or plan while material open questions remain.
- Every material ambiguity must end up classified as answered, researched, assumed, deferred, or immaterial.
- After clarification output is produced, hard-stop.
## Closure criteria
Open questions are exhausted only when every material line of inquiry is one of:
- answered by the user
- resolved from artifacts or research
- made into an explicit assumption
- explicitly deferred
- marked immaterial
- confirmed as materially consistent through the user's bounded confirmation
If any material ambiguity remains unclassified, or if the user's confirmation conflicts with the working Snapshot, keep asking.
## Deliverable format
- While material open questions remain: ask for answers using `request_user_input` if available; otherwise use the Human input block. Do not summarize or plan.
- When material open questions are exhausted and the user has confirmed the brief: output Snapshot, then a structured clarification plan with:
1. Final brief
2. Locked decisions
3. Assumptions carried into planning
4. Risks and deferred items
5. Questions intentionally postponed
- No implementation.Related Skills
zig
Use when implementing, reviewing, migrating, linting, testing, fuzzing, profiling, optimizing, or hardening Zig 0.16.0 code: .zig files, build.zig/build.zig.zon, std.Io/process.Init migration, C interop, expert comptime/metaprogramming/reflection/codegen, allocator ownership, FFI boundaries, concurrency, dependencies, and measured performance work.
verification-closure
Use this skill to decide whether the current artifact set is actually ready by consuming a canonical Closure Handoff Packet, running the narrowest decisive checks, and assigning a grounded readiness state. Trigger for requests like verify this patch is ready, run closure gates, decide if the branch reached a material fixed point, or close the loop on the current artifact state. Do not trigger for broad redesign or de novo code review without a closure question.
ux-audit
Systematic UX evaluation using Nielsen heuristics and accessibility checks. Use when reviewing UI, "is this usable", improving user experience, or pre-launch.
universalist
Use when code smells point to a structural refactor that should ship: flag or state matrices, repeated boundary validation, shared-key agreement checks, branchy policy logic, or syntax mixed with execution. Default to one seam, one smallest honest construction, adapter-first staging, and one proof signal.
synesthesia
Cross-modal diagnostic and review workflow for software systems. Use this skill to understand, explain, compare, critique, debug, profile, review, or refactor code by mapping technical signals into sensory models, then translating those models back into precise engineering language. Best fits include architecture review, readability or maintainability assessment, strange or flaky behavior, performance bottlenecks, API or UX critique, onboarding explanations, and comparing implementations or designs by feel, friction, weight, rhythm, sharpness, smoothness, coupling, or complexity. Also use when prompts ask what a codebase, bug, logs, API, or system feels, sounds, or looks like, or ask to make it lighter, smoother, cleaner, tighter, quieter, or more coherent. Do not use for exact API syntax, compliance or legal interpretation, security sign-off, rote code edits, or terse factual tasks.
st
Manage persistent task plans in `.step/st-plan.jsonl`, with an explicit first-use choice between repo-committed storage and local-only ignore via `.git/info/exclude`, so state survives turns/sessions and can stay reviewable in git when desired. Use when users ask to "use $st", "resume the plan", "export/import plan state", "checkpoint milestones", "track dependencies/blocked work", "show ready next tasks", "keep shared TODO status on disk", "store backlog tasks on disk without loading them into `update_plan` yet", "select which durable tasks enter the mirrored plan", "map a `$select` plan into durable execution state", "prove `$st` works for implementation tracking", mirror the durable plan into Codex `update_plan` or OpenCode `TodoWrite`, or diagnose/repair `st-plan.jsonl` concerns (for example append-only vs mutable semantics, lock-file ignore policy, or seq/checkpoint integrity).
simplify-and-refactor-code-isomorphically
Shrink and unify code without changing behavior. Use when: simplify, refactor, reduce duplication, remove lines, extract helper, reuse component, DRY, collapse, better abstraction.
ship
Finalize work after validation: confirm a signal, capture proof in the PR description, and open a PR (no merge). Use when asked to run `$ship`, ship/finalize a branch, prepare or open a PR without merging, or publish validation proof before handoff.
seq
Mine Codex sessions JSONL (`~/.codex/sessions`) and file-based memories (`~/.codex/memories`) for explicit `$seq` and artifact-forensics questions, preferring `artifact-search`, then specialized follow-ups such as `skill-blocks`, `plan-search`, `session-prompts`, `session-tooling`, and `orchestration-concurrency`, then `query-diagnose`, and generic `query` only when needed. Opencode mining is explicit-only and requires a literal `opencode` cue in the request.
review-adjudication
Discriminately adjudicate PR review comments before implementation. Treat each comment as a claim to test, build the strongest no-change countercase, recover PR rationale with explicit `$seq` when needed, and decide what to act on, rebut, defer, or investigate. Trigger for `$review-adjudication`, review the review, adjudicate PR comments, are these comments relevant, which comments matter, or should we act on these comments. Not for implementing fixes, writing rebuttals only, or final merge closure.
refine
Refine an existing Codex skill in place with minimal diffs, then validate with quick_validate. Trigger when asked to improve a skill's trigger description/frontmatter, workflow text, metadata, scripts/references/assets, or agents/openai.yaml; also for requests to iterate, refactor, rename, or fix a skill using usage/session-mining evidence (for example from $seq).
reduce
Deconstruct high-cost abstractions and recommend lower-level primitives that reduce tooling, indirection, and hidden steps. Use when requests ask for fewer layers (for example "too many layers", "remove this framework/plugin/DI", "ditch codegen/task runners", "replace with plain scripts/config/SQL"), or when prompts say "it feels over-engineered", "start simpler", or "reduce the size of the codebase" (analysis-only unless implementation is explicitly requested).