フックビルダー
イベントフックを組み立て、そもそも発火しないマッチャーを見つけ出します。
フックのコマンドは社内スクリプトやパスを指すことがよくあります。すべてブラウザー内で組み立てられ、送信されません。
そのツールで実行できる範囲を確かめる
フックビルダー について
フックはセッションの決まった地点でシェルコマンドを実行します。ファイルを書いたあと、ツールが動く前、ターンが終わったとき。設定の中で唯一、毎回尋ねずにコードを走らせる部分なので、その静かな失敗を拾う価値があります。存在しないツール名を書いたマッチャーは、一度も発火せず、文句も言いません。引数を取りに行くコマンドは空文字を受け取ります。イベントは引数ではなく、JSON として標準入力から届くからです。そして、これから起きることを実際に止められるのは一部のイベントだけです。このビルダーはその三つをすべて扱い、どのイベントが中断でき、どれが見ているだけかを示します。
機能
- 各イベントと、それが何で発火するかを一覧表示
- マッチャーを実在のツール名と照合し、大文字小文字の違いも検出
- ツールを持たないイベントにマッチャーを置いた場合に警告
- 受け取れない引数を探しにいくコマンドに警告
- どのイベントがどうやって中断できるかを明示
- よく使うマッチャーの型をワンクリックで
- 複数のフックをイベントとマッチャーで正しくまとめて出力
- 無人で走る前に、破壊的なコマンドを指摘
フックビルダー の使い方
- 介入したいイベントを選びます
- ツール固有のイベントならマッチャーを足します
- 標準入力からペイロードを読むコマンドを書きます
- 警告を読み、出力を settings.json に取り込みます
例
入力
prettier --write "$1"
出力
Warning: $1 will be empty — a hook is not given arguments
イベントはパイプで JSON として届きます。jq で読んでください。
よくあるエラーとトラブルシューティング
- フックが一度も走らない。 — たいていマッチャーです。ツール名は先頭大文字で大文字小文字を区別します(write ではなく Write)。存在しない名前は、何にも一致しないまま黙っています。
- コマンドは走るが入力が来ない。 — フックの入力は JSON として標準入力から届きます。引数を期待せず、jq -r '.tool_input.file_path' のように読んでください。
- フックでツール呼び出しを止められない。 — 止められるのは一部のイベントだけで、終了ステータス 2 で抜けたときだけです。それ以外は「続行」と解釈され、PostToolUse のようなイベントはそもそも事後に発火します。
- フックでセッションが止まる。 — タイムアウトを設定してください。ネットワーク呼び出しやロックを待つフックは、その間セッション全体を抱え込みます。
よくある質問
- フォーマッターにはどのイベントを使いますか。
- 書き込み系ツールにマッチャーを当てた PostToolUse です。ファイルが存在してから走ります。書き込み前に整形しても、整形するものがありません。
- フックはイベントをどう受け取りますか。
- JSON として標準入力から受け取ります。ツール名、その入力、周辺の文脈です。コマンドライン引数としては何も渡されません。だから $1 を前提に書いたコマンドは何も受け取りません。
- フックでツールの実行を止められますか。
- 実行前なら止められます。終了ステータス 2 で中断します。どのイベントで可能かは選択時に表示されます。事後に発火するイベントから止めようとするのは、よくあるうえに紛らわしい間違いだからです。
- フックは尋ねずに走りますか。
- はい。それが目的であり、追加前にフックをよく読むべき理由でもあります。ファイルを削除するものはここで指摘しますが、一般則としてこのファイルの中身はすべて無人で走ります。
- 一つのイベントに複数のフックを置けますか。
- はい。イベントとマッチャーが同じものは出力でまとめられます。設定ファイルが期待するのがその形です。
関連ツール
AI・エージェントの他のツール
AI・エージェントのツールをすべて見る · すべてのツール