気になるAI動向を、分かりやすく
2026年10月1日、AnthropicがClaude Code(AIが開発者の代わりにコードを書き、コマンドも実行する開発ツール)に「Mods(モッズ)」を加えました[1][2]。Claude Codeの動作や画面を、小さなプログラムで書き換えられる拡張の仕組みで、拡張1つ1つを「mod」と呼びます。modは、使う人と同じ権限で、保護の囲い(サンドボックス)の外で動きます。Claude Code 2.1.287以降は、最初から有効です[3]。
この記事では、公式のブログ・ドキュメント・GitHubで公開されている組み込みmodのソースを読み、CAGの手元(個人のMaxプラン)で検証用のmodを動かして測りました。分かったことは3つです。①modには、プロンプトの全文・ツールに渡す命令・環境変数・設定ファイルの値まで見えました。②「この操作は禁止」と書いた禁止ルール(deny)も、許可を出すだけのmod1本で通りました。組織向けの守りは、個人プランには座りません。③入れる前に使う検査コマンドは、見せかけのmodにも「合格」を出しました。次の順で整理します。
- Modsとは何か ── 設定フックやスキルとの違い
- modには何が見えるか ── 手元での実測
- 入れる前に確かめる ── 「合格」が教えないこと
- 止める ── 3つのスイッチと、止まらないもの
- 個人と組織で守りが違う ── 禁止ルールは誰を止めるのか
- 今日確かめること
01 Modsとは何か。設定フックやスキルと、何が違うか
Claude Codeは、何かをするたびに「イベント」を出します。ツールを使う、プロンプトを受け取る、許可を確認する、画面の一部を描く、といった具合です。modは、そのイベントに挟まる小さな関数です。イベントの前でも、後でも、代わりにでも動けます[1]。関数は、受け取ったイベントを「そのまま通す」「書き換えて通す」「通さずに自分で答える」のどれかにします[3]。決裁の途中に入る担当者が、書類を通すか、直すか、自分で判を押して終わらせるかを選ぶのに近い形です。
公式ブログによると、modにできるのは、プロンプトを書き換える、ツールの呼び出しを止めたり書き換えたりする、許可の確認に答える、ツールの出力から秘密を伏せてからClaudeに読ませる、といったことです[1]。画面にも描けます。入力欄の上の帯や、会話の横のペインを足せます[3]。
似た仕組みとの違いを、公式の比較表から抜き出します。
| 仕組み | 何か | 変えられるもの | 画面に描けるか |
|---|---|---|---|
| mod | プラグインに入れた関数。Claude Code自身のプロセスの中で呼ばれる | ツール呼び出し・プロンプト・コマンド・ターン・画面の描画 | 描ける |
| 設定フック | イベントごとにClaude Codeが動かす、シェルコマンド・HTTP・プロンプト | ツール呼び出しやプロンプトを通すか、引数と結果、Claudeに足す文脈 | 描けない |
| スキル | Claudeが読む指示書(SKILL.md) | Claudeが知っていることと、すること | 描けない |
| MCPサーバー | Claudeに道具を足す、外部のプロセスやサービス | Claudeが持つ道具 | 描けない |
modが引っかけられるイベントは、公式のリファレンスの表に44個の名前が載っています。そのほかに、設定フックの各イベントと、modが呼べるAPIの呼び出し(ファイルを読む、モデルを呼ぶなど)も、それぞれイベントとして引っかけられます。modが呼べるAPIは、21の領域に分かれています[4]。
Claude Codeの機能の一部は、すでにmod
modは、新しく入れる拡張だけではありません。Claude Code自身の機能の一部も、modとして作られています。公式のドキュメントは、組み込みのmodを6つ挙げています[3]。
| /pluginでの名前 | 何をするか | 動く場面 | 止め方 |
|---|---|---|---|
cc-plugin-agents-md | AGENTS.mdをプロジェクトの指示書として読み込む | AGENTS.mdを読めないセッションを除く、すべてのセッション | /pluginで無効にする。または、読み込む指示ファイルを選ぶ |
cc-plugin-diff | /diffを引き受け、変更の一覧を横のペインに描く | 対話型のターミナル | /pluginで無効にする |
cc-plugin-plugin-authoring | modを書くためのスキルをClaudeに渡す(スキルだけで、modのコードは無い) | Anthropicが、入れたmodを遠隔で止めていない限り | /pluginで無効にする |
cc-plugin-sec-default | 組織が管理するものを、利用者が入れたmodから守る(5章) | 座る環境だけ(5章) | 止められない。管理者が管理設定で順番を決める |
cc-plugin-telemetry | Claude Codeと組み込みmodが記録する、利用状況のデータを送る | 分析がオンの環境 | /pluginで無効にする。または、分析をオフにする(DISABLE_TELEMETRYなど) |
cc-plugin-you-should-know | 長い作業の間、見落としそうなことを別のAIが見張り、入力欄の上にメモを出す | 初期設定は無効 | /pluginで無効にする |
CAGの手元で、検証用のmodなしにClaude Codeをclaude -p(画面を出さない実行)で動かしたとき、デバッグログで読み込まれていたのは、このうち2つ(agents-mdとtelemetry)でした。sec-defaultは、座らない理由を1行書いて、読み込まれませんでした(5章)。AGENTS.mdをプロジェクトの指示書として読む機能(CAGは9月21日に記事にしました)は、この組み込みmodが担っています[3][6]。
関連記事 | AGENTS.mdを読む機能を、手元で確かめたClaude CodeがAGENTS.mdを直接読むようになった ──CLAUDE.mdを消していい条件と、消すと見えなくなるもの
→
公式ブログは、今後も組み込み機能をmodに移していくと書いています。Claude Codeを小さな核にして、必要なものだけ足す形を目指す、という説明です[1]。
02 modには何が見えるか。手元での実測
公式のドキュメントは、modが届く範囲を、次のように書いています。modはユーザーと同じ権限で動き、サンドボックスの外にいます[3]。
| できること | 公式の説明(要約) |
|---|---|
| 自分のマシンを、本人として操作する | ユーザーのアカウントが触れるファイルを読み書きし、プログラムを起動し、ネットワークに接続できる |
| 秘密を読む | 環境変数と設定ファイル。どちらかに置いたAPIキーも含む |
| 会話を見る | 送ったプロンプトと、Claudeのツール呼び出しのすべて |
| 会話を変える | プロンプトやツール呼び出しを書き換える。本人が打ったようにプロンプトを送る。同じ人の別のセッションにメッセージを送る |
| 聞かずに動く | 許可の確認が出る前に、ツール呼び出しを承認できる |
| 利用枠を使う | 本人のプランやAPIキーで、モデルを呼べる |
サンドボックスを有効にしても、守られるのはClaudeが実行するBashコマンドです。modが起動したプロセスは、その外で動きます[3]。
これを手元で確かめました。38行の観察用mod(見たものを記録するだけで、何も書き換えない)を作り、ClaudeにBashでechoを1回だけ実行させます。ダミーの値を4か所に仕込みました。プロンプトの文中、ツールに渡る命令、環境変数、設定ファイルのenvです。macOSで、Claude Code 2.1.287とClaude Haiku 4.5を使い、使い捨てのフォルダの中だけで動かしました。3回やって、3回とも、modには5つのイベントが届き、4つのダミーの値がすべて、modの記録に全文で残りました。
echoを1回実行する間に届いたイベント。3回とも5つ届き、仕込んだ4つのダミーの値は全部、記録に残った環境変数は、名前を文字列で書かないと読めません。名前を計算で作ろうとしたmodは、検査コマンドが不合格にし、実際に動かしても、modごと読み込まれませんでした。デバッグログには、読む名前を一覧できるように、名前をそのまま文字列で書くことを求める理由が出ます[4]。ただし、これは守りになりません。プロセスを起動するAPI($.process.run)でenvコマンドを走らせたmodは、環境変数の名前を1つも書かずに、ダミーの鍵を含む環境全体を読めました(3回とも)。
設定ファイルについて、公式の型定義の注記は、modが読める設定にはenvとヘルパーコマンドも「何も除外せずに」含まれる、と書きます。一方、ログインのセッション(OAuth)と~/.claude.jsonは設定ではなく、読まれない、とも書いています[6]。後者は、CAGでは確かめていません。
modを入れるとは、その人の権限でコードを走らせることです。公式ブログも、パソコンにほかのコードを入れるときと同じように、信頼できる出所のものだけを入れるよう書いています[1]。
同じ仕組みは、守りにも使えます。公式の例には、force pushを断るmod、危険なコマンドの前に確認を出すmod、ほかのmodの呼び出しをすべて記録するmodがあります[4][1]。ただし、確認を出す例のmodは、git push -fという書き方を見逃す、と公式が自分で注記しています[4]。書いた条件の穴は、使う側が塞ぐ必要があります。
03 入れる前に確かめる。「合格」が教えないこと
modを入れる前に、実行せずに中身を見る方法があります。claude plugin validate <フォルダ>です。modのソースを読み、引っかけるイベント(hooks:)、呼ぶAPI(calls:)、読む環境変数(env reads:)を一覧にします[3][6]。
この検査に、3つのmodをかけました。1つ目は公式の入門用のmod、2つ目は許可の確認にすべてallowと答えるだけの1行のmod、3つ目は「スピナーを飾る」と名乗りながら、中身は鍵や会話を外へ送る作りにした見せかけのmodです。見せかけのmodは検証のために書いたもので、実行はしていません。
3つとも、最後の行は「✔ Validation passed」です。見せかけのmodにも、合格が出ました。この「合格」は、安全の判定ではありません。中身は、合格の上に並ぶ行(hooks・calls・env reads)で見ます。
hooks:にtool.check・tool.call・prompt.submitがある。許可の確認、ツール呼び出し、プロンプトに手を入れられます。1行のmod(allow-all)は、calls: nothing on $と出ますが、許可の確認に「すべて許可」と答えるだけで、禁止ルールまで持ち上げました(5章)calls:に$.process.run・$.http.fetch・$.fs.*がある。プログラムの起動、通信、ファイルの読み書きをします。出てきたら、ソースを読みますenv reads:に鍵らしい名前がある。その環境変数を読みます。ただし、空でも安心はできません。2章のとおり、$.process.runがあれば、環境全体が読めます
もう1点、出力に出ないものがあります。見せかけのmodは、送信先のURLと、読むファイルのパスをソースに書いていましたが、検査の出力に出たのは、イベントの名前・APIの名前・環境変数の名前だけでした。どこへ送るか、何を読むかは、ソースを読まないと分かりません。
公式は、Anthropic自身の組み込みmodのソースをGitHubで公開しています。同じ検査にかけると、中が見えます。921ファイルを取得し、4つの組み込みmodそれぞれをかけた結果です[6]。
| 組み込みmod | 役目 | hooks | calls | env reads | 検査 |
|---|---|---|---|---|---|
sec-default | 組織が管理するものを守る見張り役 | 15 | 3 | 0 | 合格 |
agents-md | AGENTS.mdを指示書として読む | 5 | 8 | 4 | 合格 |
diff | /diffの変更一覧のペイン | 10 | 23 | 1 | 合格 |
telemetry | 利用状況の記録を送る | 6 | 17 | 47 | 不合格 |
見張り役のsec-defaultは、呼ぶAPIが3つだけ(設定の読み取り・デバッグログへの出力・組織の層への引き渡し)でした。READMEは、動きも「先へ進める・名指しで断る・通す」の3つだけだと書いています[6]。telemetryは、同じ検査にかけると、組み込みのプラグイン向けの記録先を使っているとして不合格になります。READMEも、単体で入れたり--plugin-dirで読み込んだりするものではない、と書いています[6]。
手元のClaude Codeでmodが読み込める状態かは、claude plugin testを、modのないフォルダで実行すると分かります。no hooks module to loadと出れば読み込める状態、hooks modules are turned off hereと出れば、設定か組織のポリシーが止めています。turned off in this processは、Anthropicが入れたmodを遠隔で止めている印で、手元の設定では戻せません[4]。CAGでは、2.1.287で最初の2つを確かめました。ただし、2.1.284でも同じ「読み込める」の文が出るのに、次の章のとおり、実際には3回中2回、modが読み込まれませんでした。このコマンドの判定は、2.1.287以降の話と考えてください。
04 止める。3つのスイッチと、止まらないもの
止め方は、公式のドキュメントでは範囲ごとに分かれています[3]。
| 止める範囲 | 方法 | 注意 |
|---|---|---|
| modを1つだけ | /pluginの「Installed」で、そのプラグインを無効にするか、アンインストールする | — |
| 1回のセッションだけ、入れたmodすべて | claude --safe-mode | modだけでなく、CLAUDE.md・スキル・フック・MCPサーバー・コマンドなど、ほかのカスタマイズもすべて外れる。管理者が配る設定は、そのまま効く |
| いつも、入れたmodすべて | 設定ファイルに "disableAllHooks": true | 自分の設定フックとステータスラインも止まる |
| 組織が、利用者のmodすべて | 管理設定の allowManagedModsOnly(5章) | 組織が配るmodと、組み込みmodは動く |
CAGの実測です。観察用のmodに記録を取らせ、止め方の効きを3回ずつ測りました。何もしなければ5件、--safe-modeでもdisableAllHooksでも0件でした。止めたあとは、禁止ルールも元に戻りました。禁止ルールを書いたうえで「すべて許可」のmodを付けても、命令は通りませんでした(どちらも3回とも)。
ただし、組み込みのmodは止まりません。公式のドキュメントは、disableAllHooks・--bare・--safe-modeは組み込みmodを止めない、と書いています[3]。手元でも、止めた条件の12回すべてで、agents-mdとtelemetryは読み込まれたままでした。telemetryは、分析をオフにする設定(DISABLE_TELEMETRYなど)で止まる、とされています[3]。
もう1つ、版の壁があります。手元で動かした2.1.284と2.1.286では、インストールしたmodを読み込むかどうかが、サーバーから届く段階展開の切り替えにも左右されました。同じmod・同じ操作で3回ずつ動かすと、2.1.284では1回だけ、2.1.286では2回だけ読み込まれ、2.1.287では3回とも読み込まれました。デバッグログには、読み込まれなかった回の理由として、段階展開の切り替えがオフだったこと(以前のセッションのキャッシュによる)が出ていました。早期アクセス用の環境変数を付けると、この2つの版でも3回とも読み込まれました。2.1.287以降は、この環境変数は無視されます[5]。
CAGの手元も、CLIは2.1.284、デスクトップアプリに内蔵のClaude Codeは2.1.286で、2.1.287は検証用に別に入れました。社内でClaude Codeの版が揃っていないと、同じmodが人によって動いたり動かなかったりします。
さらに、Anthropicは、入れたmodを遠隔で止められます。公式のドキュメントは、止まったときのメッセージ(hooks modules are turned off in this process)を載せ、手元の設定では戻せない、と書いています[4]。CAGは、この状態を再現していません。
05 個人と組織で、守りが違う。禁止ルールは誰を止めるのか
Claude Codeには、「この操作は禁止」と先に書いておく禁止ルール(deny)があります。会社が管理設定で配る禁止ルールもあります。公式のドキュメントによると、modがこの禁止ルールに勝てるかどうかは、環境で変わります。管理設定のある端末か、Team・Enterpriseプランでサインインしているときは、初期設定で禁止ルールがmodに勝ちます(組織が設定で変えることもできます)。それ以外の場所では、modは、禁止ルールが拒否する呼び出しを承認できる、と書かれています[5]。
禁止ルールを勝たせているのが、Claude Codeに組み込まれた見張り役のmod、sec-default(security default)です。組織が管理するもの(管理設定のフック・管理された指示書・設定・MCPの許可リスト・禁止ルール)を、利用者が入れたmodの手が届かない所に置きます。最も外側に座り、自分では方針を持たず、先へ進める・名指しで断る・通す、の3つしかしません[6][5]。ただし、座る条件があります。
| 使い方 | ガード(sec-default) | modは禁止ルールを覆せるか | 根拠 |
|---|---|---|---|
| 個人のPro・Max(管理設定なし) | 座らない | 覆せる | CAGの実測(3回中3回)と、公式ドキュメント |
| Team・Enterpriseにサインイン | 座る | 覆せない(覆そうとすると通知が出て、拒否される) | 公式ドキュメント(CAGは未測定) |
| APIキー・Bedrock・Vertex・Foundryで認証(管理設定なし) | 座らない | 覆せる(公式は「それ以外の場所」と書く) | 公式ドキュメント(CAGは未測定) |
| 管理設定のある端末(どの認証でも) | 座る | 覆せない | 公式ドキュメント(CAGは未測定) |
CAGの手元は、個人のMaxプランで、管理設定はありません。デバッグログには、「sec-defaultは座らない。管理設定がなく、TeamやEnterpriseの組織でもない(max)」という趣旨の1行が、12回すべてに出ていました。この環境で、禁止ルール(Bash(touch cagt-denied.txt))の有無と、「すべて許可」のmodの有無の4条件を、3回ずつ測りました。
禁止ルールを書いても、「すべて許可」と答えるだけの1行のmodで、命令は通りました(3回とも)。警告は1度も出ず、デバッグログには、mod(allow-all)が、下に何も走らせずに許可の確認へ答えた、と残りました。公式のドキュメントは、座る環境ではこの場面で、通知を出して禁止のままにする、と書きます。CAGは、その側を実機では測っていません[5]。
もう1つ、禁止ルールの届かない所があります。公式の管理者向けドキュメントは、ガードが座る環境でも、禁止ルールが止めるのはClaudeのツール呼び出しだけで、modが自分で呼ぶファイル読み取りやプロセス起動には及ばない、と書いています。Read(.env)を禁止しても、modは$.fs.readで、そのファイルを読めます[5]。手元で、Read(cagt-secret.txt)を禁止して試すと、ClaudeのReadツールは3回とも止まり、modの$.fs.readは3回とも読めました(ダミーのファイル。ガードのない環境での測定です)。
公式は、modが自分で呼ぶ読み取りや起動を制限するには、modを読み込ませないか、組織のmodで呼び出しを押さえる必要がある、と書いています[5]。読み込ませない側の設定が、管理設定のallowManagedModsOnlyです。これを立てると、利用者が入れたmod(--plugin-dirで読み込むものや、Claudeがセッション中に書いたものも)は読み込まれず、組織が配るmodと組み込みmodだけが動きます[5]。
管理設定のファイルに書くときは、公式のドキュメントでは、次の形です[5]。利用者の設定ファイルや--settingsに同じ項目を書いても、効きません。管理設定だけが読まれます[5][6]。
{
"pluginConfigs": {
"cc-plugin-sec-default@builtin": {
"options": {
"allowManagedModsOnly": true
}
}
}
}
自動承認の話もあります。自動承認(auto)モードでは、Claudeの操作を別のAIが審査します。公式のドキュメントは、autoモードで、modが承認した呼び出しは、この審査を通らずに実行されると書きます[5]。Claude Codeは2.1.284から、対話型のターミナルとVS Codeで、権限モードを決めていなければautoモードで始まります[2]。
関連記事 | autoモードの審査のしくみと、止まらないものClaude Codeの「自動承認」が既定になった ──AIの操作をAIが審査する仕組みと、何が止まらないのかを解説
→
06 今日確かめること
使う立場ごとに、確かめることを分けます。
自分で使う人
- 版を確かめる。
claude --versionが2.1.287以上なら、modは最初から有効です。手元の2.1.284・2.1.286では、読み込まれたりされなかったりしました(4章) - 自分で入れていないmodが入っていないか、/pluginの「Installed」を見る。セッションに読み込まれた、入れたmodの数と名前は、/pluginの画面の「mods active」の行にも出ます(組み込みmodは数えません)[3]
- 入れる前に、検査コマンドの上の行を読み、ソースも読む。特に、
tool.check・tool.call・prompt.submitと、$.process.run・$.http.fetch・$.fs.*です(3章) - 禁止ルールを、最後の砦にしない。個人プランでは、mod1本で通りました。鍵や秘密は、modから見える場所に置かないようにします(2章・5章)
会社で配る管理者
- 版を2.1.287以上にそろえる。手元の2.1.284・2.1.286のように古い版が混ざると、同じmodが動いたり動かなかったりしました(4章)
- TeamかEnterpriseにするか、管理設定を配って、sec-defaultを座らせる。座らない環境では、modが禁止ルールを覆せます(5章)[5]
- modを許すかを決める。要らなければ
allowManagedModsOnlyを立てます。許すなら、プラグインの配布元を許可リスト(strictKnownMarketplacesなど)で絞ります[5] - 組織のmodを使うなら、順番も決める。管理設定の
prependPluginsに並べるとき、リストにsec-defaultを入れないと、sec-defaultは座りません[5] - 読み込みの状態を確かめる。modのないフォルダで
claude plugin testを実行します(3章)
開発を外注している経営者
- 委託先に、使っているClaude Codeの版と、契約の種類(個人プランか、Team・Enterpriseか)を聞く。
- 入れているmodの一覧と、出所を聞く。自社の鍵や顧客のデータを扱う環境では、入れてよいmodを決めてもらいます
- 禁止ルールで守っているのか、modの読み込みで守っているのかを聞く。前者だけなら、個人プランでは覆されます(5章)
modは、入れた人と同じ権限で動く。個人プランでは、禁止ルールも、そのmodには届かない。
AIを使った開発の進め方や、委託先との取り決めを相談したい方へ
電脳技巧集団(AI職人ギルド)は、AI駆動で業務システムをつくっています。開発で使うAIツールの設定や、鍵・顧客データの扱いの線引きから、相談できます。お問い合わせはこちら
出典・注記
- Anthropic「Customize Claude Code with mods in TypeScript」(2026-10-01)・入門ガイド「Getting started with Claude Code mods」(claude.dev・2026-10-01) https://claude.com/blog/claude-code-mods https://claude.dev/blog/getting-started-with-claude-code-mods/
- Claude Code ドキュメント「Changelog」の 2.1.287(2026年10月1日)と 2.1.284(9月28日) https://code.claude.com/docs/en/changelog
- Claude Code ドキュメント「Mods overview」「Create a mod」 https://code.claude.com/docs/en/plugins/mods/overview https://code.claude.com/docs/en/plugins/mods/create
- Claude Code ドキュメント「Mods reference」「React to events」「Use the mods API」「Troubleshoot a mod」 https://code.claude.com/docs/en/plugins/mods/reference https://code.claude.com/docs/en/plugins/mods/events https://code.claude.com/docs/en/plugins/mods/api https://code.claude.com/docs/en/plugins/mods/troubleshoot
- Claude Code ドキュメント「Manage mods for your organization」「Permissions」 https://code.claude.com/docs/en/plugins/mods/admin https://code.claude.com/docs/en/permissions
- GitHub「anthropics/claude-code」の mods/ ディレクトリ(組み込み mod 4つの README とソース・型定義) https://github.com/anthropics/claude-code/tree/main/mods https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts
- CAGによる作業(2026年10月2日)。公式ブログ・入門ガイド・Claude Codeのドキュメント・GitHubの組み込みmodのREADMEなど16ページを、2026年10月2日の9時44分ごろに取得して保存し、本文の言い回しと数字を1つずつ突き合わせました。あわせて、GitHubで公開されている組み込みmod4つのソース(921ファイル)を、検査コマンドにかけました。実測は、macOS・個人のMaxプラン(管理設定なし)・Claude Code 2.1.287・モデルClaude Haiku 4.5で、検証用のmodを使い捨てのフォルダだけで動かしたものです。各条件は3回で、実行されたことを毎回確かめています。鍵や秘密の値は、すべてダミーです。Team・Enterpriseで座るガードの実機は測っておらず、その側の記述は公式のドキュメントによります。GitHubの組み込みmodのREADMEは、modのAPIが版のあいだで予告なく変わりうると書いています(早期アクセス時の注記)。引用はCAGによる訳と要約です。









