Skip to content
Development
Skill

/ase-task-grill

Interview the user relentlessly about the task plan until reaching a shared understanding, resolving each branch of the question decision tree. Use when the user wants to stress-test a plan, get grilled on their plan, or mentions "grill me" or "grill plan".

From plugin
ase
5355 skills10 agents
Install
$ npx -y skills add rse/ase --skill ase-task-grill --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/ase-task-grill

Context preview

The summary Claude sees to decide when to auto-load this skill.

Interview the user relentlessly about the task plan until reaching a shared understanding, resolving each branch of the question decision tree. Use when the user wants to stress-test a plan, get grilled on their plan, or mentions "grill me" or "grill plan".

SKILL.md

ase-task-grill.SKILL.md
name: ase-task-grill
argument-hint: "[--help|-h] [--rounds|-r <n>] [--focus|-f <section>[,...]] [--next|-n <option>[,...]] [<id>]"
description: >
    Interview the user relentlessly about the task plan until reaching a
    shared understanding, resolving each branch of the question decision
    tree. Use when the user wants to stress-test a plan, get grilled on
    their plan, or mentions "grill me" or "grill plan".
user-invocable: true
disable-model-invocation: false
effort: high

@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md @${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md

<purpose name="ase-task-grill"> Iteratively Grill a Task Plan </purpose>

<expand name="getopt" arg1="ase-task-grill" arg2="--rounds|-r=1 --focus|-f=(all|SPECIFICATION|SPEC|DESIGN|DES|VERIFICATION|VER)... --next|-n=(none|DONE|EDIT|IMPLEMENT|PREFLIGHT)... --int-reuse-task"> $ARGUMENTS </expand>

<objective> Interview the user relentlessly about every essential aspect of the task plan until reaching a shared understanding. </objective>

@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md @${CLAUDE_SKILL_DIR}/../../meta/ase-common-task.md @${CLAUDE_SKILL_DIR}/../../meta/ase-common-grill.md

Procedure ---------

<define name="handoff-args"> Set <args>--int-reuse-task</args>. <if condition="<getopt-option-next/> is not equal `none`"> Set <args><args/> --next <getopt-option-next/></args> </if> </define>

1. **Determine Task:**

1. Set <instruction><getopt-arguments/></instruction> initially, with any leading and trailing whitespace stripped. Inherit the always existing <ase-task-id/> from the current context. Inherit the always existing <ase-session-id/> from the current context. Do not output anything.

2. If <getopt-option-rounds/> is not a positive integer, only output the following <template/> and then immediately *STOP* processing the entire current skill:

<template> ⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: invalid `--rounds` value: **<getopt-option-rounds/>** </template>

3. Treat <getopt-option-focus/> as a comma-separated list of *section tokens*. Trim and upper-case every token, then expand the abbreviations `SPEC`, `DES`, and `VER` to `SPECIFICATION`, `DESIGN`, and `VERIFICATION`, and expand the sentinel `ALL` (the default) to `SPECIFICATION,DESIGN,VERIFICATION`. Set <sections/> to the resulting list, *keeping the given order*. The getopt parser validates only the *first* token, so you *MUST* validate each token yourself: if any token is *empty*, *not* one of the recognized sections or abbreviations, or results in a section already present in <sections/>, bind <token/> to that offending token, then only output the following <template/> and immediately *STOP* processing the entire current skill:

<template> ⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: invalid `--focus` token: **<token/>** </template>

Each section in <sections/> selects its *focus areas* of the grilling: `SPECIFICATION` selects `DOMAIN` and `INTERFACE`, `DESIGN` selects `ARCHITECTURE` and `IMPLEMENTATION`, and `VERIFICATION` selects `REGRESSION` and `CONFIRMATION`. Do not output anything.

4. React on task id:

<expand name="task-react-id" arg1="ase-task-grill"></expand>

2. **Determine Task Plan:**

1. Determine the current task plan content:

<expand name="task-load-content"></expand>

2. <if condition="<task-content/> is empty"> Complain and tell the user to use the `ase-code-resolve`, `ase-code-refactor`, `ase-code-craft`, or `ase-task-edit` skills first to create a task plan. Then immediately stop processing this skill. </if>

3. Determine the *grilling scope* of each section in <sections/>, in order to grill an *already grilled* section again *only* where questions are still *open*:

  • If the `Tags:` frontmatter key of <task-content/> carries

the tag `grilled:<section/>` (with <section/> being the *lower-case* name of the section) and the section contains *no* bullet-point in checkbox state `[?]`, the section is *already grilled* and nothing is open: *remove* it from <sections/> and only output the following <template/>:

<template> ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **section <section/> already grilled -- skipped** </template>

  • If the `Tags:` frontmatter key carries the tag

`grilled:<section/>` and the section contains *at least one* bullet-point in checkbox state `[?]`, *restrict* the scope of the section to *exactly* these `[?]` bullet-points, so the grilling re-asks only the *still open* questions.

  • Otherwise, the scope of the section is the *entire* section.

Independent of the scope, bullet-points in checkbox state `[-]` (cancelled) or `[>]` (deferred) are *inert*: they are *never* subject of a question and their checkbox is *never* changed.

<if condition="<sections/> is empty afterwards"> Skip the entire step 3 below -- the plan is *neither* updated *nor* saved -- and continue directly with step 4. </if>

3. **Iterate Over Task Plan Aspects:**

1. Understand what "grilling" is about:

<expand name="grill-understanding" arg1="the task plan in <task-content/>"></expand>

2. Perform <getopt-option-rounds/> grilling *rounds*, numbered <m/> (1-<getopt-option-rounds/>). Each round starts *from scratch* from *only* the *current* <task-content/> -- as updated by all previous rounds -- and *forgets*

Read more
Ships withase

Agentic Software Engineering (ASE)

Get the whole plugin

Other skills on ase.

hello
Skill

hello

Show a nice greeting message with a timestamp. Use this when the user wants to greet or say hello, optionally to a certain subject <subject> and in a certain…

@rse@rseView Skill