Claude Code のフックが動かないときに確かめること
フックを入れたのに何も起きないなら、どこかの disableAllHooks や組織のポリシーが止めているのかもしれません。どこでオフになったかを探す順番です。
1. /hooks で読み込まれているか見る
Claude Code で /hooks と入力すると、設定されたフックを読み取り専用で一覧でき、フックごとに出どころ(ユーザー・プロジェクト・ローカル設定、プラグイン、現在のセッション)が付きます。フックを選ぶと、実際に実行するコマンドと定義されている場所が見えます。自分のフックが一覧にないなら、別のファイルに入れたか、止められています。
2. disableAllHooks は「最後に残った値」
"disableAllHooks": true は、フックを消さずにすべてオフにします。Claude Code は設定の優先順位を通したあとに残った値を読むので、プロジェクトの .claude/settings.json にある false が、ユーザー設定の true に勝ちます。逆に、プロジェクトや .claude/settings.local.json に true があると、そのプロジェクトでは自分のユーザーフックも動きません。フックを 1 つだけオフにするスイッチはありません。
見る場所:~/.claude/settings.json(すべてのプロジェクト)、.claude/settings.json(プロジェクト、コミットされる)、.claude/settings.local.json(プロジェクト、この Mac だけ)、組織の管理設定。1 回だけオフにしたいなら、--settings '{"disableAllHooks": true}' を付けて起動すると、プロジェクトとローカルの設定より優先されます。
3. 組織の管理設定
管理設定に allowManagedHooksOnly があると、ユーザー・プロジェクト・ローカル・プラグインのフックは止められます(管理設定の enabledPlugins で強制的に有効にしたプラグインのフックは例外)。strictPluginOnlyCustomization でフックがロックされていると、プラグインと管理設定のフックだけが動き、自分の設定ファイルのフックは動きません。管理者が入れたフックは、ユーザー・プロジェクト・ローカルの disableAllHooks ではオフにできません。
確認:/status の Setting sources の行に Enterprise managed settings があれば、これらの設定について管理者に聞いてください。
4. それでも何も起きないなら
シェルから claude --debug で新しいセッションを始め(シェルを使わないなら、新しいセッションで最初に /debug)、ログの中で自分のフックを探します。ほとんどのイベントでは、フックの標準出力は会話ではなくデバッグログにだけ残り、0 以外の終了コードでは stderr の 1 行目だけが表示されます。会話に … hook error が出たら、たいていはスクリプトのパスの間違いのような、処理を止めない失敗です。シェルのプロファイルが出力する文字が混ざると、フックの JSON 出力が読まれないことがあります。
Lidnight なら
Lidnight は、Claude Code のフックがどこでオフになっているか(管理・ローカル・プロジェクト・ユーザー設定、管理フックのみ許可を含む)を原因とともにオレンジで知らせ、ダッシュボード › AI 構成で、プラグインと MCP サーバーが実際にオンか、ブロックされているか、このプロジェクトでオフにしているかを表示します。読むだけで、disableAllHooks は変えません。Lidnight のフックを連携するときは設定ファイルを先にバックアップして Lidnight の項目だけを加え、オフにするとその項目だけを外します。
確認:2026-11-07、Claude Code のドキュメント「Hooks reference」(code.claude.com/docs/en/hooks)に基づきます。変わっている可能性があるので、ドキュメントを確認してください。
Lidnight を無料で試す
Apple Silicon Mac · macOS 13 以降。ダウンロードすると Pro の全機能を無料で試せます(蓋を閉じて5回または14日)。支払い情報は不要です。Pro は一回払い(1台 $9.99 · 3台 $14.99)、14日以内なら返金できます。