<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hamza Ali</title>
    <description>The latest articles on DEV Community by Hamza Ali (@hamzaali81).</description>
    <link>https://dev.to/hamzaali81</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F343814%2F1f4e02d2-7e60-48b8-b18c-7b05ef24fdf4.png</url>
      <title>DEV Community: Hamza Ali</title>
      <link>https://dev.to/hamzaali81</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hamzaali81"/>
    <language>en</language>
    <item>
      <title>Stop Your AI Agent From Agreeing With You: The /grill-me Skill</title>
      <dc:creator>Hamza Ali</dc:creator>
      <pubDate>Mon, 13 Jul 2026 13:11:46 +0000</pubDate>
      <link>https://dev.to/hamzaali81/stop-your-ai-agent-from-agreeing-with-you-the-grill-me-skill-23pk</link>
      <guid>https://dev.to/hamzaali81/stop-your-ai-agent-from-agreeing-with-you-the-grill-me-skill-23pk</guid>
      <description>&lt;p&gt;&lt;em&gt;Your coding agent's worst habit isn't hallucinating APIs. It's saying "great idea!" and building the wrong thing at full speed. Here's a tiny skill that fixes it.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;If you've spent any real time pair-programming with an AI agent in Cursor, Claude Code, or Windsurf, you've felt this exact moment of dread:&lt;/p&gt;

&lt;p&gt;You describe a feature in two loose sentences. The agent replies with enthusiasm, invents five decisions you never made, and starts writing 250 lines of code. Twenty minutes later you realize it delivered &lt;em&gt;something&lt;/em&gt; — just not the thing you actually needed. Now you're not reviewing code, you're archaeologically excavating the assumptions buried inside it.&lt;/p&gt;

&lt;p&gt;The problem isn't that the model is dumb. The problem is that it's &lt;strong&gt;agreeable&lt;/strong&gt;. It's optimized to be helpful, and "helpful" gets interpreted as "start building immediately." What you actually wanted was pushback.&lt;/p&gt;

&lt;p&gt;That's the entire reason &lt;a href="https://www.aihero.dev/skills-grill-me" rel="noopener noreferrer"&gt;&lt;code&gt;/grill-me&lt;/code&gt;&lt;/a&gt; exists — a small, sharp skill from &lt;a href="https://github.com/mattpocock/skills" rel="noopener noreferrer"&gt;Matt Pocock&lt;/a&gt; that turns your agent from a yes-man into an interrogator. This post walks through what it is, how to install it, a full worked session, where it fits in a larger planning workflow, and the pitfalls to watch for.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Heads up (2026):&lt;/strong&gt; Matt has since moved his own default to &lt;a href="https://www.aihero.dev/skills-domain-model" rel="noopener noreferrer"&gt;&lt;code&gt;domain-model&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://www.aihero.dev/grill-with-docs" rel="noopener noreferrer"&gt;&lt;code&gt;grill-with-docs&lt;/code&gt;&lt;/a&gt; for coding work. &lt;code&gt;grill-me&lt;/code&gt; is still the cleanest introduction to the &lt;em&gt;idea&lt;/em&gt; of adversarial planning, and it remains genuinely useful as a narrow pressure-test. I'll cover how they relate near the end.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The problem, in one screenshot
&lt;/h2&gt;

&lt;p&gt;Here's the default behavior we're trying to kill. Vague prompt in, confident wall of assumptions out:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8k0j2jdtdv52at8t6nv2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8k0j2jdtdv52at8t6nv2.png" alt=" " width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Look at what happened. You said "build a notifications feature… make it good." The agent decided — silently — that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;notifications are &lt;strong&gt;email only&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;they live in a &lt;strong&gt;new Postgres table&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;delivery happens &lt;strong&gt;synchronously inside the request handler&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;read-state is a single &lt;strong&gt;boolean&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;there are &lt;strong&gt;no user preferences and no batching&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every one of those is a real architectural decision. Some are probably wrong for your app. And you didn't make any of them — the agent did, on your behalf, and then wrote code as if they were settled. This is the failure mode &lt;code&gt;/grill-me&lt;/code&gt; targets: &lt;strong&gt;premature convergence.&lt;/strong&gt; The agent collapses a tree of open questions into one arbitrary path before you've had a chance to think.&lt;/p&gt;




