Agent Skills は、description が会話の文脈と一致すれば、エージェントが自分の判断で読み込み、そこに書かれた手順や方針に従って動く。
文脈に合ったスキルが黙って出てくるのは、たいていの場合は便利である。
ただし、以前のカスタムスラッシュコマンドがそうだったように、人間が明示的に呼んだときだけ動いてほしいスキルもある。
Skills への統合で、モデルが自分から発火できるようになった
Claude Code のカスタムスラッシュコマンドは Skills に統合された。
例えば .claude/commands/deploy.md と .claude/skills/deploy/SKILL.md はどちらも CLI上で /deploy コマンドを作り、同じように動く。
既存の .claude/commands/ はそのまま動き続けるが、AnthropicはSkillsを推奨しているため、これから書くなら Skills 側に寄せることになる。
Codex も同じ方向に進んでいる。
~/.codex/prompts/ に置くカスタムプロンプトは非推奨になり、公式ドキュメントは skills への移行を案内している。
Skills は、description が会話の文脈に一致すればモデル自身が読み込んで実行する。
これが便利なスキルもあるが、そうでないスキルもある。
困るのは次のようなスキルである。
- 実装フロー最後のチェック:テスト一式、レビュー、セキュリティ検査。数分から数十分と、それなりのトークンを消費する
- 開発環境の後片付け:コンテナやボリュームの削除、作業ブランチの整理、一時ファイルの掃除。取り消せない操作が混ざる
- デプロイや外部への送信:実行した時点で外に出る
いずれも「作業が一段落した」という文脈で発火しやすい。
そしてまさにその文脈は、モデルが気を利かせたくなる場面でもある。
コードが完成したように見えるからといって、モデルの判断でデプロイが走ってはたまらない。
Claude Code にバンドルされている /verify と /code-review は、Claude Codeのバージョンアップで、ユーザーが呼んだときだけ動く仕様に変更された。
時間とトークンを食う検査をいつ走らせるか、その判断をSkillsの人間の側に戻した形になる。
Skills の発火制御はツールごと
SKILL.md の書式(name と description を持つ frontmatter と、本文の自然言語)は Agent Skills というオープン標準に基づいている。
共通なのはここまでで、例えば置き場所だったり、今回主題の発火制御はツールごとに違う。
| Claude Code | Codex | |
|---|---|---|
| プロジェクト | .claude/skills/<name>/SKILL.md |
.agents/skills/<name>/SKILL.md |
| 個人 | ~/.claude/skills/<name>/SKILL.md |
~/.agents/skills/<name>/SKILL.md |
| 明示発火 | /skill-name |
$skill-name、または /skills
|
| 暗黙発火の禁止 | frontmatter の disable-model-invocation
|
agents/openai.yaml の policy
|
Claude Code での明示発火
frontmatter に一行足すだけでよい。
---
name: deploy
description: Deploy the application to production
disable-model-invocation: true
---
Deploy $ARGUMENTS to production:
1. Run the test suite
2. Build the application
3. Push to the deployment target
4. Verify the deployment succeeded
これで /deploy と打ったときだけ動き、Claude が自分の判断で読み込むことはなくなる。
副次的な効果として、コンテキストの消費も減る。
通常のスキルは、本文こそ発火時にしか読み込まれないものの、description は「どんなスキルが使えるか」の一覧として常にコンテキストに載っている。
disable-model-invocation: true を付けると、モデルに選ばせる必要がなくなるため、description も載らなくなる。
発火の主体と読み込みのタイミングは、三通りに整理できる。
| frontmatter | ユーザーが呼べる | モデルが呼べる | コンテキストへの読み込み |
|---|---|---|---|
| (既定) | Yes | Yes |
description は常時、本文は発火時 |
disable-model-invocation: true |
Yes | No |
description も載らない。本文は発火時 |
user-invocable: false |
No | Yes |
description は常時、本文は発火時 |
逆向きの user-invocable: false は、/ メニューから隠してモデル専用にする指定である。
disable-model-invocation は、スケジュール実行やサブエージェントへのプリロードも同時に止める。
モデル側の経路をまとめて塞ぐ指定だと考えるとよい。
Codex での明示発火
Codex は frontmatter ではなく、スキルディレクトリの中の agents/openai.yaml で制御する。
.agents/skills/cleanup-devenv/
├── SKILL.md
└── agents/
└── openai.yaml
# agents/openai.yaml
policy:
allow_implicit_invocation: false
allow_implicit_invocation の既定値は true で、false にするとユーザーのプロンプトに基づく暗黙の発火だけが止まる。
$skill-name による明示発火はそのまま使える。
Claude Code の disable-model-invocation: true と役割が対応する。
Codexの場合、明示発火の書き方は二つある。
入力欄で $ に続けてスキル名を打つか、/skills でセレクタを開いて選ぶ。
agents/openai.yaml には、display_name や short_description といった表示用の項目も置ける。
参考