Claude Codeが「改造」できるようになる──Anthropicが数週間で出す「Claude Mods」、今のhooksと何が変わるのか
2026年9月9日、AnthropicのAlice Poteat氏はGitHub issue #91870で、Claude Codeの新機能「Claude Mods」(実装名 function hooks)を「数週間の規模で」出荷すると表明した。プラグインがTypeScriptの関数でClaude Code内部の出来事に割り込み、画面の部品、送る指示の本文、処理の順番まで変えられる。本記事は8ページの設計書・チートシート・同梱Mod 3本のソースと現行の公式ドキュメントを突合し、「今できること」と「Modsで変わること」を分けて整理した。

目次
2026年9月15日朝・日本時間時点の情報です。Anthropicは、Claude CodeのプラグインがTypeScriptの関数でClaude Code内部の出来事に割り込める新機能「Claude Mods」(実装上の名前は function hooks)を、数週間の規模で出荷すると表明した。発表の場は製品ページではなく、同社のAlice Poteat氏が9月3日にGitHubへ起票した提案スレッド(issue #91870)で、9月9日の更新で出荷方針と製品名が示された。同じ更新で、8ページの設計書、1枚のチートシート、Claude Codeに同梱される3本のModのソース、そして試用のための起動フラグが公開されている。
この記事は、①設計書・チートシート・スレッドのAnthropic側返答25件・同梱Modのソースに書いてあること、②現行のClaude Code公式ドキュメント(Hooks reference / Get started with hooks)に書いてあること、の2つを突き合わせ、「今のhooksでできること」と「Modsで変わること」を項目ごとに分けて整理する。ゲームを描くデモやコミュニティ製の作例には触れない。
3行まとめ
- Modは「関数フックを持つプラグイン」。今のhooksがシェルコマンドを呼ぶ仕組みなのに対し、Modsは**
($, e, next)という3引数の関数**をClaude Code内部の出来事ごとに登録し、引数も結果も書き換えられる。設計書の言葉では「シェルフックは環境との契約、関数フックはエンジンとの契約」。- 現行ドキュメントと突合すると、「ツールの結果をClaudeが読む前に差し替える」ことは今のhooksでもできる(
updatedToolOutput)。Modsで新しく変わるのは、処理の順番を決められること、送る指示の本文を書き換えられること、モデルへの要求そのものに割り込めること、画面の部品を書き換え・追加できること、Claude Code内部の操作を拡張から直接呼べること、そして何をする拡張かを読み込む前に列挙できることの6点。- 出荷時期は9月9日更新の「on the scale of weeks(数週間の規模)」で、日付は出ていない。今日から試すには
CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1を付けて起動する。早期アクセスで「APIは予告なく変わる」と同梱ModのREADMEに明記されている。
何が発表されたか
| 項目 | 内容 |
|---|---|
| 製品名/実装名 | Claude Mods/function hooks(「modはfunction hooksを使うプラグイン。それ以上でも以下でもない」と9月9日更新) |
| 発表の場 | GitHub anthropics/claude-code の issue #91870。2026年9月3日起票、9月9日に「Community Update」を追記 |
| 起票者 | Alice Poteat氏(Anthropic。設計書の著者) |
| 出荷時期 | 「数週間の規模で」(9月9日更新)。日付の明示なし |
| 公開資料 | 設計書PDF(8ページ・2026年8月付)、チートシート1枚、同梱Mod 3本(sec-default / diff / telemetry)のソース |
| 試用方法 | CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 claude で起動。/plugin-types で型定義を書き出せる |
| スレッドの規模 | 9月15日時点でコメント169件、うちAnthropic側(Poteat氏)の返答25件 |
9月3日の起票文には「出すかどうかはコミュニティの反応で決まる」とあり、9月9日の更新で次のように書かれた。
We're now committed to shipping function hooks, on the scale of weeks in lieu of days or months. As well, from a product perspective, we are going to be calling this functionality "Claude Mods". (function hooksを、日や月ではなく数週間の規模で出荷することにコミットした。製品としてはこの機能を「Claude Mods」と呼ぶ)
先に言葉を揃える
- フック(今のClaude Code):ツールを実行する前後など決まった場面で、Claude Codeが外のプログラム(シェルコマンドなど)を呼ぶ仕組み。設定ファイルに書く。
- プラグイン:スキル・エージェント・MCPサーバー・フックをひとまとめにして追加する単位。
- 関数フック:フックをTypeScriptの関数として書いたもの。プラグインの
hooks/に置いたファイルがregister(on)という関数を1つ持ち、その中でon("tool.call", ($, e, next) => …)のように「出来事の名前」と「関数」を登録する。$はModが呼べる操作の窓口、eはその出来事の中身、nextは「次の処理を呼んで結果を受け取る」ための関数。 - Mod:関数フックを持つプラグイン。同梱ModのREADMEは「A mod is a Claude Code plugin whose behaviour lives in a hooks module」と定義する。
設計書は今のフックと関数フックの違いを一文で書いている。
A shell hook is a contract with an environment; a function hook is a contract with the engine. (シェルフックは環境との契約であり、関数フックはエンジンとの契約である)
今のhooksと何が変わるのか
以下の「今」は現行の公式ドキュメント(Hooks reference / Get started with hooks)の記述、「Modsでは」は設計書・チートシート・スレッド返答の記述に基づく。
1. 前と後で別々に書いていた処理が、1つの関数になる
今:ツール実行の前(PreToolUse)と後(PostToolUse)は別のフックで、それぞれ許可・拒否(permissionDecision)、引数の書き換え(updatedInput)、結果の差し替え(updatedToolOutput)、補足の追加(additionalContext)を返す。
Modsでは:tool.call という1つの出来事に1つの関数を付け、その中で「本体の前に処理する」「本体の結果を待って書き換える」「本体と並走する」「本体を呼ばずに自分で答える」「引数を直してから渡す」の5通りを選べる(設計書 §2.2「Five Placements」)。設計書は「コマンド型のフックなら前イベントと後イベントが要るところを、1つのイベントで済む」と書く。
公式の例:設計書 Listing 1。rm -rf / を含むBashコマンドなら { deny: "…" } を返し、それ以外は next(e) で先へ渡す関数。
2. 処理の順番を自分で決められる
今:同じ出来事に反応するフックは並列に実行される。複数のPreToolUseフックが updatedInput で引数を書き換えると「最後に終わったものが採用され、順序は決定的でない」と公式ガイドに明記されている。
Modsでは:登録順で入れ子になる(Express/Koa のミドルウェアと同じ型)。先に登録した関数が外側になり、内側の関数を呼んで結果を受け取る。設計書はこれを「Order Is Nesting(順序は入れ子)」と呼び、「先に登録するほど権限が強い」と書く。
公式の例:Poteat氏の9月6日の返答。組織が末尾に置いたModが、ツールの結果から社外秘の文字列を消してから上へ返す。上にある個人のModは「消された後」しか受け取れない。
3. 送る指示の本文そのものを書き換えられる
今:指示を送る時のフック(UserPromptSubmit)は「プロンプトを置き換えることはできず、additionalContext を横に差し込むだけ」と公式リファレンスにある。
Modsでは:prompt.submit(送る指示)、prompt.fill(入力欄に入れる文章)、prompt.suggest(次の指示として薄く表示される候補文)の3つが出来事として公開され、チートシートは候補文について「rewrite or refuse(書き換える、または拒否する)」と書く。
4. モデルへの要求そのものに割り込める
今:使うモデルや考える強さ(effort)は設定やスキルごとに指定できる。回答の表示文は MessageDisplay フックで差し替えられるが、変わるのは画面上の文字で、保存される会話とClaudeが読む内容は元のまま。
Modsでは:モデルに1回要求を送るたびに turn.step という出来事が起き、そこに付けた関数は「渡すモデル・effortを変える」「返ってくる文章を流れたまま受け取って書き換える」ことができる。この出来事だけは通常の関数でなく、文章の断片を順に受け取る非同期ジェネレーターで書く。
公式の例:9月11日の返答にある、モデルの出力を全部 rot13(文字ずらし)にして流す関数。冗談めいた例だが、モデルの出力を通す関門を自分で持てる、という意味の例になっている。
5. 画面の部品を書き換え・追加できる
今:画面に関わるフックは、回答の表示文を差し替える MessageDisplay のみ。
Modsでは:部品を描くたびに ui.render という出来事が起き、部品の中身(props)を書き換える、描画結果を包む、丸ごと差し替える、の3通りができる。チートシートに載っている部品は UserMessage / AssistantMessage / ToolUse / ToolResult / ToolGroup / AskUserQuestion / Spinner / TurnDuration / InfoNotice / SessionMode / PromptHint / AbovePrompt(入力欄の上の帯)/ Pane(自分で開く区画)。描くための要素は Box / Text / Button / Input / Select / Link / Code / Svg / Client。同じ描画の木を、ターミナルでは Ink、デスクトップ版ではDOMで描き分けるので、Modは1回書けば両方に出る。
公式の例:issue本文のケーススタディ⓽。デスクトップ版で機密の値を隠しておき、マウスを乗せた時だけ表示するMod(「画面共有しながら作業できる」用途と説明)。同梱の diff Modは、未コミットの変更を会話の横の区画にファイル単位で表示し、Claudeの編集に追随し、ファイルの質問ボタンを押すとその変更箇所が次の指示に1回だけ添付される。
なお、操作の許可を確認するダイアログは、フックできる部品として公開されていない(9月4日の返答)。表示を変える処理と、操作を許可するか決める処理は分けられている。
6. Claude Code内部の操作を、拡張から直接呼べる
今:コマンド型のフックは「標準出力・標準エラー・終了コードでしか通信できず、/コマンドやツール呼び出しを起動することはできない」(公式ガイド)。
Modsでは:$ の窓口から、ツールを呼ぶ(tool.call)、/コマンドを走らせる(command.run)、利用者に質問ダイアログを出す(ui.ask)、サブエージェントを起動する(agent.spawn)、モデルに1回だけ補完させる(model.complete)、ファイル・通信・プロセスを扱う(fs / http / process)などを直接呼べる。チートシートは名詞19個(tool / command / prompt / agent / turn / session / model / ui / fs / settings / config / env / store / http / process / mcp / clock / audio / plugin)を列挙している。
公式の例:9月9日の返答。/fetch-context を動かしたいという質問に対し、$.command.run({ command: "fetch-context" }) を使うと案内し、「prompt.submit はモデルへ文章を送るためだけのものにしたい」と説明している。
7. 拡張が何をするか、読み込む前に一覧で分かる
今:フックが呼ぶシェルスクリプトが何をするかは、中身を読むしかない。コマンド型フックは利用者の権限でファイルやネットワークに触れる。
Modsでは:Modのコードにはファイルやネットワークへの「素の」アクセスがなく、できることは $.名詞.動詞(…) の呼び出しだけ。この呼び出しは決まった綴りでしか書けず、$[式] のような崩した書き方は claude plugin validate が拒否する。その結果、あるModがフックする出来事と、呼ぶ操作の一覧を、読み込む前に機械的に出せる。Poteat氏は9月4日の返答で、この隔離は「規約ではなく境界」であり、Bun Worker と node:vm でプラグイン領域を包んでいて「機械的に import fs できない」と説明している。
公式の例:9月6日の返答。組織の管理者がファイル読み取りの出来事にフックを付け、作業フォルダか一時ファイルの場所以外の読み取りを拒否するコード。設計書 Listing 5 は、*(全部の出来事)に1本のフックを置いて「どのModがどの操作を呼んだか」を記録する監査ログで、4行で書かれている。
8. 今のhooksは、そのまま動く
設定ファイルに書いた既存のフックは classic.<イベント名> という出来事として1対1でラップされ、入出力のJSONもそのまま(9月7日の返答、チートシート「classic」の行)。移す順番は利用者が決められる。
安全側の設計──順序が権限になる
Modは5つの層に並ぶ。外側から prepend(組織が先頭に置く)/user(利用者が入れたもの)/append(組織が末尾に置く)/builtin(Claude Codeに同梱)/core(実際に動作する本体)。外側ほど権限が強く、外の層は内側の呼び出しを全部見て止められる。内側から外側には触れない。チートシートはこの構造を「the product as shipped, in one line(出荷時の製品そのもの、1行で)」として、on("*", ($, e, next) => next.to(e, "builtin")) と書いている。
同梱の sec-default はこの最外殻に座り、組織が設定した従来のフック・管理されたCLAUDE.md・設定の読み取り・組織のMCPサーバーを、利用者が入れたModから守る役割を持つ。READMEによれば「managed settings があるマシン、またはTeam/Enterprise組織」で自動的に先頭に置かれ、ローカルで --plugin-dir から読み込んだだけでは「通す」以外の動作ができない。
失敗時の既定は「止めない」側に倒してある。フックが例外を出すか10秒を超えると、そのフックだけを飛ばして先へ進む(チートシート「failure」の行、9月5日の返答)。止めたい側は .catch を宣言しておけば、失敗した時に自分で拒否を返せる(9月8日の返答)。速度については、Claude Codeと同じプロセス内のBun実行環境で動かし「1フックあたり p99 で50マイクロ秒を見ている」と9月3日の返答にあるが、これは目標値としての発言で、測定条件は示されていない。
いつ、どう試せるか
- 出荷時期:9月9日更新の「数週間の規模で」。日付の明示はない。
- 今日試す:
CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 claudeで起動する。9月9日の返答は、このフラグを有効にすれば/plugin-typesで$の全操作の型定義が書き出される、と案内している。 - 作る:プラグインの
hooks/hooks.jsonに{ "modules": ["./hooks.ts"] }を足し、claude --plugin-dir ./my-modで読み込む。保存すれば起動中のClaude Codeに読み直される(チートシート「loading」の行)。同じ行に「Claude can write the mod for you(Claudeがあなたの代わりにModを書ける)」とあり、issue本文のケーススタディ⓼は、短い依頼1つからClaudeがModを書き、検証し、読み込むまでのデモ。 - 同梱の3本:
sec-default(上述)、diff(/diff で変更箇所を横に表示)、telemetry($.telemetryを追加。分析がオフなら何も送らない)。READMEは「今あるClaude Codeの機能を、順にMod形式へ移していく」と方針を書いている。
Claude Codeそのものの説明はClaude Codeとは、今のhooksでルールを強制する作り方はhooksの作り方、許可・拒否の線引きはpermissionsの設定に書いている。
筆者が現行ドキュメントと突き合わせて直した2つの思い込み
この記事を書く前、筆者は「今のhooksは許可か拒否しか返せない」「回答の表示は変えられない」と理解していた。現行の公式リファレンスを読み直すと、どちらも違った。PostToolUse は updatedToolOutput でツールの結果を「Claudeに送る前に置き換える」ことができ、MessageDisplay は回答の表示文を差し替えられる(ただし画面上の文字だけで、保存される会話とClaudeが読む内容は元のまま)。
だからModsの「新しさ」は、伏せ字ができること自体ではない。誰が加工した結果を、次の誰が受け取るかを順序で組めること(項目2)、指示の本文とモデルへの要求に手を入れられること(項目3・4)、画面の部品と内部の操作が対象になること(項目5・6)、何をする拡張かが読み込む前に分かること(項目7)にある。この整理は、現行ドキュメントの該当箇所を1つずつ引きながら行った。
この記事が確かめられていないこと
- issue本文のデモ動画9本は、本文の説明文とコード例で内容を確認した。映像そのものは検証していない。
- 同梱ModのREADMEは「hooks modules は function hooks が有効な環境でのみ読み込まれ、これらのModが書かれているAPIはリリース間で予告なく変わりうる」と明記している。本記事の関数名・出来事名は2026年9月9日時点の公開資料に基づく。
- 出荷日は未定。「数週間」は9月9日のスレッド更新に書かれた言葉で、製品ページの告知ではない。
- prepend/append の層と
sec-defaultの制御は、managed settings があるマシンかTeam/Enterprise組織が前提と書かれている。個人利用でどの層まで使えるかは、READMEの記述以上には確認できていない。 - 現行hooksの各機能(
updatedToolOutputなど)がいつから使えたかは確認していない。本記事は「今の公式ドキュメントに書いてあること」との比較であって、「以前はできなかった」という歴史的な比較ではない。 - 「1フック50マイクロ秒」は返答中の目標値で、公開された測定結果ではない。
出典と、この記事が見た範囲
- GitHub issue #91870(起票2026-09-03、更新2026-09-09。本文、9月9日の更新、Anthropic側の返答25件)
- 設計書「Function Hooks: Core Architecture」(Alice Poteat・Anthropic・2026年8月・8ページ)
- チートシート「Claude Mods — the $ cheat sheet」(2026-09-09)
- anthropics/claude-code の
mods/配下(README、sec-default、diff、telemetry) - Claude Code 公式ドキュメント「Hooks reference」「Get started with hooks」(2026年9月15日取得)
本記事は続報があり次第更新します。出荷時には、公開資料と出荷版で変わった点を同じ記事に追記します。
出典・参照資料
- 一次資料Mods né function hooks - make plugins 10x more powerful — GitHub issue #91870(2026-09-03起票・09-09更新・Anthropic側の返答を含む) ↗
- 一次資料Function Hooks: Core Architecture — 設計書PDF(Alice Poteat・Anthropic・2026年8月) ↗
- 一次資料Claude Mods — the $ cheat sheet(2026-09-09・issue本文に添付) ↗
- 一次資料mods/README.md — 同梱Mod 3本のソース(anthropics/claude-code) ↗
- 一次資料sec-default — 同梱Modの README ↗
- 一次資料diff — 同梱Modの README ↗
- 一次資料Hooks reference — Claude Code 公式ドキュメント(現行のhooks仕様) ↗
- 一次資料Get started with hooks — Claude Code 公式ドキュメント ↗
AIニュースの解説を動画でも
YouTubeでは注目ニュースの背景を解説し、Xでは新着記事をお知らせしています。
コメント
まだコメントはありません。最初のコメントを書いてみませんか?
AIについて聞きたいことはありますか?
質問箱で無料で受け付けています。回答は公開され、他の方の参考にもなります。
質問箱を見る →新しい記事をメールで受け取る
AIの新しい発表を、出典付きで整理して届けます。