&lt;h2&gt;
  
  
  What &lt;code&gt;/grill-me&lt;/code&gt; actually is
&lt;/h2&gt;

&lt;p&gt;The skill is almost comically small. That's the point. Here's the entire thing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;grill-me&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Interview the user relentlessly about a plan or design until&lt;/span&gt;
  &lt;span class="s"&gt;reaching shared understanding, resolving each branch of the decision tree.&lt;/span&gt;
  &lt;span class="s"&gt;Use when user wants to stress-test a plan, get grilled on their design,&lt;/span&gt;
  &lt;span class="s"&gt;or mentions "grill me".&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

Interview me relentlessly about every aspect of this plan until we reach a
shared understanding. Walk down each branch of the design tree, resolving
dependencies between decisions one-by-one. For each question, provide your
recommended answer.

Ask the questions one at a time.

If a question can be answered by exploring the codebase, explore the codebase
instead.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There's no code, no MCP server, no tooling. It's a &lt;em&gt;prompt&lt;/em&gt; — a behavioral contract you hand the agent. But notice how much design judgment is packed into those few lines. Four rules do all the work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Interview relentlessly, resolving the decision tree.&lt;/strong&gt; The agent is told to treat your plan as a graph of unresolved decisions, not a to-do list. Its job is to find the open branches and close them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. One question at a time.&lt;/strong&gt; This is the rule that makes it usable. A lesser prompt would dump twenty questions in a numbered list and you'd freeze. Serializing the interview keeps your working memory free and lets each answer inform the next question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Provide a recommended answer for every question.&lt;/strong&gt; Crucial. The agent isn't allowed to just interrogate you into exhaustion — it has to take a position. That does two things: it keeps momentum (you can often just say "yes"), and it gives you something concrete to push against, which is far easier than answering an open-ended "what do you want?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Resolve dependencies first, and read the code before asking.&lt;/strong&gt; If choice B only matters after choice A is settled, the agent asks A first. And if the answer is already in your repository — "which queue library are we using?" — it's supposed to go &lt;em&gt;look&lt;/em&gt; rather than make you recite your own codebase back to it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Installing it
&lt;/h2&gt;

&lt;p&gt;The skill lives in Matt Pocock's public skills repo. One command installs it globally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add mattpocock/skills &lt;span class="nt"&gt;--skill&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;grill-me &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--skill=grill-me&lt;/code&gt; grabs just this skill rather than the whole pack.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-g&lt;/code&gt; installs it globally, so it's available in every project.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-y&lt;/code&gt; skips the confirmation prompts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Source, if you want to read or fork it: &lt;a href="https://github.com/mattpocock/skills/tree/main/skills/productivity/grill-me" rel="noopener noreferrer"&gt;&lt;code&gt;mattpocock/skills/grill-me&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once installed, it works anywhere your agent reads skills — Cursor, Claude Code, and other skill-aware tools. You invoke it by name (&lt;code&gt;/grill-me&lt;/code&gt;) or just by asking the agent to "grill me on this plan."&lt;/p&gt;

&lt;p&gt;If you'd rather not install anything to try the idea, you can paste the prompt body straight into a chat. The skill is just a reusable, named version of that same instruction — which is exactly why skills are worth adopting: &lt;strong&gt;the good prompt stops living in your head and starts living in your toolchain.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A full worked session
&lt;/h2&gt;

&lt;p&gt;Let's replay the notifications feature — this time grilled. Same vague starting point, completely different trajectory.&lt;/p&gt;

&lt;p&gt;You type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/grill-me

