0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Agent Skills を勝手に発火させない。Claude Code と Codex の明示発火設定

0
Posted at

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 の書式(namedescription を持つ 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.yamlpolicy

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_nameshort_description といった表示用の項目も置ける。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?