「hooksを書いたのに、動いた形跡がない」。Claude Codeの設定でつまずく話として、これはよく聞きます。
原因の多くは、書き方ではなくイベントの選び方にあります。似た名前のイベントが並んでいて、発火する場所も、止められるかどうかも違う。そこを確かめないまま書くと、効かせたつもりのhooksができ上がります。
この記事は、公式ドキュメントに載っている全30種類のイベントを一覧にして、そこから「やりたいこと」で引ける形に整理します。個別の実装コードは別記事へ送り、一覧と選び方に絞ります。hooksが自動化4層のどこに位置するかは『AIエージェントの自動化は4層|着手する順番と稼働の数え方』で扱いました。
本記事の検証環境:claude-opus-5 / Claude Code v2.1.x / macOS 15 / 2026-07-29検証。
こんなふうに調べていませんか
- hooksを設定したのに、動いた形跡がない
- イベント名が似ていて、どれに何を書けばいいのか決められない
- 危ない操作だけを実行前に止めたいが、入口がいくつもあって選べない
この記事を読み終えたときに手に入るもの
- 30種類のイベントを、発火タイミングとブロック可否の2軸で選び分けられるようになります
- やりたいことから、使うイベントを逆引きできるようになります
- matcherとタイムアウトでつまずく場所を、書く前に避けられるようになります
結論30秒でわかる、この記事の結論
- hooksは、AIエージェントの動きに割り込む場所をあらかじめ決めておく仕組みです。
- 選ぶ軸は2つです。いつ発火するかと、実行や継続を止められるかどうか。
- 30種類を全部は使いません。取り消せない操作に近いところから、順に入れます。
進行役は3人です。若葉さん(Web担当2年目)が用語のそもそもを聞き、高梨課長が自分の手で動かす側の疑問を出し、鈴木さん(本誌監修)が答えます。
01Claude Code hooksの一覧を、AIエージェントを動かす前に見ておくのはなぜですか?
若葉さんそもそもhooksって、何をするものなんでしょうか。設定ファイルに書く、というところまでは分かったんですが。
鈴木さんセッションの中で起きた出来事に反応して、1回だけ動く小さなスクリプトです。火災報知器に近いと思ってください。ふだんは何もしていなくて、煙を感知したときだけ鳴ります。
若葉さんずっと動いているわけではないんですね。
鈴木さんはい。対応する出来事が起きるまで、1行も動きません。だから「動かない」と感じたときは、書き方より先に、選んだ出来事のほうを疑うと早いです。
先に結論を3つ置きます。
1つめ。hooksは常駐しません。対応するイベントが起きるまで、スクリプトは1行も動きません。時刻を起点に動かしたい処理は、別の層が担当します。
2つめ。本記事では30種類を5つのグループへ整理します。この分類は本記事の独自編集です。 公式ドキュメントはイベントを「セッションに1回」「ターンに1回」「ツール呼び出しごと」という3つの発火頻度でしか説明していません。読み分けやすさのために、こちらで束ね直しています。
3つめ。選ぶ基準は2つです。いつ発火するかと、実行や継続をブロックできるか。この2軸を外すと、発火しないhooksか、止められないhooksができます。
危険なコマンドの遮断そのものは『Claude CodeのPreToolUseで危険コマンドを遮断する4つの判定』にコードつきでまとめています。
この章のまとめ
hooksは、AIエージェントの動きに割り込む場所の名前です。名前で覚えるのではなく、発火する場所と、止められるかどうかで選びます。
02Claude Code hooksの一覧は、AIエージェントの1セッションのどこで発火するんですか?
公式ドキュメントの「Hook lifecycle」表を数えると、hooksイベントは30種類です(2026-07-29に公式ドキュメントを取得して実数を確認)。
一覧に入る前に、1回のセッションがどう進むかを眺めておきます。起動して、指示を受け取り、道具を使い、答え終えて、閉じる。この通り道のどこかで、それぞれのイベントが待っています。並び順が頭に入ると、表は暗記せずに引けるようになります。
以下が全30種類です。グループ名は本記事の独自編集で、公式ドキュメントの分類ではありません。
| グループ | イベント名 | 発火タイミング | ブロック可否 |
|---|---|---|---|
| セッションの生死・環境 | Setup | --init-only起動時、または-p --init/--maintenance時に1回 | 不可(context注入のみ) |
| セッションの生死・環境 | SessionStart | セッション開始・--resume/--continue・/clear後・compaction後・fork後 | 不可(additionalContext・initialUserMessage・watchPaths・sessionTitle・reloadSkillsの5フィールドのみ返せる) |
| セッションの生死・環境 | SessionEnd | セッション終了時 | 不可(後始末専用・1.5秒の共有予算) |
| セッションの生死・環境 | PreCompact | コンテキスト圧縮の直前 | 可(decision: blockで圧縮を止める) |
| セッションの生死・環境 | PostCompact | コンテキスト圧縮の完了後 | 不可(ログ用途) |
| セッションの生死・環境 | ConfigChange | 設定ファイル変更を検知した時 | 可(policy_settings以外は変更を止められる) |
| セッションの生死・環境 | CwdChanged | 作業ディレクトリが変わった時(cd実行等) | 不可(環境連携の副作用専用) |
| セッションの生死・環境 | InstructionsLoaded | CLAUDE.mdや.claude/rules/*.mdが読み込まれた時 | 不可(ログ用途) |
| セッションの生死・環境 | FileChanged | 監視対象ファイルがディスク上で変化した時 | 不可(副作用専用) |
| セッションの生死・環境 | WorktreeCreate | worktreeが作成される時 | 実質可(0以外の終了コードで作成が失敗する) |
| セッションの生死・環境 | WorktreeRemove | worktreeが削除される時 | 不可(後始末専用) |
| プロンプト処理・応答終了 | UserPromptSubmit | ユーザーがプロンプトを送信し、処理される直前 | 可(decision: blockで送信自体を消せる) |
| プロンプト処理・応答終了 | UserPromptExpansion | コマンドやスキルがプロンプトへ展開される時 | 可(decision: blockで展開を止める) |
| プロンプト処理・応答終了 | Stop | Claudeが応答を終える時 | 可(decision: blockで終了させず継続させる) |
| プロンプト処理・応答終了 | StopFailure | API側エラーでターンが終わった時 | 不可(ログ・後始末専用) |
| ツール実行 | PreToolUse | ツール呼び出しの直前 | 可(permissionDecision: allow/deny/ask/defer) |
| ツール実行 | PermissionRequest | ツール呼び出しに許可判定が要る時 | 可(decision.behavior: allow/deny) |
| ツール実行 | PermissionDenied | 自動モードの分類器が拒否した直後 | 不可(retry指示のみ・exit codeとstderrは無視) |
| ツール実行 | PostToolUse | ツール呼び出しが成功した後 | 可(decision: blockまたはupdatedToolOutputで結果を書き換え) |
| ツール実行 | PostToolUseFailure | ツール呼び出しが失敗した後 | 可(decision: blockで後続を止める) |
| ツール実行 | PostToolBatch | 並列ツール呼び出しが全解決後、次のモデル呼び出し前 | 可(decision: blockでループを止める) |
| サブエージェント・タスク | SubagentStart | サブエージェントが生成された時 | 不可(context注入のみ) |
| サブエージェント・タスク | SubagentStop | サブエージェントが完了した時 | 可(decision: blockで完了させず継続させる) |
| サブエージェント・タスク | TaskCreated | タスクが作成された時 | 可(continue: falseまたはexit code 2で作成を巻き戻す) |
| サブエージェント・タスク | TaskCompleted | タスクが完了扱いになった時 | 可(continue: falseまたはexit code 2で完了を止める) |
| サブエージェント・タスク | TeammateIdle | エージェントチームの一員がアイドルになる直前 | 可(アイドル化・継続そのものも止められる) |
| 通知・MCP連携 | Notification | Claude Codeが通知を送る時 | 不可(副作用専用) |
| 通知・MCP連携 | MessageDisplay | アシスタントのメッセージ文が画面表示されている間 | 不可(画面表示のみdisplayContentで差し替え可) |
| 通知・MCP連携 | Elicitation | MCPサーバーが入力を要求した時 | 可(action: accept/decline/cancel) |
| 通知・MCP連携 | ElicitationResult | ユーザー応答をMCPサーバーへ返す直前 | 可(action: accept/decline/cancelで応答を差し替え) |
表は上から読むものではありません。困っている場面を先に決めて、そこから引きます。
0330種類のhooksのうち、AIエージェントの動きを止められるのはどれですか?
30種類のうち、ブロック可否が「可」なのは17種類、「不可」は13種類です(2026-07-29実測)。「不可」の多くは、文脈を足すためか、記録と副作用のための設計です。止まらない場所に止める処理を書いても、そこは通り抜けます。
「可」と書いてあっても、返し方はイベントごとに違います。decision: block を返すもの、permissionDecision を返すもの、終了コードで表すもの。この違いは、次の章から順に見ていきます。
この章のまとめ
一覧は暗記するものではなく、引くものです。「この場面はどのイベントか」を引き、そのイベントが止められるかを確かめる。この2手で足ります。
04AIエージェントの手を実行の直前で止めるのは、どのhooksですか?
高梨課長危ない操作だけを実行前に止めたいんですが、それらしい名前が並んでいて選べません。
鈴木さん判断軸は2つです。呼び出しの前か後か。そして、誰の判断を経由するか。この2つで並べ直すと、6種類はすんなり分かれます。
高梨課長まず前と後で割る、ということですね。
鈴木さんはい。前が3つ、後ろが3つです。前の3つは、まだ何も起きていないので引き返せます。
ツール実行グループの6種類は、名前が似ていて混同しやすい領域です。ここでは、前側の3つを見ます。
PreToolUse はツール呼び出しの直前に発火し、permissionDecision を allow・deny・ask・defer のいずれかで返します。defer は claude -p を呼び出す外部アプリ向けの値で、ツール呼び出しを保留したままセッションを終了させます。対話セッションでは警告が記録され、フックの結果は無視されます(出典: Claude Code公式ドキュメント)。
4つの値のうち、実行を止めるのは deny です。defer だけは用途が特殊で、外部アプリからClaude Codeを呼ぶ構成のときにだけ意味を持ちます。
05許可を求められた場面だけAIエージェントに応答させるhooksはどれですか?
PermissionRequest は、PreToolUseとは別の入口です。許可判定が要る局面で発火し、hookSpecificOutput.decision.behavior に allow か deny を返します。
{
"hookSpecificOutput": {
"hookEventName": "PermissionRequest",
"decision": {
"behavior": "deny",
"updatedInput": {}
}
}
}PermissionDenied は、自動モードの分類器が拒否した直後に発火します。ここだけ作法が違い、exit code と stderr は無視されます。意味を持つのは retry フィールドだけです(出典: Claude Code公式ドキュメント)。
06生成AIの出力や応答の終わりには、どのhooksが効くんですか?
後ろ側の3種は、成功・失敗・並列で分かれます。
成功したときは PostToolUse、失敗したときは PostToolUseFailure、並列で呼ばれた道具がすべて解決したあと・次のモデル呼び出しの前は PostToolBatch です。
PostToolUseは updatedToolOutput で結果そのものを書き換えられます。機密情報のマスキングや、長い出力の要約に向く場所です。AIエージェントが読む前に手を入れられる、という点が効きます。
PostToolUseFailureとPostToolBatchは、どちらも decision: block で後続を止められます。失敗をなかったことにして進ませない、ループをそこで打ち切る、といった使い方になります。
道具の実行ではなく、応答そのものの終わりを受け止めるのが Stop です。decision: block を返すと、終わらせずにもう1周させられます。API側のエラーでターンが終わったときは StopFailure が発火しますが、こちらは記録と後始末の専用です。同じグループの UserPromptSubmit と UserPromptExpansion は入口側にあり、送信そのものや、コマンド・スキルの展開を止められます。
07起動のたびに同じ前提をAI社員へ読ませるのは、どのhooksですか?
高梨課長うちのルールを毎回いちばん最初に読ませたいんですが、これも実行前に止める話になりますか。
鈴木さんいえ、止める話ではなく、渡す話です。SessionStartは読ませる専用で、起動そのものを止める力は持っていません。だから設計の中身は「何を渡すか」だけになります。
セッションの生死・環境グループの11種類は、2つの層に分かれます。開始と終了の層と、セッション中に外側で起きた変化を検知する層です。まず前者から見ます。
SessionStart は source フィールドで発火元を区別できます。startup・resume・clear・compact・fork の5パターンです。新規起動のときだけ読ませる、圧縮の後だけ読み直す、といった書き分けがここでできます。
返せるフィールドは5つです。
additionalContext:文脈を注入するinitialUserMessage:最初のプロンプトを設定するwatchPaths:監視対象ファイルを指定するsessionTitle:セッション名を設定するreloadSkills:スキルを再読み込みする
{
"hookSpecificOutput": {
"hookEventName": "SessionStart",
"additionalContext": "必読ルールの要約テキスト",
"reloadSkills": true
}
}同じ層には、--init-only 起動時などに1回だけ動く Setup、終了時の SessionEnd、圧縮の直前と完了後の PreCompact・PostCompact、worktreeの作成と削除に対応する WorktreeCreate・WorktreeRemove が並びます。このうち止められるのはPreCompactで、WorktreeCreateは0以外の終了コードを返すと作成そのものが失敗します。
08セッションの外側で起きた変化は、AIエージェントのhooksでどこまで拾えますか?
もう一方の層が、環境の変化を検知する4種です。
ConfigChange は、設定ファイルの変更を検知したときに発火します。この層で唯一止められるイベントで、decision: block で変更を差し戻せます(policy_settings は対象外です)。
CwdChanged は作業ディレクトリが変わったとき、InstructionsLoaded はCLAUDE.mdや .claude/rules/*.md が読み込まれたとき、FileChanged は監視対象ファイルがディスク上で変化したときに発火します。この3つは止められません。環境の同期や、記録を残すための場所です。
止められないことは、弱点ではありません。「気づける状態をつくる」ための層だと考えると、置き場所が決まります。設定が書き換わったことにも、参照ファイルが差し替わったことにも誰も気づけない、という運用のほうが危ういからです。
この章のまとめ
外側の変化は、原則として拾うだけです。止められるのはConfigChangeだけで、そこも policy_settings は対象から外れています。
09サブエージェントに任せた作業の終わりは、どのhooksで受け止めるんですか?
役割を分けて動かすときに効くのが、サブエージェント・タスクの5種です。
SubagentStart は、サブエージェントが生成されたときに発火します。文脈を注入するだけで、生成そのものは止められません。SubagentStop は完了したときに発火し、decision: block で完了させずに継続させられます。
タスク側は少し違います。TaskCreated はタスクが作成されたとき、TaskCompleted は完了扱いになったときに発火し、どちらも continue: false か exit code 2 で巻き戻せます。TeammateIdle は、エージェントチームの一員がアイドルになる直前です。ここはアイドル化そのものも止められます。
役割を分けて動かすときは、この5種のどこで受け止めるかを先に決めておくと、あとから足す処理の置き場所に迷わなくなります。
10通知やMCPからの問いかけは、AIエージェントのどのhooksで受けるんですか?
残る4種が、通知とMCP連携です。Notification は通知を送るときの副作用専用、MessageDisplay は画面表示中に displayContent で表示だけを差し替えられます。Elicitation はMCPサーバーが入力を要求したとき、ElicitationResult はユーザー応答をMCPサーバーへ返す直前に発火し、どちらも action に accept・decline・cancel を返します。
MCP連携の2種は、外部サーバーからの問いかけに自動で答えさせられる、という点で性格が違います。何をこちらの確認なしに受け入れるかは、ここで決まります。
11やりたいことから引くと、AIエージェントに仕込むhooksはどれになりますか?
イベント名から入ると迷います。「何をしたいか」から引ける表にします。
| やりたいこと | 使うイベント | 判定の返し方 |
|---|---|---|
| 危険な操作を実行前に止めたい | PreToolUse | permissionDecision: "deny" |
| 起動時に必読ルールを注入したい | SessionStart | additionalContext |
| 実行結果を書き換えたい(マスキング等) | PostToolUse | updatedToolOutput |
| 応答を終える前にもう1周させたい | Stop | decision: "block" |
| 設定ファイルの変更を検知して止めたい | ConfigChange | decision: "block"(policy_settings除く) |
.envのようなファイルの変化だけ監視したい | FileChanged | matcherにファイル名を列挙(副作用専用) |
| サブエージェント完了時に集計処理を挟みたい | SubagentStop | decision: "block"またはadditionalContext |
| MCPからの入力要求に自動で応答したい | Elicitation | action: "accept"/"decline"/"cancel" |
迷ったときは、上から順に3つの問いを自分に投げてください。取り消せない操作か。止めたいのか。それとも観測だけでよいのか。この順で答えると、たいていは1つに絞れます。
12チームでAIエージェントの止め方をそろえるには、hooksをどこに書くんですか?
高梨課長手元では動くようになりました。これをチームの全員に同じように効かせるには、どこに書けばいいんでしょうか。
鈴木さん置き場所が6つあります。共有したいものはプロジェクトの設定へ、自分だけの一時的な上書きは手元へ。分け方はそれだけです。
hooksを書ける場所は6箇所あります(出典: Claude Code公式ドキュメント)。
| 置き場所 | 有効範囲 | 共有可否 |
|---|---|---|
~/.claude/settings.json | 全プロジェクト | 不可(個人設定) |
.claude/settings.json | 単一プロジェクト | 可(Gitでコミット) |
.claude/settings.local.json | 単一プロジェクト | 不可(gitignore対象) |
| Managed policy settings | 組織全体 | 可(管理者のみ変更) |
プラグインのhooks/hooks.json | プラグイン有効時 | 可(同梱配布) |
| スキル・エージェントのfrontmatter | 動作中のみ | 可(ファイル内に記述) |
チームで共有するhooksは .claude/settings.json に書いてGitで配り、個人の一時的な上書きは .claude/settings.local.json へ置きます。permissions のallow・ask・denyとhooksの配分は『Claude Codeの権限設定|AIエージェントに任せる範囲と3列の配分』で扱っています。
13同じhooksを2か所に書くと、AIエージェントでは何回動くんですか?
高梨課長同じhookを共有側と手元の両方に書いてしまったら、2回動くんでしょうか。
鈴木さんそこは条件つきです。コマンドと引数が完全に一致していれば1回にまとまります。少しでも違えば、両方とも動きます。
同じイベントに複数の置き場所から登録した場合、コマンドと引数が完全に一致するものは重複が排除され、1回だけ動きます。それ以外は、すべて並列で実行されます。「手元の設定で上書きしたつもりが、両方動いていた」という取り違えは、ここで起きます。
組織全体へ配るManaged policy settingsは、管理者だけが変更できます。allowManagedHooksOnly を有効にすると、Managed以外のhookは動かなくなります。配る側と使う側で前提が変わるので、有効にするかどうかは先に決めておく話になります。
14matcherを書き間違えると、AIエージェントのどこにhooksが効かなくなるんですか?
matcherは、そのhookをどのツール名・どのファイル名に効かせるかを書く欄です。ここの評価ルールが、事故のいちばん多い場所になります。
書き方は3パターンあります(出典: Claude Code公式ドキュメント)。
*・空文字・省略:全件一致- 英数字・
_・-・空白・,・|だけの文字列:完全一致かリスト指定 - それ以外の文字を含む:正規表現として評価
例で言うと、Bash は完全一致、Edit|Write はリスト、mcp__memory__.* は正規表現です。
ハイフンが完全一致の側に入ったのは v2.1.195 以降です。それより前は code-reviewer も正規表現として扱われ、senior-code-reviewer にも当たっていました。同じ設定ファイルが、バージョン違いの環境では別の当たり方をする、ということです。
FileChangedとStopFailureは例外です。完全一致になるのは英数字・_・| だけで、ハイフン・空白・カンマを含めると、他のイベントより先に正規表現として評価されます。
15hooksから外部へつなぐとき、AIエージェントはどれくらい待つんですか?
hookの実行方式(type)は5種類です(出典: Claude Code公式ドキュメント)。
command:シェルコマンドを実行するhttp:URLへPOSTするmcp_tool:MCPツールを呼ぶprompt:モデルにYes/Noを判定させるagent:検証用のサブエージェントを動かす
デフォルトタイムアウトは方式ごとに違います。command・http・mcp_tool が600秒、prompt が30秒、agent が60秒です。判定をモデルに任せる prompt と agent は、外部へPOSTするより短く設定されています。
イベント側にも短い既定値があります。UserPromptSubmitは30秒、MessageDisplayは10秒、SessionEndは1.5秒です。
外部へ問い合わせる処理をhooksに置くときは、この既定値を先に確かめておくと、打ち切られてから気づく事態を避けられます。
16hooksが受け取る情報は、AIエージェントのどのイベントでも同じですか?
入力側の共通フィールドは、全イベントで同じです。session_id・transcript_path・cwd・hook_event_name・permission_mode。サブエージェントの中では agent_id と agent_type も加わります。
{
"session_id": "abc123",
"transcript_path": "/path/to/transcript.jsonl",
"cwd": "/current/working/directory",
"permission_mode": "default",
"hook_event_name": "PreToolUse"
}出力側の共通フィールドは continue・stopReason・suppressOutput・systemMessage です。イベント固有の判定は hookSpecificOutput の中に書きます。共通部分が同じなので、1本書ければ他のイベントへも移しやすくなります。
17AI導入の順番として、hooksはどのイベントから設定するんですか?
高梨課長30種類あると分かったのはいいんですが、どこから手を付ければいいでしょうか。全部は無理です。
鈴木さん全部やらなくて大丈夫です。取り消せない操作に近いところから入れてください。観測用のものは、後からでも間に合います。
高梨課長順番を決める基準がほしいです。
鈴木さん「戻せない操作か」と「止められるイベントか」。この2つで並べると、最初に入れる1本が決まります。
30種類を全部使う必要はありません。取り消せない操作に近いイベント(PreToolUse・SessionStart等)から優先して登録し、観測用途は後回しにする。この優先順位づけが、実務では機能します。
最後に、PermissionDeniedの落とし穴を1つ。PreToolUseと同じ感覚で exit code 2 を返しても、ここでは無視されます。読まれるのは retry フィールドだけです。matcherと type の挙動は、イベントをまたいで統一されていません。類推で実装せず、公式ドキュメントを都度確認するのが要になります。
着手前の確認は、次の項目で足ります。
- 実行前に止めたい操作を、PreToolUseのdeny対象として洗い出したか
- 使うイベントを「発火タイミング」と「ブロックできるか」の2軸で選んだか
- matcherに
*など、正規表現化する文字を意図せず混ぜていないか - settings.jsonのどの置き場所(User/Project/Local/Managed等)に書くか決めたか
- 短いデフォルトタイムアウト(UserPromptSubmit 30秒・MessageDisplay 10秒・SessionEnd 1.5秒)を把握したか
/hooksコマンドで登録内容を確認したか- PreToolUseの詳しい実装は専用記事へ委ね、ここでは判断基準だけを使ったか
18よくある質問
Claude Code hooksは常駐しているプロセスですか
いいえ。対応するイベントが起きたときだけ新しいプロセスとして起動し、判定を返すと終了します。裏で待ち続けているわけではありません。逆に言うと、時刻を起点に動かしたい処理はhooksでは書けません。毎朝決まった時間に何かをさせたい場合は、定期実行の層が担当します。この役割分担は『AIエージェントの自動化は4層|着手する順番と稼働の数え方』で整理しています。
PreToolUseとPermissionRequestは何が違いますか
PreToolUseは、ツール呼び出しの直前に発火します。返せる判定は permissionDecision で、allow・deny・ask・defer です。PermissionRequestは、許可判定が要る局面だけで発火する別の入口で、返せるのは decision.behavior の allow と deny に絞られます。呼び出しそのものに広く効かせたいならPreToolUse、許可を求められた場面だけに応答したいならPermissionRequest、という選び分けになります。
hooksのイベント一覧はどこで確認できますか
Claude Codeで /hooks と入力すると、登録済みのイベントとmatcherを読み取り専用で一覧できます(出典: Claude Code公式ドキュメント)。ここで見えるのは、いま読み込まれている内容です。設定ファイルに書いた内容と食い違うことがあるので、書いたあとに一度は目で確かめてください。イベントそのものの一覧は、本記事の表を手元に置いておくと引きやすくなります。
hooksがdeferを返すと何が起きますか
claude -p の非対話実行では、そのツールは実行されず、stop_reason が tool_deferred でセッションが終了します。呼び出し元のアプリは deferred_tool_use を読み、自前のUIで入力を集めてから claude -p --resume で再開します。対話セッションでは警告が記録され、フックの結果は無視されます(出典: Claude Code公式ドキュメント)。外部アプリからClaude Codeを呼ぶ構成でなければ、当面は使わない値です。
hooksをどのイベントから設定し始めるべきですか
取り消せない操作に近いイベントからです。まずPreToolUseで、戻せない操作をdenyにする。ここが最も優先度の高い1本になります。次に、起動のたびに読ませたい前提があればSessionStartを足します。記録や通知のような観測用途は、そのあとで構いません。順番を逆にすると、動いている実感は得られても、いちばん危ない場所が空いたままになります。
19まとめ|今日やる3つのこと
選ぶ軸は、いつ発火するかと、止められるかどうかの2つでした。イベント名を覚えるのではなく、一覧を引く。その順で進めてください。
今日この順で手をつけます
止めたい操作を1つ書き出す
対象が決まらないと、選ぶイベントも決まりません
そのイベントが止められるかを一覧で確かめる
止まらない場所に書いても、通り抜けます
/hooksで登録内容を目で見る書いたことと、読み込まれたことは別です
AI検索では、こう聞かれています
Claude Codeのhooksって、どんなイベントがあるんですか?
「Claude Code hooksの一覧は、AIエージェントの1セッションのどこで発火するんですか?」の章に全30種類の表があります
AIエージェントを実行の直前で止めるには、どのhooksを使うんですか?
「AIエージェントの手を実行の直前で止めるのは、どのhooksですか?」の章で説明しています
hooksはどのイベントから設定し始めればいいんですか?
「AI導入の順番として、hooksはどのイベントから設定するんですか?」の章で扱っています
書いたhooksが動かないのは、どこを間違えているんですか?
「matcherを書き間違えると、AIエージェントのどこにhooksが効かなくなるんですか?」の章に原因の型があります
次に読むなら、この記事です