I want to add a notifications feature. Users get notified when things
happen in the app.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of a wall of code, you get &lt;strong&gt;one&lt;/strong&gt; question with a recommendation attached:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4hs0c8q6ysfejjme6npl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4hs0c8q6ysfejjme6npl.png" alt=" " width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice everything the agent is doing right in that single exchange:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It labels where you are (&lt;code&gt;Question 3 of ~7&lt;/code&gt;) so the interview feels bounded, not infinite.&lt;/li&gt;
&lt;li&gt;It asks about &lt;strong&gt;delivery model&lt;/strong&gt; — and explains &lt;em&gt;why now&lt;/em&gt;: this decision blocks the storage decision, so it has to come first.&lt;/li&gt;
&lt;li&gt;It commits to a &lt;strong&gt;recommendation&lt;/strong&gt; (background queue) with actual reasoning, not a shrug.&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;checked the codebase first&lt;/strong&gt; and found you already have a BullMQ worker wired up, so its recommendation is grounded in your real stack instead of a generic best practice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's roughly how the whole interview plays out. Each line is one turn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Q1  In-app only, or in-app + email + push?
    → Rec: in-app + email now, push behind a flag.   You: agree.

Q2  Should notifications persist, or fire-and-forget?
    → Rec: persist — users expect a notification center. You: agree.

Q3  Synchronous in the request, or background queue?
    → Rec: queue (found existing BullMQ worker).       You: agree.

Q4  Read-state: boolean is_read, or read_at timestamp?
    → Rec: boolean is simpler.
    You: push back — use read_at, we'll want "unread since" later.

Q5  Per-user notification preferences now, or later?
    → Rec: defer to v2.
    You: push back — legal wants opt-out from day one. Add it.

Q6  Digest/batching in v1?
    → Rec: no, ship per-event first.                   You: agree, log as v2.

Q7  Any events that must never be silenced (security alerts)?
    → Rec: yes, a non-optOutable "critical" category.  You: agree.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two of those seven, you &lt;em&gt;pushed back&lt;/em&gt; on. That's the whole return on investment. Q4 and Q5 are exactly the decisions that, left to the agent's defaults, would have shipped as a boolean and a missing opt-out — and surfaced as a painful migration and a compliance scramble weeks later. The interview dragged them into the open while they were still cheap to change.&lt;/p&gt;

&lt;p&gt;When the tree is fully resolved, the agent summarizes the decisions and only &lt;em&gt;then&lt;/em&gt; is ready to build:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fki6j9hzkz7yonvghg8bv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fki6j9hzkz7yonvghg8bv.png" alt=" " width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  From resolved plan to code
&lt;/h2&gt;

