Hook が発火しないのはなぜ?

何も言わずに一度も実行されない Hook は、エージェント設定における最もよくある謎の一つです。ここでは、それを Berth で突き止める方法を紹介します。

1. イベント名は正しいか?

Hooks は特定のライフサイクルイベントで発火します (例: ツール呼び出しの前の PreToolUse、後の PostToolUse)。イベント名が実在のイベントと一致しなければ、Hook は一度も実行されません。Berth は各 Hook がいつ発火する設定になっているかを示します。

2. Hooks が全体で無効化されていないか?

disableAllHooks の設定は、すべての Hook を一度にオフにします。Berth のヘルスチェックがこれを浮かび上がらせます — 最初に除外して確認すべき点です。

3. マッチャーが狭すぎないか?

多くの Hook は、特定のツールを狙うためにマッチャーを使います。マッチャーが、あなたが使っているツールと一致しなければ、何も起こりません。セッションのツールタイムラインにあるツール名と、マッチャーを照らし合わせて確認しましょう。

4. コマンドのファイルは存在するか?

Hook はコマンドやスクリプトを指し示します。パスが間違っていたり、ファイルが見つからなかったりすると、Hook は実行できません。Berth はヘルスチェックで Hook のエントリのパスを検証します。

参考文献

  1. 01
    Claude Code — Hooks ガイド

    一次情報。Hook のイベントとライフサイクル。

    https://code.claude.com/docs/en/hooks-guide

  2. 02
    Claude Code — Settings

    一次情報。disableAllHooks を含む settings.json。

    https://code.claude.com/docs/en/settings