Agent Skillsは全てを置き換えるか
Intro
少し前にAgent Skillsに全部賭ける価値はあるか考察する記事を書きました。
この記事を書いた後よく話題にあがっていたのが、MCPをはじめとしたAIエージェントの設定が不要になるのか? 場当たり的に追加されたコーディングエージェントの機能が廃止されるのか? という二元論的な話です。
特にClaude Codeの設定や機能を前提として話題になることが多いように思えます。
まず初めに、私はClaude Codeを使っていません。
主にGemini CLIやCodex、自作コーディングエージェントのShaftを使っています。
Gemini CLIやCodexもほとんど設定を行わず使っており、チャット上でアットマークをパスの先頭につけるファイル参照機能ぐらいしか使っていません。
そもそもTUIをなくしてTool Callingを行わなくても文字列置換やファイル参照をできるようにしたのが現在のShaftなので……。
Claude Codeの設定や機能をやりこみたいモチベーションはどこから来るのでしょうか?
また、なぜこんなにもClaude Codeの設定や機能は複雑だと言われるのでしょうか?
そして、Claude Codeに限らず、Agent SkillsはAIエージェント、コーディングエージェントの全てを置き換えるのでしょうか?
AIエージェントMagicaとコーディングエージェントShaftを生み出した私が、今回初めてClaude Codeの公式ドキュメントから設定と機能を深堀りし、ぼくのかんがえたさいきょうのAIエージェント、コーディングエージェントについて考察していきたいと思います。
今後も必要になる可能性が低いものから順に紹介していきます。
CLAUDE.md
まずAgent SkillsのSKILL.mdはinstructions + metadataで構成されるため、CLAUDE.mdの上位互換と言っても過言ではない仕組みになっています。
なのでCLAUDE.mdにnameとdescriptionのメタデータを付与してskillディレクトリに配置するだけで置き換えることが可能になっています。
しかしながら以下の用途においてはCLAUDE.md以外の代替が今のところないため、CLAUDE.mdを使ったほうがいいでしょう。
- Enterprise policyとして組織内で共通のInstructionsを指定したいケース
- "All output MUST be in Japanese."といった、AIエージェントやコーディングエージェントの全ての処理で使用する簡単なInstructionsを指定したいケース
Custom Slash Commands
Custom Slash CommandsとAgent Skillsの最も大きな違いは、明示的な呼び出しか、User Promptのコンテキストに基づき自動的に呼び出されるかの違いです。
Custom Slash Commandsはコマンドを使用した直後にInstructionsを読み込み使用されますが、Agent Skillsは一度スキルの推論を行い、その後対象のスキルのInstructionsを読み込み使用される仕組みになっているので、最低1回Tool Callingが必要で、他のスキルを呼び出す不確実性が存在します。
ただそれ以外の仕組みはさほど変わらないので、Agent SkillsのnameをそのままSlash Commandsのコマンドとして置き換えることは、理論上は可能です。
例えばCodexは/skillsスラッシュコマンドを実行するか、$スキル名を入力してメンションすることで明示的な呼び出しを行えるようになっています。
現時点ではClaude CodeのAgent SkillsをSlash Commandsとして使うことはできませんが、Agent SkillsはCustom Slash Commandsのスーパーセットとしてみなすことができるため、Agent SkillのnameをそのままCustom Slash Commandsのコマンドとして内部で統合される可能性が非常に高いように思えます。
Claude CodeのCustom Slash CommandsはAgent Skillsのスクリプトのような仕組みを無理やりMarkdownで再現していたり、MCPと統合されていたりなかなかカオスな仕様になっているので、Agent Skillの置き換えに成功すればClaude Code自体のリファクタリングやSystem Promptを減らすこともできるようになるのではないでしょうか。
Hooks
Hooks CommandはAgent Skillsのスクリプトとして置き換えることができます。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
- "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/markdown_formatter.py"
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/skills/markdown-formatter/scripts/markdown_formatter.py"
}
]
}
]
}
}
現状HooksとAgent Skillsの両方でSecurity Considerationsを確認する二度手間が発生していますが、こうすれば対象のスキルのスクリプトだけを確認すればよく、HooksとAgent Skillsでスクリプトを使用できるようになります。
また、HooksのSecurity Considerationsにも書かれていますが、ターミナルコマンドやシェルスクリプトをHooksやAgent Skillsとして使用するとありとあらゆるアンチパターンを考えなくてはならないので、Agent SkillsのようにJavaScript/TypeScriptやPythonからコマンドを呼び出すようにしたほうがいいと考えます。
そもそもBashは(Git BashやWSL2を使わない限り)Windowsでは動かないので……。
NotificationはSkillsに置き換える必要性が低いのでそのままでいい気がしますが、そもそもNotificationのようなtypeがJSONのkeyになっていたり、hooksとpermissionをパイプでenum表現していたりしてひどいのでなんとかしてほしいです(JSON Schemaのこととか考えなかったんだろうか?)
MCP
Claude Codeで使われているMCPの大半はAgent Skillsに置き換えることができます。
さて、言うだけなら簡単ですが、Claude Codeの内部ではTool Callingをはじめとしたありとあらゆる場所でMCPが使われており、MCPをとりまくステークホルダーはものすごいことになっているので、簡単にはいかないようです。
MCPのデメリットは前にも書きましたし、様々な記事で書かれている内容ですので割愛します。
今回は、そもそも何でAnthropicがMCPを作らないといけなかったのかという話をします。
Microsoft (GPT Copilot) はOneDriveやSharePointを持っており、WordやExcelとの連携を自社だけで完結できます。
Google (Gemini) はGoogle Driveを持っており、DocsやSheetとの連携を自社だけで完結できます。
OpenAIのChatGPTはリリースから5日間で100万人、2ヶ月で1億人が使用する急成長サービスだったため、2ヶ月経った頃には既にOneDrive, SharePoint, Google Driveとの連携が行えるようになっていたと記憶しています。
一方、AnthropicはGoogleやMicrosoftのように自社でオフィスソフトやクラウドサービスを丸ごと持っているわけではありませんし、OpenAIのChatGPTを超えるようなAIチャットサービスを生み出して成長したわけでもありません。
もしAnthropicがこれらのサービスと連携したい場合はAPIを公開してもらうか、お金を払ってでもMicrosoftやGoogleと契約する必要があるでしょう。
要するに、MCPはコーディングエージェントのために作られたものではなく、本来様々な外部サービスと無料で接続できる、AIチャットやAIエージェントを生み出すために作られたものなんですね。
したがって、ファイルを編集したりコード生成できるコーディングエージェントにおいてはMCPを使って外部サービスに接続するより、ファイルシステム上でdocxファイルやxlsxファイルを生成できるコードを書いたり、ドキュメント検索やコード解析を行うスクリプトを使ったほうが圧倒的に早く、コーディングエージェント用のMCPサーバーで抱えている問題も解決できる、といった具合です。
なぜAnthropicsの公式Skillsリポジトリでdocxファイルやxlsxファイルのスキルを配布しているのかも、これで納得がいきます。
ちなみに、これらのAgent Skillsファイルセットはzipアーカイブにすれば、ClaudeのAIチャットにあるCode execution tool上でAIエージェントとして動かせるようになっています。
MCPがクライアントサーバモデルであることはデメリットでもあり、メリットでもあります。
例えば以下の用途ではファイルセットモデルのAgent SkillsよりMCPのほうが向いています。
- ドキュメントやAPIのURLが頻繁に変わるケース
- Agent Skillsのスクリプトが変更されたエンドポイントURLを把握できないため
- 長年運営されてきたjser.infoや膨大なウェブページから構成されるMicrosoft Learnのような、スクレイピングしてローカルで検索するメリットがないケース
- RAGのようにベクトルデータベースで膨大なデータから検索を行うケース
- ファイルシステムを使わない方がよい、クラウドで動作するAIチャットやAIエージェントなど
ただMCPクライアントのスクリプトを書いてAgent Skillsとして使うことで、MCPを実装していないAIエージェント、コーディングエージェントをMCP対応することはできるので、コーディングエージェントにMCPを直接実装するメリットは今後低くなるように思われます。
コーディングエージェントにMCPを実装してしまうと仕様やSDKが古いまま放置されたりしますが、MCPクライアントのスクリプトに分けてしまえば簡単に最新バージョンのSDKを使用して、SKILL.mdでInstructionsを拡張することもできるようになります。
答えは単純です。LLMは大量のコードを見てきました。しかし、「ツール呼び出し」についてはそうではありません。実際、LLMが見てきたツール呼び出しは、開発者がLLMを訓練するために意図的に作成した、作り込まれたトレーニングデータセットに限られている可能性が高いです。一方で、LLMは何百万ものオープンソースプロジェクトから実際のコードを見てきています。
Code Mode: the better way to use MCP - Kenton Varda, Sunil Pai (Cloudflare)nani.now: AIが高速に解説付きで翻訳
LSP
TBD
ここからは今後も必要になる可能性が高いものを紹介していきます。
settings.json File
まず当たり前ですが、設定ファイルは今後もなくなりません。
ちなみにソフトウェアの設定は主に以下の3つのうちどれかを使い設定することが大半です。
- コマンドのオプション(argv配列)
- 設定ファイル(/configコマンド)
- 環境変数(.envファイル)
この中で設定ファイルや.envファイルはどこかのディレクトリに存在する必要があり、場合によってはファイル読み込みや環境変数呼び出しにおいてパーミッションの問題も発生します。
そのため一番取り回しやすいのはコマンドのオプション(argv配列)になるのですが、実際Agent Skillsのスクリプトを作るうえでもこのargv配列がとても重要な役割を果たします。
話が少しそれましたが、とにかく設定ファイルや環境変数で設定できる内容は大事だという話です。
--append-system-prompt Option
上記の通り、コマンドのオプションはとても使いやすく、Claude Codeでも--append-system-promptオプションという、システムプロンプトに追記できるオプションが存在します。
これは一番最初に紹介したCLAUDE.mdにおけるAIエージェントやコーディングエージェントの全ての処理で使用する簡単なInstructionsを指定したいケースで使うことができます。
--append-system-prompt="All output MUST be in Japanese."や--append-system-prompt="$(cat ROLE.md)"といった感じで使えます。
Output Style
Claude CodeのOutput StyleはClaude CodeのSystem Promptを置き換えることができます。
--append-system-promptオプションはSystem Promptに追記する機能でしたが、Output Styleは完全にSystem Promptを書き換えることができる機能です。
ただClaude CodeのSystem Promptはよくできており、書き換えることによってTool CallingやSubagentsの呼び出しにも影響するので、コーディングエージェントの振る舞いを変える目的で使うのは避けたほうがいいでしょう。
コーディングエージェントをAIエージェントやAIチャットとして使うときや、今後またアホになった時に使うのがいいでしょう。
Rules
なんか記事書くの飽きてきたのでNano Banana Proで生成した4コマでも置いておきます。

