TITLE

Claude Codeに提案された新フック機構「Claude Mods」― 外部プロセスから同一プロセスへ

投稿日:2026.09.20

CATEGORY

  • AI開発
Claude Codeに提案された新フック機構「Claude Mods」― 外部プロセスから同一プロセスへ

Claude Codeのhooksは、外部コマンドを起動してテキストで結果を受け取るだけの仕組みだと考えていないでしょうか。2026年9月3日、Anthropic社員の@poteat氏がGitHub issue「Mods - make Claude 10x more extensible」(anthropics/claude-code Issue #91870)で、この前提を変える設計を提案しました。TypeScriptで書いたミドルウェア関数をClaude Codeのエンジンに同じプロセスとして直接ロードする「Function Hooks」という仕組みで、その上位層が「Claude Mods」と呼ばれています。現時点ではまだ実験的な提案・議論の段階で、Anthropicは数週間以内の出荷を目標に掲げつつも、issue内で「コミュニティの反応が出荷を左右する」と明言しています。

壁越しの伝言から、同じ部屋への直接介入へ

既存のClaude Code hooksは、外部プロセスを起動して標準入出力でテキストをやり取りする方式です。私たちもガード実装にこの仕組みを使っており、危険なBashコマンドを検知した時点で判定用の外部プロセスを起動し、許可・拒否をテキストの形で返す作りにしています。プロセスの外から声をかけ、返事をテキストで受け取る——壁越しの伝言に近い構造です。

Function Hooksが変えるのはここです。TypeScriptで書いたミドルウェア関数を、Claude Codeのエンジンと同じプロセス・同じメモリ空間で動かします。プロセスをまたがないため、UIの描画やツールの登録といった、従来のhooksでは触れなかった領域まで書き換えの対象になります。壁の外から伝言を渡す方式から、同じ部屋の中で直接手を動かす方式への転換です。

従来のClaude Code hooksが外部プロセスを起動しstdin/stdoutのテキストだけでやり取りする構造と、Function Hooksが同じプロセス内でミドルウェアとしてネスティング構造(管理者の制御フック→プラグインのUIフック→管理者の既定実装)を組む構造を対比させた概念図。

この違いが実務にどう効くかは、対応イベントの例を見るとわかりやすくなります。issueで示されているのは、ボタン押下を検知するui.press(ターミナル・デスクトップ共通)、全イベントを拾う*(監査ログ向け)、Reactコンポーネントのpropsを書き換えるUIフック、falseを返して動作そのものを禁止する制限フックなどです。デモ動画では、機密値をホバー時だけ表示するUIフックや、1文の指示でAIがプラグインを生成する例まで示されました。

$という一つの窓口 — 副作用を集中させ、絞り込める

Function Hooksの設計はhook((context, $, next) => { ... })という形を取ります。$オブジェクトがClaude Code内部の副作用――ui.logfs.writeprocess.runhttp.fetchmodel.classifyagent.spawnなど――を一元管理する窓口で、ミドルウェアはこの$を通じてしか外部に影響を与えません。next()を呼ぶと処理が次のミドルウェアへ渡ります。

この設計が実務的に効くのは、管理者側の制御です。管理者は$から特定の機能を取り除いて、下層のプラグインからのアクセスを制限できます。エンタープライズ環境で「このプラグインにはファイル書き込みを許すが、外部へのhttp.fetchは禁止する」といった権限制御が可能になり、$へのアクセスは監査ログとして追跡できます。権限を絞れる窓口が1つに集約されている点が、単なる関数フックとの違いです。

登録順がそのままネスティング順になる

ミドルウェアは登録した順番が、そのままネスティング(入れ子)の順番になります。ExpressやKoaのミドルウェアチェーンと同じ考え方です。管理者は先頭(制御用)と末尾(デフォルト実装)にフックを追加でき、その間に複数のプラグインのフックが挟まる構造になります。デモ動画では、この登録順=ネスティング順という挙動そのものが実演されました。

この構造と先に説明した$の権限制御を組み合わせれば、管理者用の制御フックと個々のプラグインのフックを別々に開発・審査しても、実行時には1つの処理の連なりとしてまとまります。

今すぐ試すには — 環境変数ひとつで有効化する実験的機能

現時点の試験方法は、環境変数CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1を付けてclaudeを起動するだけです。対象はClaude Code v267/v268以降で、組み込みのMod 3種を含むソースコードがgithub.com/anthropics/claude-code/tree/main/modsで公開されています。

オフからオンへ切り替わる大きなトグルスイッチのフラットイラスト。環境変数CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1で実験的機能を有効にすることを表す。

試す際に踏まえておきたいのは、これが機能フラグの裏に隠れた実験的な実装だという位置づけです。issue自身が「APIの形は今後変更される可能性がある」と明記しており、$オブジェクトの構造や対応イベントの一覧も、この先変わる前提で見ておく必要があります。

まだ決まっていないこと

Anthropicはこの機能について「数週間以内の出荷」を目標にコミットしていると述べる一方で、issue内では「コミュニティの反応がこの機能を出荷するかどうかを左右する可能性が高い」とも明言しています。出荷は確定した予定ではなく、開発者コミュニティの反応次第で変わりうる条件付きの目標です。

議論は2026年9月3日の投稿以降も続いており、直近では9月9日にコミュニティアップデートが行われています。今の時点で言えるのは、TypeScriptでエンジンに直接介入する設計が提案・議論の段階にあるという事実までで、いつどの形で正式機能になるかは未確定です。

まとめ

この提案を追ってみたいなら、コードを試す前にissueのコメント欄を覗く価値があります。Anthropicはコミュニティの反応が出荷判断を左右するとissue内で明言しており、Function Hooksの設計そのものが実装済みの仕様ではなく、今まさに固まりつつある提案だからです。CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1で手元に立ち上げて$オブジェクトの挙動を触ってみるのは、その次の一歩になります。

関連

AI エージェントを業務で回すときの設計と運用については、CTO の note に書いています。

出典

※ この記事は AI を使用しています。Leadeas が自社開発した AI エージェント基盤で下書きを作成し、人間のレビューを経て公開しています。AI ネイティブ開発会社として自社の技術をそのまま実演する目的で、この手法を用いています。(詳しくは AI 利用ポリシー)

AI

AI導入やシステム開発の ご相談を承っています。

お気軽にお問い合わせください

無料相談する

お問い合わせには1営業日以内にご返信します