1仕組みと動作原理
リポジトリ内で唯一の model-invoked な grilling ファミリープリミティブ:frontmatter に disable-model-invocation をあえて含めず、openai.yaml にも policy ブロックが存在しないため、モデルや他の skill が自動呼び出し可能。リポジトリルールにより、ダブルマニフェストからの逆引きで model-invoked と判定される。
Every `SKILL.md` is either user-invoked (`disable-model-invocation: true` plus `policy.allow_implicit_invocation: false` in `agents/openai.yaml`, reachable only by the human) or model-invoked (model- or user-reachable).
尋問メカニズム = design tree + frontier rounds:意思決定を依存関係ツリーとしてモデル化し、各ラウンドでは「前提条件が確定しており、現在回答可能」なフロンティア層全体のみを質問。1ラウンド内の質問は相互に独立している。
Work the tree in **rounds**. The **frontier** is every decision whose prerequisites are already settled: the questions you can ask _now_ without guessing at answers you haven't heard yet. Ask the whole frontier in one round: number each question and give your recommended answer. Then wait for the user's answers before the next round.
各質問にモデル自身の推奨回答を強制付与し、❓/➡️ の厳密なフォーマット番号で出力。ユーザーは番号に従ってラウンド単位でまとめて回答可能。
❓ **Q1** - **<question title>**: <question body, might be multiple paragraphs, including multiple choices> ➡️ <your recommended answer>
事実確認と意思決定権限の厳格な分離:facts(事実)はエージェントが担当(環境の事実は sub-agent を派遣して調査し、ラウンド内の残りの質問をブロックしない)、decisions(決定)はユーザーが担当。
Finding _facts_ is your job, never the user's. When a frontier question needs a fact from the environment (filesystem, tools, etc.), dispatch a sub-agent to find it; don't ask the user for anything you could look up yourself. Don't block on it: a running exploration is an unsettled prerequisite, so only the questions downstream of it wait for the sub-agent to report; ask the rest of the frontier now. The _decisions_ are the user's: put each to them and wait.
終了条件とアクションゲートの明示化:フロンティアが空になった時点でセッション完了。ユーザーが shared understanding を承認するまで実装に着手してはならない。
The session is done when the frontier is empty: every branch of the design tree visited, nothing left silently assumed. Do not act on it until the user confirms you have reached a shared understanding.
独立したエントリーポイントではなく再利用されるエンジン:README では grilling を Model-invoked としてリストし、複数の user-invoked/オーケストレーション skill における共通のインタビュープリミティブとして位置付けている。
**[grilling](./skills/productivity/grilling/SKILL.md)**: Interview the user relentlessly about a plan, decision, or idea until every branch of the design tree is resolved. The reusable interview primitive behind `grill-me`, `grill-with-docs`, `triage`, `wayfinder` and `improve-codebase-architecture`.
2コア機能
4推奨統制措置と判定根拠
- SKILL.md: 純粋なプロンプト指示およびルールテキストのみで構成され、スクリプト実行や外部への影響は一切なし。
5二重目の独立検証
- [ok] model-invoked 判定(无 disable-model-invocation / 无 policy) — frontmatter 只有 name/description;openai.yaml 仅 interface 块;与 AGENTS.md 对 user-invoked 的定义(双清单)对照成立;README 明确列在 Model-invoked 组。
- [ok] design tree / frontier rounds 机制存在 — SKILL.md 原文含 design tree、frontier、'Recompute the frontier and ask the next round' 全机制描述;docs 页解释一致。
- [ok] ❓/➡️ 固定格式与推荐答案 — SKILL.md 内嵌代码块模板逐字存在;docs 页补充了『推荐答案与问题打架』的已知毛边。
- [ok] facts=agent / decisions=user 分离 — 原文整段存在;CHANGELOG 1.1.0 #464 记录拆分动机,与现行文吻合。
- [ok] 终止条件 + 用户确认门禁 — 原文 'The session is done when the frontier is empty…Do not act on it until the user confirms' 存在。
- [ok] 外部依赖清单为空 — 2 文件 token 扫描零命中;SKILL.md 只引用宿主通用能力(filesystem、tools、sub-agent、Skill tool),无可点名 CLI/API/网络端点。docs 页内的 aihero.dev/字典链接是说明性 URL,非被调用端点。
- [ok] 无脚本/无写入/无凭证 — 文件清单仅 2 个;写文件类 token 零命中;无 env/keychain/文件凭证读取指令。
- [ok] 被复用叙事与仓库一致 — README 点名 grill-me/grill-with-docs/triage/wayfinder/improve-codebase-architecture 复用;docs/engineering/ask-matt.md 将其列为路由修复项,均与 SKILL.md 是薄原语一致。
6結論
a293bd6f274ff9b8…