&lt;p&gt;Because every decision is now explicit, the resulting code is built on choices instead of guesses. Compare the two &lt;code&gt;notify&lt;/code&gt; implementations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt; — the agent's silent assumptions, hard-coded:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Written before a single question was asked.&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;notifications&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// blocks the request on a flaky API&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;After&lt;/strong&gt; — the same function, built on the seven resolved decisions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;NotifyInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;critical&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;social&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;billing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NotifyInput&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Q5 + Q7: respect per-category opt-out, but never silence "critical".&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;category&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;critical&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prefs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getPreferences&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;category&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;prefs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Q3: durable, non-blocking. The BullMQ worker drains the outbox.&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;outbox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enqueue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// Q4: read_at stays null until the user opens it.&lt;/span&gt;
    &lt;span class="na"&gt;readAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every line traces back to a decision &lt;em&gt;you&lt;/em&gt; made, annotated with the question that settled it. There's no throwaway code because the expensive thinking happened before implementation, not during code review. That's the actual deliverable of &lt;code&gt;/grill-me&lt;/code&gt;: not the answers, but the fact that the answers are &lt;em&gt;yours&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where it fits in the bigger workflow
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;/grill-me&lt;/code&gt; isn't meant to stand alone. It's the front-of-funnel pressure test in a planning chain. The currently recommended sequence from AI Hero looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;domain-model → to-prd → to-issues → tdd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.aihero.dev/skills-domain-model" rel="noopener noreferrer"&gt;&lt;code&gt;domain-model&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; shapes the feature against your codebase's own language, your &lt;code&gt;CONTEXT.md&lt;/code&gt;, and your architectural decision records. This is now the recommended &lt;em&gt;default&lt;/em&gt; starting point.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.aihero.dev/skills-to-prd" rel="noopener noreferrer"&gt;&lt;code&gt;to-prd&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; turns the resolved context into a product requirements doc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.aihero.dev/skills-to-issues" rel="noopener noreferrer"&gt;&lt;code&gt;to-issues&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; slices the PRD into vertical, shippable issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;tdd&lt;/code&gt;&lt;/strong&gt; drives the implementation test-first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So where does &lt;code&gt;/grill-me&lt;/code&gt; sit? Use it when you have an idea, plan, or architecture direction that needs &lt;em&gt;questioning&lt;/em&gt; but doesn't yet need the full domain-model treatment. Good moments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;before writing a PRD&lt;/li&gt;
&lt;li&gt;before asking an agent to implement a feature&lt;/li&gt;
&lt;li&gt;before committing to a data model or API shape&lt;/li&gt;
&lt;li&gt;when several design choices depend on each other&lt;/li&gt;
&lt;li&gt;when you simply want the agent to &lt;strong&gt;push back instead of agree&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of &lt;code&gt;domain-model&lt;/code&gt; as the heavy, codebase-aware planning tool and &lt;code&gt;grill-me&lt;/code&gt; as the lightweight interrogation you reach for when you just want to be challenged. They pair naturally: grill first to surface the open questions, then run domain-model to sharpen the survivors against your codebase's real vocabulary.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pitfalls and how to handle them
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;It can over-interview trivial work.&lt;/strong&gt; If you ask it to grill a one-line copy change, it'll dutifully generate questions that don't matter. Reserve it for decisions with real branching — data models, API shapes, delivery semantics — not for renaming a variable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommendations can anchor you.&lt;/strong&gt; Because every question ships with a recommended answer, it's tempting to reflexively say "yes." That's a feature for momentum and a trap for judgment. The value shows up on the questions where you &lt;em&gt;disagree&lt;/em&gt;, so treat each recommendation as a claim to test, not a default to accept. If you agreed with all seven, you probably weren't reading closely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Explore the codebase instead" depends on access.&lt;/strong&gt; The rule that the agent should inspect code rather than quiz you only works if it actually can see the repo. In a fresh chat with no files loaded, it'll fall back to asking. Make sure your relevant files or workspace are in context so it can ground its recommendations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's a planning tool, not a spec.&lt;/strong&gt; &lt;code&gt;/grill-me&lt;/code&gt; gets you to shared understanding; it doesn't produce a durable artifact by itself. Pipe its output into &lt;code&gt;to-prd&lt;/code&gt; (or at minimum, have it write the resolved decisions to a markdown file) so the reasoning survives past the chat session.&lt;/p&gt;




&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;The single most valuable thing you can get from an AI agent during planning is &lt;strong&gt;disagreement&lt;/strong&gt; — the pointed question that exposes the decision you were about to make by accident. Left to its defaults, an agent will never give you that. It'll agree, assume, and build.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/grill-me&lt;/code&gt; is a nine-line prompt that flips the default. One question at a time, each with a recommendation, dependencies first, code-aware. It costs you a few minutes of being interrogated and saves you the far more expensive experience of discovering your architecture's problems in code review three days later.&lt;/p&gt;

&lt;p&gt;Install it, point it at your next half-formed idea, and let it push back:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add mattpocock/skills &lt;span class="nt"&gt;--skill&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;grill-me &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then type &lt;code&gt;/grill-me&lt;/code&gt; and resist the urge to just say "yes."&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Credit where due: &lt;code&gt;/grill-me&lt;/code&gt; is by &lt;a href="https://github.com/mattpocock" rel="noopener noreferrer"&gt;Matt Pocock&lt;/a&gt;, part of his &lt;a href="https://github.com/mattpocock/skills" rel="noopener noreferrer"&gt;skills collection&lt;/a&gt; and documented at &lt;a href="https://www.aihero.dev/skills-grill-me" rel="noopener noreferrer"&gt;aihero.dev&lt;/a&gt;. If you found this useful, the AI Hero skills series is worth reading end to end.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>cursor</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
