Claude Code に mods が登場:何ができるか、入れる前に知っておくこと、止め方
AI開発者の手帖
Claude Code の10月1日の版(2.1.287)で、mods という仕組みが入りました。プラグインに JavaScript や TypeScript の関数を入れて、Claude Code の画面やツール呼び出しの扱いを変えられるものです。既定でオンになっています。Claude Code を使っていて、プラグインを入れることがある方に関係します。Claude Code を使っていない方には、まだ関係しません。筆者は Claude Code の設定や権限の仕組みを公式資料と照らして追い、有料記事でも扱ってきました。本稿は、changelog、mods の概要、組織向けの管理、mod の作り方、権限のページを10月3日に突き合わせてまとめたものです。
何が出たか
mods の概要によると、mod はプラグインの一種で、イベントごとに呼ばれる関数でできています。ツール呼び出し、送ったプロンプト、画面の描画などのイベントが起きると Claude Code が関数を呼び、関数はそのイベントを見るだけにするか、書き換えるか、自分で引き取るかを選べます。設定ファイルに書く従来のフック(シェルコマンドなどを外で走らせるもの)と違い、mod は Claude Code の中で動きます。
使うには 2.1.287 以降が必要で、既定でオンです。CLI と、デスクトップアプリの Code タブ(WSL のセッションを除く)で動きます。VS Code 拡張のチャット欄や claude -p では関数は動きますが、mod が描く画面は出ません。
何ができるか
概要のページが挙げる例は次の5つです。
- 会話の横のペインや、プロンプトの上の帯を描き、タブ・ボタン・入力欄を置く
- ツール呼び出しの行やスピナーなど、Claude Code が描く部分を描き替える
- ツール呼び出しやリクエストに割り込む(利用者に確認するまで止める、ツールを走らせずに答える、1つのリクエストだけ別のモデルへ送る)
- Claude の応答を待たずに自分の関数を走らせる /command を足す
- 関数どうしでデータを共有する(ツール呼び出しを数え、その数をスピナーの横に出す)
手に入れ方は3通りです。マーケットプレイスからプラグインとして入れる、セッションの中で Claude に書かせる、Anthropic が公開している見本を試す、です。mod の作り方によると、Claude に書かせた mod は、そのセッションで読み込むかを最初に聞かれ、承認すると動きます。/diff のように、Claude Code 自身の機能にも mod で作られたものがあります。changelogには、作業中に見落としを知らせる組み込みの mod「You should know」も加わったとあります。既定では無効で、changelog は対象をテレメトリが有効なファーストパーティのセッションとしており、使える場合は自分で有効にします。
入れる前に知っておくこと
mod は、それを動かす利用者の権限で動きます。mods の概要は、mod が読み込まれると、利用者として次のことができると書いています。
- どこのファイルでも読み書きし、プログラムを起動し、ネットワークに出る
- 環境変数や設定ファイルにある API キーなどを読む
- 送ったプロンプトと、Claude のツール呼び出しをすべて見る
- プロンプトやツール呼び出しを書き換え、利用者が打ったかのようにプロンプトを送り、自分の別のセッションへメッセージを送る
- 確認を出す前にツール呼び出しを承認する
- 利用者のプランや API キーでモデルを呼ぶ
mod はサンドボックスの中では動きません。サンドボックスを有効にしても、Claude が走らせる Bash のコマンドが隔離されるだけで、mod が起動したプログラムはその外で動きます。
許可のルールとの関係も変わります。権限のページによると、mod は ask ルール(確認を出すルール)と、managed settings 以外にある PreToolUse フックの拒否を越えて承認できます。auto mode では、mod が承認した呼び出しは分類器の確認を受けずに走ります。deny ルール(拒否するルール)が既定で mod より優先されるのは、managed settings のある端末か、Team・Enterprise プランでログインしているときだけで、その場合も組織はこの扱いを変えられます。それ以外の環境では、mod は deny ルールが拒否する呼び出しも承認できます。また、組織向けの管理によると、deny ルールが効くのは Claude のツール呼び出しに対してで、mod 自身がファイルを読む・プログラムを起動する呼び出しには効きません。たとえば Read(.env) を拒否していても、mod はそのファイルを自分で読めます。個人のプランで、組織の管理が無い端末で使っている方は、この「それ以外」に当たります。
確かめ方と止め方

mods の概要と組織向けの管理のページをもとに、mod を入れる前・入れた後・止めるときにすることを筆者が1枚にまとめたものです。組み込みの mod には、/plugin で個別に無効にできるものがあります。disableAllHooks は、リポジトリのプロジェクト設定が false を書くとそちらが優先されます(本文参照)。
入れる前に中身を確かめるには、プラグインのファイルを手元に取ってから、そのディレクトリを指定して claude plugin validate を走らせます(例:claude plugin validate ./some-mod)。組織向けの管理によると、出力の hooks: の行に mod が受け取るイベント、calls: の行に mod が使う機能が出ます。たとえば calls: に $.process.run があればプログラムを起動し、$.http.fetch があればネットワークに出ます。hooks: に tool.check があれば、確認を出す前にツール呼び出しを承認したり拒否したりできます。
自分で入れた mod のうち読み込まれているものは、セッションで /plugin を開くと「1 mod active」のような行に名前が出ます(組み込みの mod はこの行に出ず、Installed タブの Built-in に並びます)。止め方は、止めたい範囲で選びます。
- 1つの mod:/plugin でそのプラグインを無効にするか、外す
- 1回のセッションだけ全部:claude --safe-mode で起動する(ほかのカスタマイズも止まる)
- 自分が入れた mod を全セッションで:~/.claude/settings.json に "disableAllHooks": true を入れる(設定ファイルのフックとステータスラインも止まる)。ただし権限のページによると、リポジトリのプロジェクト設定が false を書いているとそちらが優先されるので、user settings に入れるだけでは足りないことがあります。そのリポジトリで1回確実に止めるなら、claude --settings '{"disableAllHooks": true}' で起動します
組み込みの mod は、--safe-mode と disableAllHooks では止まりません(/plugin で個別に無効にできるものはあります)。早期アクセスのころの環境変数 CLAUDE_CODE_ENABLE_FUNCTION_HOOKS は 2.1.287 以降では無視されるので、0 にしていても mod は止まりません。組織で管理している場合は、managed settings の pluginConfigs の中で、組み込みの守りの mod(cc-plugin-sec-default@builtin)の options に allowManagedModsOnly を true で入れると、利用者が持ち込んだ mod を読み込ませないようにできます。
まだ分からないこと
- mod の API や既定の扱いが、今後の版でどう変わるか(10月1日に入ったばかりの機能です)
- 公開されているマーケットプレイスに、mod を含むプラグインがどれだけ出てくるか
次にやること
プラグインを入れている方は、まず /plugin で、いま動いている mod があるかを見ておくのがよいと筆者は考えます。新しく入れるときは、入れる前に claude plugin validate で hooks: と calls: を読み、知らない作者のものは入れないのが安全です。止めたい操作を deny ルールだけに任せている方は、mod が入るとその前提が崩れうることを覚えておいてください。既刊の有料記事では、許可ルールの効き方が変わった例として、2.1.280 から symlink 越しの書き込みが綴りだけの allow では通らなくなった件と、その直し方を実測で扱っています。

参考になったら、記事下部のライクとXの共有ボタンから応援してもらえるとうれしいです。
