Matt Pocock 氏のスキル集に入っている grill-me は、実装に入る前に AI が人間を質問攻めにして計画の穴を潰させるスキルだ。日本語圏でも紹介記事が増えているが、導入したのに「入れた気がしない」という声がある。実際に Claude Code 2.1.241 で測ったところ、それは設定ミスではなく設計どおりだった。grill-meSKILL.mddisable-model-invocation: true を持っており、ランタイムがモデルからの呼び出しを拒否する

grilling は自動発火し、grill-me はランタイムに拒否され、/grill-with-docs は2本のスキルを起動する実測ログ
実測ログ。対照群 grilling は自動発火し、grill-me はランタイムがエラーで拒否、/grill-with-docs は Skill を2回呼ぶ(Claude Code 2.1.241・2026-08-31・macOS)

30秒でわかる
grill-me は本文36バイト。中身は「grilling を呼べ」の1行だけの入口スキル
disable-model-invocation: true が付いており、モデルからは絶対に呼べない。ユーザーが /grill-me と打つ専用
mattpocock/skills の37本中22本(59.5%)が同じ宣言を持つ。in-progress は8本すべて
・呼べない22本も一覧には載るので、657トークンは常駐したまま自動では動かない
claude plugins install で入るのは25本、リポジトリには37本ある

Claude Code そのものの導入から運用までは Claude Code|2026年版・インストールからCLAUDE.md・Hooks・本番運用までの実装手引き にまとめている。本記事はその中の Agent Skills について、「入れたスキルがいつ動くのか」という一点を実測で詰める。

なおこのスキルの実務での使い方は、keitakn 氏の AIに丸投げしないで理解するためのAI開発手法(2026年8月現在)(Zenn)が要件定義から実装までのワークフローとして詳しく書いている。本記事はそのワークフローの紹介ではなく、そこで使われるスキルが実際にどう起動するかを測ったものだ。

grill-me とは——36バイトの SKILL.md が grilling を呼ぶだけの入口

まず中身を見る。skills/productivity/grill-me/SKILL.md は frontmatter を除くと本文が36バイトしかない。

# 中身を確認する(リポジトリを clone せずに読む)
curl -s https://raw.githubusercontent.com/mattpocock/skills/main/skills/productivity/grill-me/SKILL.md

返ってくるのは frontmatter 3行と、本文1行の「grilling という名前で Skill ツールを呼べ」という指示だけである。同じく grill-with-docs も本文64バイトで、「grillingdomain-modeling の2つで Skill ツールを2回呼べ」としか書かれていない。

つまり grill-me / grill-with-docs実装を持たない入口で、中身は別の2本にある。

grilling(本文1,987バイト)— 質問を「設計ツリー」として扱い、前提が確定した論点だけを1ラウンドにまとめて出す。各質問に番号と推奨回答を必ず添える。事実の調査は AI 側の仕事で、ユーザーに調べさせない
domain-modeling(本文3,331バイト)— 対話中に固まった用語を CONTEXT.md に、決定を docs/adr/ に書き出す。「CONTEXT.md を読むだけ」はこのスキルではなく、モデルを書き換えるときのためのもの、と明記されている

