コンテンツにスキップ

Modは実際に何に触れるのか

基準: コミュニティカタログの2026-10-04スキャン、Claude Code 2.1.289

検証を警告なしで通過したMod 1,488個が、どのAPIを呼び出し、どのイベントを受け取るかを数えました。データは awesome-claude-code-mods カタログです。各APIの意味は、Claude Code 2.1.290が配布する型ファイル claude-code.d.ts で確認しました。

カタログはModを実行しません。claude plugin validate がソースを読んで出力する calls: 行と hooks: 行を集め、ルール表でランク付けしています。そのため、次のことはわかりません。

  • $.http.fetch がどのアドレスに何を送るのか
  • $.process.run がどのプログラムを実行するのか。型ファイルには “what a command of its own reaches is its own” と書かれています。実行した curl や gh がネットワークに出ても、カタログはネットワークとして数えません。
  • フックが実際に何回動くのか、デフォルトで有効になっているのか

ランクは「できること」の上限です。実際にやっていることの証拠ではありません。

カタログは、Modが呼び出す $ の呼び出しのうち最も広いものでランクを決めます。

ランク 基準となる呼び出し Mod 割合
0 画面・記憶 $.ui.*, $.store.*, $.audio.* 173 11.6%
1 読み取り $.fs.read, $.env.get, $.settings.read, $.session.messages 338 22.7%
2 書き込み・実行 $.process.run, $.fs.write, $.config.set, $.prompt.submit, $.model.* 782 52.6%
3 ネットワーク $.http.fetch, $.mcp.call 195 13.1%

半数以上がランク2です。ランク2だけではModを選り分けられないということです。

ランク1には水増しがあります。カタログのルール表に $.state がないため、未知の呼び出しとみなしてランク1に引き上げています。$.state はセッションの間ホストが保持する値で、ファイルやシークレットには触れません。ランク1の338個のうち178個は、$.state のせいで引き上げられたものです。これを除くと、ランク0は351個(23.6%)になります。

表示 Mod 割合 対応する呼び出し
状態の保存 611 41.1% $.store.*
プロセスの実行 594 39.9% $.process.run
ファイルの読み取り 563 37.8% $.fs.read・list・stat・exists
環境変数の読み取り 522 35.1% $.env.get
Claudeの操作 494 33.2% $.prompt.submit, $.model.*, $.tool.register, $.command.run, $.session.compact, $.turn.abort, $.agent.spawn
ファイルの書き込み 252 16.9% $.fs.write
ネットワーク 170 11.4% $.http.fetch
会話履歴の読み取り 159 10.7% $.session.messages
入力欄への書き込み 123 8.3% $.prompt.fill・suggest
設定の読み取り 88 5.9% $.settings.read
音 70 4.7% $.audio.*
設定の変更 37 2.5% $.config.set
MCPサーバーの呼び出し 30 2.0% $.mcp.call
環境変数の書き込み 21 1.4% $.env.set

型ファイルの CoreEngineInterface が $ の標準の名前空間です。各行の説明は、型ファイルのコメントを訳したものです。

$ の名前 Mod よく使われるメソッド 型ファイルが示す範囲
ui 1,401 resolve 1,090, toast 712, open 654 画面、ウィンドウ、トースト、クリップボード
command 1,092 register 1,068 スラッシュコマンドの一覧と実行
clock 1,045 now 785, every 617 時刻とタイマー
session 863 usage 327, cwd 300, messages 144 実行中のセッションをデータとして読む、圧縮、他のセッションへのメッセージ送信
state 828 get 827, set 823 セッションの間ホストが保持する値
store 611 get 609, set 607 ユーザー設定フォルダの下にある、このMod専用のJSONファイル
process 608 run 594, spawn 49 セッションと同じユーザー権限でホストのコマンドを実行
fs 595 read 474, exists 299, write 252 エンジンプロセスが触れるファイルシステム。絶対パスはそのまま使えます
env 526 get 522, set 21 このプロセスの環境変数。Bash・MCPサーバー・実行したコマンドが引き継ぎます
prompt 276 submit 179, fill 111 ユーザーのターンとしてプロンプトを送る、入力欄の読み書き
model 206 complete 159, fork 71 セッションのクライアントと認証情報でモデルを呼び出す
tool 172 register 126, call 29 モデルが使うツールの一覧と実行
http 170 fetch 170 ホストを経由したネットワークリクエスト
agent 102 list 97, spawn 16 サブエージェント
settings 88 read 88 設定ファイルと管理ポリシー。env までフィルタせずそのまま渡します
config 75 list 54, set 37 /config メニューのすべての行
mcp 30 call 30 接続済みMCPサーバーのツール呼び出し

特に見ておきたいのが次の3行です。

  • $.settings.read は、設定ファイルの env ブロックとヘルパーコマンドをフィルタせずに渡します。設定にAPIキーを入れていると、その値もまとめて読み取られます。
  • $.env.get は、変数名を文字列リテラルでしか受け取りません。そのため、claude plugin validate の出力の env reads: 行に、Modが読む変数名がすべて表示されます。インストール前にこの行を見れば、どのキーを読むかがわかります。
  • $.model.* は、セッションの認証情報をそのまま使います。206個のModが、あなたのプランやAPIキーでモデルを呼び出します。そのうち152個は turn.complete もフックしていて、ターンが終わるたびに呼び出せる構造です。