RulesはGlobで対象のファイルを指定できるCLAUDE.mdです。
こう聞くとすぐAgent Skillsの影響で置き換えられそうな機能に見えますが、Agent SkillsはUser Promptを推論し段階的開示を行いますが、RulesはGlobとマッチしたファイルごとの段階的開示を行うため、Agent Skillsでは再現できないInstructionsを指定することができます。
例えばPythonの文字列はダブルクォーテーションを使用するとか、そういったことをスクリプトを使用せずにできるようになります。
ちなみにGlobを**/*にするとCLAUDE.mdとほぼ同じ動作をするようです。
CLAUDE.mdいらんやんけ……。
Subagents
Nano Banana Proで生成した4コマです。

SubagentsはマルチAIエージェントを動かすうえで欠かせないもので、今まで紹介した機能の中で今後最も重要になってくるであろう機能です。
何と言っても様々なエージェントごとにコンテキストウィンドウが存在し、ツールとスキルを複数指定することができるため、役割を分けて動かすことで生産性が2倍3倍と増えていきます。
もちろん人間がレビューする量も2倍3倍と増えていくので、仕様駆動開発で計画的にやったりレビュー用のスキルを作ったりする工夫が必要になります。
ただDevinを開発したCognition AIのWalden YanさんによるとマルチAIエージェントの結果を用いたState管理がものすごく難しくなるそうなので、Agent Skillsの登場によって改めてマルチAIエージェントが行うべきコンテキストエンジニアリングを考え直す必要性があるかもしれません
Outro
ここまでClaude Codeの設定や機能を前提として話を進めてきましたが、最後にAIエージェント、コーディングエージェント全般に言えることをまとめて終わりにしたいと思います。
- 今後はAgent Skills/Subagents/Rulesを組み合わせて自走力の高いマルチAIエージェントを生み出せるかが鍵となる
- Output Style/
--append-system-promptオプション/settings.jsonファイルのような設定方法は非常に分かりやすく、AIエージェントの使いやすさに直結する - MCP/LSPのようなクライアントサーバーモデルをコーディングエージェントに実装するのは非常に難しく、リターンも少ないのでAgent Skillsで補完するようになるのではないか
- Hooks/Custom Slash Commands/CLAUDE.md (AGENTS.md)を頑張るのはやめてAgent Skillsをやったほうがいい
References
Discussion