Claude CodeでHooksを使って、危険なコマンドを止めるシェルスクリプトを書いたことがあるなら、こんな壁に当たったかもしれない。「実行を止める」ところまではできても、「何が消えるかを画面に出して確認する」ところまでは作れなかった、という壁だ。Hooksは毎回ゼロから起動するスクリプトで、前回の呼び出しの記憶を持たない。
Anthropicは2026年10月1日、この壁を越える機能「Mods」を公開した。小さなTypeScript関数がClaude Codeの中に常駐し、セッションの間ずっと状態を保ちながら、専用の画面まで描けるようになる(公式ブログ)。Hooksと何が違うから、できなかったことができるようになったのか。
Hooksでは何が止まっていたのか
Hooksは、Claude Codeの決まったタイミング(ツールを呼ぶ前、応答が終わったときなど)でシェルコマンドを実行する機能として、Modsより前からある。たとえば公式ドキュメントには、rm -rfを含むコマンドを検知して拒否するシェルスクリプトの例が載っている(Hooks reference)。
COMMAND=$(jq -r '.tool_input.command')
if echo "$COMMAND" | grep -q 'rm -rf'; then
jq -n '{hookSpecificOutput: {hookEventName: "PreToolUse", permissionDecision: "deny"}}'
fi
このスクリプトは、コマンドを受け取って「許可する」か「拒否する」かを返したら終わる。次に別のコマンドが来たときには、このスクリプトはもう一度最初から起動し、さっき何を判定したかは覚えていない。
Hooksはシェルコマンド・HTTPエンドポイント・MCPツールなど、どの種類で書いても「Claude Codeのプロセスの外」で動く外部プロセスで、呼び出しごとに独立している(同ドキュメント)。画面を描く機能もない。UIの描画は、この後に出てくるModsだけが持つ機能だと公式ドキュメントは明記している。
Modsは何が違うのか
Modsは、このHooksの仕組みをTypeScript関数で置き換える。シェルコマンドを都度起動する代わりに、Claude Codeのプロセスの内側で動く関数をHooksのイベントに登録する。公式ドキュメントはHooksとModsの違いを次のように要約している。
| 比べる軸 | Hooks | Mods |
|---|---|---|
| 動く場所 | Claude Codeの外の別プロセス | Claude Codeのプロセスの内側 |
| 状態 | 呼び出しごとに独立(ステートレス) | セッションの間、保持される |
| 画面 | 描けない | 独自のUI要素を描ける |
| 向く用途 | 自動化・ポリシーの強制 | 画面を使う拡張 |
(出典: Hooks reference「Key Differences from Mods」)
状態を保てることと、画面を描けることは別々の機能に見えるかもしれないが、実はつながっている。画面に「今どうなっているか」を出し続けるには、前の瞬間の値を覚えていなければならない。Hooksのように毎回ゼロから起動して、答えを返したら消えるプロセスには、覚えておく場所がない。
Modsがプロセスの内側に居続け、$.stateという場所に値を保存できるからこそ、1ターン前の数字を次のターンでも参照でき、その結果として画面を描ける(Getting started with Claude Code mods)。
自分は最初、HooksにTypeScriptが使えるようになっただけの変更だと思っていた。公式ドキュメントのこの比較表を読んで、変わったのは「どこで動くか」のただ一点で、そこから「状態を保てるか」と「画面を描けるか」の両方が同時に決まっていると分かった。
具体的に何ができるようになったか
公式の例ギャラリーには、組み込みのModとコミュニティ製のModが並んでいる(Claude Code Mods)。3つを見ると、状態を保ち画面を描けることで何が増えたのかが分かりやすい。
Token weather: コンテキストの消費を常に表示する
組み込みのMod「Token weather」は、プロンプトの上の帯に、コンテキストウィンドウがどれだけ埋まっているかを常時表示する。公式の説明は「コンテキストウィンドウの満杯度合いのライブ予報」というものだ(“A one-line forecast of how full the context window is, drawn above the prompt”、claude.dev/mods)。
帯に並ぶ要素は、公式のチュートリアルで次のように説明されている(Getting started with Claude Code mods)。
- 使用率に応じた5段階の天気アイコン
- 「67% of context」のようなパーセンテージ
- 「134.4k / 200k」というトークン数
- 過去12ターンの推移を示す、ブロック文字のミニチャート
この「過去12ターンの推移」こそ、Hooksでは持てなかった記憶の結果だ。毎回使い捨てのスクリプトには、12ターン分の履歴を溜めておく場所がない。
Blast Radius: 危険なコマンドの影響を実行前に見せる
「Blast Radius」は、さきほどのblock-rm.shと同じ「危険なコマンドを止める」という発想のModだが、止めるだけで終わらない。高リスクなシェルコマンドの実行を保留し、何が変更されるかをペインに表示した上で、「Proceed」「Cancel」のボタンで確認を求める(claude.dev/mods)。GIGAZINE(記事)とlivedoorニュース(記事)も同じ内容を伝えている。HooksのpermissionDecision: "deny"は結果を一言返すだけだったが、Modsは判断の根拠を画面で見せてから実行者に選ばせられる。
Replay Theater: 編集の差分を後から1つずつ確認する
「Replay Theater」は、Claudeが1ターンで行ったファイル編集を記録しておき、/replayコマンドで呼び出すと「Prev」「Next」「Close」のボタン付きペインで差分を1つずつ確認できる(claude.dev/mods)。編集した端からログに流れて消えていたものを、あとから巻き戻して見られるようにする機能も、状態を保持できるModsだから作れる。
自分でModを作るには
Modsは.claude-plugin/plugin.json・hooks/hooks.json・TypeScriptの実装ファイル・型定義・テストという構成を持つプラグインとして配布する(Getting started with Claude Code mods)。配布されているModを使うだけなら、次の手順で済む。
/pluginコマンド、またはClaudeのディレクトリからインストールするModを探す- インストール後、プラグインを再読み込みする
- CLIでもデスクトップアプリでも、同じModがそのまま動く
自分でModを書く場合は、claude --plugin-dir <作業中のフォルダ>でそのフォルダを指定してセッションを開く。ファイルを保存するたびに、今動いているセッションの中へその場でホットリロードされる。公開前にはclaude plugin validateでマニフェストを、claude plugin testで呼び出しを確認できる(同上)。
ここまで読むと、ModsはHooksより少し手間のかかる開発作業に見えるかもしれない。だが実際には、このTypeScriptを書く作業自体をClaude Codeに頼める。「コンテキストの消費を表示するModが欲しい」と頼めば、Claudeがコードを書き、保存した瞬間に、頼んだ本人が今まさに使っているその同じセッションの中へ新しい画面が現れる。ツールをいったん閉じて入れ直す必要はない。動いている最中のセッションが、自分自身を内側から書き換える格好になる。
入れる前に確認すること
ここまでの自由度には、留保が1つ付く。公式ブログは、Modsが自分のマシンへの権限をClaude Code自体とまったく同じだけ持つと明記している。
Modsは、あなたのマシンに対してClaude Code自体とまったく同じアクセス権限を持って動く。サンドボックス化はされていないので、自分のマシンに入れる他のコードと同じように、信頼できる配布元のModだけをインストールすべきだ(Anthropic、Customize Claude Code with mods in TypeScript。訳は筆者)
配布元を確かめずに入れるModは、Claude Code自体を操作できるコードを実行しているのと同じだと考えておく必要がある。Team・Enterpriseプランでは、sec-defaultという組み込みModが最初に読み込まれ、インストールされた他のModsが危険な操作をするのを防ぐ仕組みも用意されている(同上)。
まとめ
Claude CodeのModsは、Hooksが外部プロセスとして都度起動していたのに対し、プロセスの内側で状態を保ち続けるTypeScript関数として動く。状態を保てることが、そのまま画面を描けることにつながり、コンテキスト消費を常に表示する、危険なコマンドの影響を実行前に見せる、編集の差分をあとから再生するといった、Hooksでは作れなかった常駐型の機能が公式の例として揃っている。
自分で作る場合は--plugin-dirでホットリロードしながら書け、Claude自身にコードを書かせてその場で試すこともできる。その分、Modsはサンドボックス化されていないという留保を抱えたまま使う機能でもあり、配布元を確かめてから入れる判断が要る。
コメント
気づきや感想をどうぞ記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。
投稿にはGoogleログインが必要です。
Googleでログイン投稿にはGoogleアカウントの表示名が公開されます。メールアドレスは取得・公開しません。
コメントを読み込んでいます…