Hooks
概要
フック(hook)とは、エージェントのライフサイクルの特定の時点 ── シェルコマンドを実行する前、ファイルを編集した後、セッションが開始したとき、など ── で自動的に実行される、あなた自身のコマンドです。フックを使えば、エージェントがルールを自分で覚えていることを当てにするのではなく、通常のスクリプトを用いてエージェントの動作を観察し制御できます。フックは、コーディングハーネスにおける強制の層です。
強み
- 決定論的:フックは毎回実行されるため、ルールが忘れられたり言い逃れされたりすることがない。
- ただのシェルやスクリプトとして書けるため、マシンでできることなら何でもできる。
- ログを取るだけでなくアクションをブロックできる ── コマンド実行前のフックは危険なコマンドを拒否できる。
- ガードレールに最適:保存時のフォーマット、編集後のテスト実行、コミット前のシークレットのスキャンなど。
トレードオフ
- フックは自動的に実行される実コードなので、バグのあるフックはワークフローを壊しかねない。
- 遅いフックは、トリガーとなるイベントのたびにレイテンシを増やす。
- パターンに対して発火するため、範囲が広すぎるフックは正当なアクションを妨げることがある。
- セットアップが増え、想定外の挙動が起きたときに見るべき場所がもう一つ増える。
使いどころ
エージェントが自発的に従うことに頼るのではなく、その動作について確実な保証が欲しいときにフックを使いましょう ── 自動フォーマット、必須のテスト実行、破壊的コマンドのブロック、すべてのアクションのログ取得などです。
バイブコーディングとの相性
フックは、エージェントを高速に動かしつつ安全に保つための手段です。エージェントが提案し、フックが強制します。rm -rf をブロックする「実行前」フックや、型チェッカーを走らせる「編集後」フックは、自由奔放なアシスタントを、ガードレールを物理的にスキップできないものへと変えます。
// すべてのファイル編集後にフォーマッタを実行する
{
"hooks": {
"PostToolUse": [
{ "matcher": "Edit", "command": "npx prettier --write $FILE" }
]
}
}