標準の名前空間にない名前も見つかります。13個のModが engine.create イベントで $ に新しい名前を追加しています。KilimcininKorOglu/claude-code-mods の sidebar が追加する $.sidebar を同じリポジトリのMod 36個が呼び出し、lemomo-ai/lemo-mod の $.lemo を16個が呼び出しています。こうしたModは、名前を追加してくれるModが一緒にインストールされていないと正しく動きません。

tool.call は、エンジンがツールを実行する直前に呼ばれます。型ファイルによると、フックは { deny } で拒否したり、{ result } で実行せずに応答したり、入力を書き換えて next に渡したりできます。786個のMod(52.8%)がこのイベントをフックしています。

マッチャー Mod
ツール名なし(すべてのツール呼び出し) 464
Bash を含むマッチャー 168
Write 111
Edit 109
NotebookEdit 54
Read 34
PowerShell 30
AskUserQuestion 23
Agent 19
ExitPlanMode 15

Edit|Write|NotebookEdit のようにまとめたマッチャーは、名前ごとに数えました。マッチャーが変数で、スキャナーが読み取れなかったものも17個あります。464個はマッチャーなしでフックしているため、すべてのツール呼び出しの入力と結果を見ています。Bashコマンド、編集するファイルの内容、Webリクエストのアドレスが、すべてそこを通ります。ツールを実行するかどうかを決める tool.check をフックするModも64個あります。

prompt.submit は、プロンプトを送信した直後、ターンが始まる前に呼ばれます。フックは、テキストを書き換えて渡したり、{ drop } で止めたりできます。このイベントをフックするModは474個(31.9%)で、そのうち472個はマッチャーがないため、すべてのプロンプトを見ます。逆方向もあります。$.prompt.submit で、人が入力したかのようにプロンプトを送るModが179個あります。

すべてのプロンプトまたはすべてのツール呼び出しを見るModは729個です。そのうち95個はネットワークのランクです。

ネットワークMod 195個はどこへ送るのか

Section titled “ネットワークMod 195個はどこへ送るのか”

ランク3の195個のうち、170個は $.http.fetch を、25個は $.mcp.call だけを使います。アドレスは静的スキャンではわからないため、カタログの説明文をキーワードでまとめて、おおまかに分けてみました。

グループ Mod 例
判定モデルサービス(Jev・TypeSafe・Layaなど) 52 編集ごとのセキュリティチェック、圧縮タイミングの判断、モデル選び
業務サービス 27 GitHub PR、Linear、Jira、Slack、Gmail、カレンダー、Home Assistant
レジャー 29 音楽、歌詞、ゲーム、試合のスコア、株価
使用量・上限の表示 19 5時間・週間の上限バー
他のモデル・エージェント 18 Gemini、Codex、OpenAI音声
パッケージ・セキュリティ検査 6 レジストリ・OSV.devの照会
その他 44 ローカルデーモン、ブラウザ、メモリストアなど

キーワードによる分類なので境界は重なっており、その他には localhost のローカルサーバーとだけ通信するModも混ざっています。それでも、はっきりしていることが2つあります。

1つ目は、ネットワークModの4分の1以上が、判定モデルに内容を送っていることです。大半はホスティングサービスですが、Layaやollamaのように、自分のコンピューター上のローカルモデルを使うものも少数あります。たとえば jev-seclint は、Edit|Write|NotebookEdit の呼び出しのたびに、ファイルパスと編集前後のコード断片を api.typesafe.ai に送ります。ソースの register.tsx で直接確認しました。コードが外部サービスに出ていくということです。

2つ目は、別のモデルプロバイダーに会話を渡すModがあることです。gemini-review は、説明に “from the staged diff and the conversation” と書かれていて、モデルが実行する git commit のたびにGeminiにレビューを依頼します。

ネットワークMod 195個のうち115個は、環境変数も読み取ります。大半はサービスのAPIキーを読むためです。46個は会話履歴まで読みます。

  1. ディレクトリでランクと表示を確認します。ランク2はよくあるので、表示もあわせて見てください。
  2. 「すべてのプロンプト」や「すべてのツール呼び出し」を見ていて、ネットワークのランクでもあるModは、ソースで $.http.fetch が何を送るのかを探します。
  3. claude plugin validate を実行して、env reads: 行でどのキーを読むかを確認します。
  4. $.model.* を呼び出している場合は、どのイベントで呼び出すかを確認します。ターンごとに呼び出すと、使用量がその分増えます。
  5. 判断のルールはインストール前の安全チェックに従ってください。

同じデータで見たエコシステム全体の姿は、Modエコシステムの現状にあります。

非公式のコミュニティガイドです。Anthropic との提携や承認はありません。Claude および Claude Code は Anthropic の商標です。