フック : 作業の前後に自分の処理を挟む
フックを使うと、決まった場面で自分のスクリプトが走ります。ツールを使う前後、モデルを呼ぶ前後、作業が終わるときの5か所に挟めます。
用意するもの
- プロジェクトのフォルダ
- 実行するスクリプト
1. hooks.json を置く
`.agents/hooks.json` を作り、いつ・何を実行するかを書きます。
2. 場面を選ぶ
`PreToolUse`(ツールを使う前)、`PostToolUse`(使った後)、`PreInvocation`(考え始める前)、`PostInvocation`(考えた後)、`Stop`(終わるとき)から選びます。
3. 対象を絞る
ツールの前後では `matcher` で対象を絞ります。`"run_command"` ならコマンド実行だけ、`"browser_.*"` ならブラウザ操作すべてです。
4. 答えを返す
スクリプトは標準入力でJSONを受け取り、標準出力でJSONを返します。`PreToolUse` なら `{"decision":"deny","reason":"..."}` で実行を止められます。
コピーして使える依頼文
.agents/hooks.json を作って。コマンドを実行する前に scripts/guard.sh を呼び、本番のデータベースに触るコマンドなら止めるようにして。
この依頼文だと、こう返ってきます
.agents/hooks.json を作成しました。
{
"db-guard": {
"PreToolUse": [
{
"matcher": "run_command",
"hooks": [{ "command": "./scripts/guard.sh", "timeout": 5 }]
}
]
}
}
guard.sh は標準入力から toolCall.args.CommandLine を読み、本番の接続先が含まれていれば
{"decision":"deny","reason":"本番DBへの操作です"} を返す形にしています。
動作を確かめてから有効にしてください。まず手で1回、止めたいコマンドを試してみてください。
実際の返答はそのときの資料や状況で変わります。形の目安として載せています。
完成チェック
- 決めた場面でスクリプトが走った
- 止めたいコマンドが実際に止まった
OpenAI版で関連する記事OpenAI版マニュアルには、これに当たる記事がありません。
Claude版で関連する記事フックで自動実行する ↗