flowchart TD U["ユーザーが打つ"] --> A["/grill-me
本文36バイト"] U --> B["/grill-with-docs
本文64バイト"] A -->|"Skill を1回"| G["grilling
設計ツリーでラウンド質問"] B -->|"Skill を2回"| G B --> D["domain-modeling
CONTEXT.md と ADR を書く"] G --> O["番号つき質問 + 推奨回答"] D --> O M["モデルの自発的判断"] -.->|"拒否される"| A M -.->|"拒否される"| B M -->|"許可"| G

図の破線が本記事の主題だ。grillingdomain-modeling はモデルが自分の判断で呼べるが、grill-megrill-with-docs は呼べない。

いつ「呼べないスキル」になったのか——2026-06-12 のコミットで反転している

grill-me は最初からこの形だったわけではない。コミット履歴を追うと、転換点は2026年6月12日のコミット 221ffca9(33ファイルを触った大きな再編)にある。このコミットで grill-me/SKILL.md は3行追加・6行削除され、中身がこう入れ替わった。

  2026-06-12 より前 2026-06-12 以降
description Use when user wants to stress-test a plan, get grilled on their design, or mentions “grill me” Get relentlessly interviewed about a plan or design until every branch of the decision tree is resolved.
disable-model-invocation なし true
本文 インタビュー手順そのもの(設計ツリー・1問ずつ・推奨回答つき) Run the /grilling skill. の1行

注目すべきは description の書き換え方だ。旧版には「Use when ユーザーが〜と言ったとき」という、モデルに向けた発火条件が書かれていた。新版はそれを落とし、「(あなたが)計画について容赦なくインタビューされる」という人間に向けた説明になっている。発火条件を書く相手がいなくなったので、書く必要もなくなったわけである。実装本体は同日追加された grilling へ移り、旧 description の発火条件はそちらが引き継いだ。

日本語圏では「grill-me から grilling に乗り換えた」という書き方をよく見るが、履歴上は乗り換えではなく分割である。grill-me は廃止されておらず、2026-08-31 時点でも grilling と並んで現存し、プラグイン manifest にも両方載っている。文言の最終調整は2026-08-15の fcf00715 で、Call the Skill tool for \grilling` から Call the Skill tool with “grilling”` へ、引用符つきの形に統一された。

実測:grill-me は Skill ツールから呼び出せない

ここが本題である。宣言を数えただけでは「ランタイムがその宣言を尊重しているか」は分からないので、実際に動かして確かめた。

環境は macOS(Darwin 23.5.0・arm64)、Claude Code 2.1.241。スキルはプロジェクト配下の .claude/skills/ に置きclaude -p "<依頼>" --output-format stream-json --verbose で実行して、tool_use のうち Skill の呼び出しだけを数えた。応答本文を読んでも発火の有無は判定できない——発火していなくても、それらしい質問文は返ってくるからだ。

4条件でSkill呼び出しを数えた実測マトリクス
4条件の実測。B2 だけがランタイム側のエラーで止まる

まず対照群を取る

いきなり grill-me を試すと、発火しなかったときに「ハーネスの設定ミス」と区別できない。そこでgrilling だけを置いたディレクトリを用意し、description に合う自然文で依頼した。

Grill me about my plan: I want to add GitHub OAuth login to my Next.js app. Stress-test my thinking before I write any code.

結果は {"skill": "grilling"} の1件。自動発火した。出力も SKILL.md の指定どおり ❓ **Q1** 形式の番号つき質問に ➡️ の推奨回答が並ぶ、ラウンド制の体裁になっていた。対照群が動いたので、以降の「動かなかった」は解釈できる。

同じ依頼を grill-me だけの環境へ投げる

次に grill-me だけを置いたディレクトリで、まったく同じ英文を投げた。Skill は1件呼ばれたが、中身は grill-me ではなく環境に元から入っていた別のスキルだった。grill-me は選ばれていない。

ここで切り分けが要る。読み込まれていないのか、選ばれなかっただけなのか。stream-jsonsystem/init イベントを見ると、skills 配列(41件)にも slash_commands 配列(98件)にも grill-me入っていた。読み込みは成功している。

呼べと命令してみる

決定打として、モデルに選択の余地を残さない依頼を投げた。

claude -p 'Call the Skill tool with skill "grill-me" now. Do not use any other skill.' \
  --output-format stream-json --verbose --permission-mode bypassPermissions

モデルは指示どおり Skill(grill-me) を呼んだ。そしてツール側がエラーを返した

ランタイムが返したエラー(原文)
Skill grill-me cannot be used with Skill tool due to disable-model-invocation. Ask the user to run /grill-me themselves — it cannot be invoked via the Skill tool. Do not replicate this skill's workflow by other means — it is reserved for explicit user invocation.

「ユーザー自身に /grill-me を実行してもらえ。他の手段でこのスキルのワークフローを再現するな」とまで書かれている。つまりこれは「モデルが選ばなかった」のではなく、ランタイムが構造的に塞いでいる。プロンプトの言い回しを工夫しても回避できない種類の壁だ。

「入れたのに発火しない」には原因が2種類ある。ひとつは依頼文と description が結びつかない経路の問題で、これは依頼の言い回しを変えれば発火する。もうひとつが今回の宣言による遮断で、こちらは言い回しをどう変えても発火しない。前者は description を書き換えれば直るが、後者は作者の意図なので直すものではない。症状は同じでも対処は正反対なので、切り分けには stream-json を見るしかない。

/grill-with-docs は本当にスキルを2本起動するのか

grill-with-docsSKILL.md は「Skill ツールを grillingdomain-modeling の2回呼べ」としか書いていない。この1行が実際に守られるかは、Skill の呼び出し件数を数えれば分かる。

4本すべて(grilling / grill-me / grill-with-docs / domain-modeling)を置いた環境で、明示起動した。

実行 依頼 Skill 呼び出し ターン数 所要
C /grill-with-docs に要件定義を依頼 grillingdomain-modeling2件 7 115秒
D /grill-me に計画詰めを依頼 grilling1件 4 55秒

記述どおりだった。C の応答は「grillingdomain-modeling を組み合わせて、要件を設計ツリーとして分解し、ラウンド制で質問していきます」という宣言から始まり、1問目でいきなり「ログイン」を認証と認可に割ってどちらの話かを確認してきた。用語を割りにいくのは domain-modeling 側の担当で、2本が合流していることが出力からも読める。

headless でも明示起動は効く
claude -p "/grill-with-docs ..." のようにスラッシュコマンド形式をそのままプロンプトに書けば、対話セッションでなくても入口スキルは起動する。CI から回して発火の有無を機械チェックしたい場合はこの形が使える。

37本中22本が「自動では動かない」——宣言の分布を数えた

grill-me だけの特殊事情なのかを確かめるため、リポジトリ全体を数えた。main(2026-08-31 取得)の skills/ 配下には SKILL.md37本あり、frontmatter に disable-model-invocation: true を持つものが22本(59.5%)だった。

37スキル中22本がdisable-model-invocationを宣言、カテゴリ別内訳
カテゴリ別の内訳。in-progress は8本すべてが非発火、misc は4本とも自動発火しうる
カテゴリ 本数 うち自動発火しない 割合
engineering 18 9 50.0%
in-progress 8 8 100%
productivity 7 5 71.4%
misc 4 0 0%
合計 37 22 59.5%

分布には意図が読める。in-progress(開発中)が8本とも塞がれているのは、未完成のものを AI に勝手に選ばせないという判断だろう。逆に misc の4本(setup-pre-commitgit-guardrails-claude-code など)はすべて開放されている。engineering では tdd code-review codebase-design diagnosing-bugs が開放され、to-spec to-tickets triage wayfinder のような工程を丸ごと持っていくスキルが塞がれている。

ここで測っているのは「宣言」と「挙動」の2つで、別々の主張である
22本という数はあくまで frontmatter の集計だ。その宣言をランタイムが尊重するかは別の問題で、前節の実測(B2)で初めて確かめている。SKILL.md の frontmatter がどこまで効くかは実装依存で、たとえば description の上限は SKILL.mdのdescriptionは1024字上限|Claude Skill命名規則と公式19本の検査結果 で公式19本を検査したときにも、宣言と実際の扱いを分けて数える必要があった。

プラグインで入る25本と、リポジトリの37本は一致しない

導入ルートは2つある。README は「両方入れるとスキルが二重になる」ため片方だけにせよと明記している。

claude plugins installで入る25本とnpx skills addで選べる37本の比較
2つの導入ルートで手に入る本数が違う。plugin.json v1.2.3 の実測

.claude-plugin/plugin.json(v1.2.3)が列挙しているのは25本で、in-progress の8本と misc の4本は入っていない(8+4=12、37−12=25)。

# Claude Code のプラグインとして入れる(公式マーケットプレイス収録・25本)
claude plugins install mattpocock-skills

# Codex など他のエージェント、または編集したい場合(37本から選ぶ)
npx skills@latest add mattpocock/skills

プラグイン側の25本のうち、自動発火しないのは14本(56%)である。README は「プラグインは管理された読み取り専用の束で、更新は自動で降ってくる。skills.sh は編集可能なファイルをプロジェクトにコピーする」と両者の思想差を説明しており、取れる本数の差はそこに書かれていないin-progress を試したい場合は npx skills 側を選ぶ必要がある。

なお npx skills 経由で入れる場合、README は setup-matt-pocock-skills を必ず選べと太字で指示している。これはリポジトリごとに1回実行する初期設定スキルで、これ自体も disable-model-invocation 付き(=明示起動専用)である。

配布の入口である skills.sh 側については skills.shとは|npx skills add がディスクに何を書くかを実測 で別に扱う。

常駐コストは1,428トークン、うち657は「呼べないのに載る」

スキルは一覧(namedescription)が常に文脈へ載り、SKILL.md の本体は発火して初めて読み込まれる。この2つを別々に数えた。

常駐1428トークンと発火時に載る本体のトークン数
cl100k_base(tiktoken)での実測値。トークナイザが変われば値も変わる
対象 cl100k_base Anthropic count_tokens
一覧の常駐コスト(37本の name+description) 1,428 1,576
うち自動発火しない22本ぶん 657
domain-modeling 本体(発火時) 715 811
grilling 本体(発火時) 385 418
grill-with-docs 本体(発火時) 17 25
grill-me 本体(発火時) 9 17

37本の SKILL.md 本文を全部足すと34,424トークン(cl100k_base)になるが、これが一度に載ることはない。実際に効いてくるのは常駐1,428トークンのほうで、そのうち657トークン(46%)は自動発火しない22本ぶんである。この657は「AI が勝手に使うことは無いが、AI が読む一覧には常にある」という状態で座り続ける。

トークン数を引用するときはトークナイザ名も一緒に書く
同じ文字列でも cl100k_base(tiktoken)と Anthropic の count_tokens は一致しない。今回の一覧テキストでは1.10倍だったが、grill-me 本体のような短い文字列では1.89倍になった。倍率は対象ごとに違うので一律換算はできない。 Anthropic 公式スキルの常駐コストを測った discernment-nudgeとは|AIの答えを疑わせるAnthropic公式スキルを実測、常駐317トークンの中身 の317トークンと本記事の値を並べるときは、トークナイザだけでなく何を数えたか(payload定義)も違う点に注意がいる。あちらは claude plugin details が表示する見積もり値、本記事の1,428は37本の namedescription を自分で連結して数えた再構成値で、Claude Code が実際に注入する文字列そのものではない。順序を比べる用途には使えるが、絶対値をそのまま足し引きはできない。

/grill-with-docs を1回起動したときに追加で読まれるのは 17 + 385 + 715 = 1,117トークン(cl100k_base)。入口スキル自身のコストは17トークンで、実質は grillingdomain-modeling の2本ぶんである。「入口を挟むと重い」ということはない。

どう使い分けるか——入口スキルの設計を逆に利用する

ここまでの実測をまとめると、mattpocock skills(mattpocock/skills)の設計はこう読める。

工程を丸ごと奪うスキルは、人間が明示的に起動したときだけ動く。 to-spec to-tickets triage wayfinder implement grill-me grill-with-docs はすべて塞がれている
判断の質を上げる部品は、AI が自分で選んでよい。 grilling domain-modeling tdd code-review diagnosing-bugs は開放されている
その結果、/grill-with-docs と打ったときだけ「質問攻め+用語の記録」が始まる。 打たなければ始まらない

README が掲げる「GSD・BMAD・Spec-Kit はプロセスを所有してしまうが、これらは小さく・改変しやすく・組み合わせ可能に作ってある」という主張は、この宣言の配り方として実装されている。プロセスを持っていくスキルほど、AI の自発性から切り離されている。

自作スキルに応用するなら
「勝手に発動されると困るが、手動で確実に呼びたい」ものは disable-model-invocation: true を付けて明示起動専用にし、実装は別スキルに置いて委譲する——という二段構えがそのまま使える。委譲側の本体は9〜17トークンしかかからない。逆に「常に効いていてほしい」ものは宣言を付けず、description にユーザーが実際に打つ言葉を入れる。今回の履歴が示すとおり、description は「モデルに発火条件を教える欄」と「人間に用途を説明する欄」のどちらにもなりうる。どちらを書くかは、そのスキルを誰が起動するかで決まる。

なお、Zenn の元記事の著者は explain-visually という自作スキルを併用している(3,137行の実装計画を図と短文の1枚 HTML に組み直すもの)。こちらはプラグイン配布ではなく、リポジトリを clone して ~/.claude/skills/ にシンボリックリンクを張る個人配布で、GitHub スターは1(2026-08-31 時点)である。配布経路が違えば導入の摩擦も更新の追随も変わるため、同列には扱えない。本記事が測ったのはあくまでマーケットプレイス配布されている mattpocock/skills 側だけである。

リポジトリ全体の構成・41→37への変遷・各スキルの役割は mattpocock/skills完全ガイド|Claude Code用スキル集で開発プロセスを自動化 にまとめてある。

まとめ

grill-me が「入れたのに効かない」のは、ほとんどの場合バグでも設定ミスでもない。

  1. grill-me の本文は36バイトで、grilling を呼ぶだけの入口である
  2. disable-model-invocation: true により、ランタイムが Skill ツールからの呼び出しを拒否する。実測でエラー文言まで確認した
  3. 使うには /grill-me または /grill-with-docs自分で打つ/grill-with-docs は実測どおり grillingdomain-modeling の2本を起動する
  4. 37本中22本(59.5%)が同じ宣言を持つ。in-progress は8本すべて
  5. 常駐コストは1,428トークン(cl100k_base)。うち657トークンは自動発火しない22本ぶん
  6. claude plugins install で入るのは25本で、in-progressmisc の12本は含まれない

「スキルが発火したか」は応答本文では判定できない。--output-format stream-json --verbose を通して Skilltool_use を数えるのが唯一の確実な方法で、その際は必ず発火するはずの対照群を同じ条件で1本走らせる。対照群が動かなければ、他のすべての結果は解釈できない。

参照ソース

mattpocock/skills — 公式リポジトリ。README・.claude-plugin/plugin.json(v1.2.3)・各 SKILL.md(2026-08-31 取得、★241,793)
skills/productivity/grill-me/SKILL.md — 本文36バイトの委譲スキル
skills/engineering/grill-with-docs/SKILL.mdgrillingdomain-modeling を同時に呼ぶ入口
keitakn「AIに丸投げしないで理解するためのAI開発手法(2026年8月現在)」 — Zenn。grill-with-docs を要件定義の起点に据えた実務ワークフロー。本記事はこの記事で使われているスキルの起動条件を独立に実測したもので、ワークフローそのものの解説は原文をあたってほしい