結論:hookの文章と実際の判定を分けて確認する
公式Claude Code changelogの2.1.294(2026年10月8日)は、たとえば「Block commands that...」のような命令文で書いたprompt・agent hooksが、止めるべき操作を許してしまう問題を修正しました。また、StopとSubagentStopのprompt hookで「ビルドが壊れていたら続ける」のような命令文を判定する処理も改善され、Claudeが早く止まりにくくなっています。
これは「すべてのhooksが安全になった」という意味ではありません。hookはイベント、matcher、handler、権限モードの組み合わせで動きます。記事plugin hookの審査は拡張機能の導入評価、本稿は2.1.294の更新後に、既存設定が意図どおりブロック・継続するかを確かめる検証へ絞ります。
何をテストするかを比較する
| 対象 | 起こり得る失敗 | 合格条件 |
|---|---|---|
| prompt hook | 命令文が許可・拒否として意図どおり評価されない | 禁止入力で明示的に停止し、理由が残る |
| agent hook | subagentの操作がブロックをすり抜ける | agent固有の禁止ケースを再現できる |
| Stop | 未完了なのに早く終了する | 未達条件で継続し、完了条件で停止する |
| SubagentStop | subagentの作業結果を確認せず終了する | テスト・差分・結果の判定を通る |
禁止操作の安全性は、hookの自然言語だけに依存させないでください。公式hooksガイドのPreToolUse例のように、対象toolをmatcherで絞り、必要ならJSONのpermission decisionを返し、Claude Codeの権限設定と二重に確認します。文章を正しく書くことと、実行をOSやsandbox境界で止めることは別の層です。
更新後に行う7手順
claude --versionで2.1.294以上か、実際に使う端末・CI・managed環境ごとに確認します。.claude/settings.json、managed settings、plugin内のhooksを収集し、prompt・agent・Stop・SubagentStopを分けます。- 各hookについて、イベント、matcher、入力、期待するallow・deny・continue・stopを表にします。
- 破壊的操作を実行しないテスト用repositoryで、禁止入力、似た許可入力、曖昧な入力の3ケースを作ります。
- prompt・agent hookを一件ずつ動かし、終了コード、JSON出力、Claudeの次の動作、ログを保存します。
- Stop・SubagentStopは、未完了のテストと完了済みのテストを分け、早期終了がないか確認します。
- 本番へ戻す前に、失敗時はManualへ戻す、公開を停止する、担当者へ通知するなどのrollback条件を記録します。
テストで本物の削除や外部送信を行う必要はありません。fake command、読み取り専用fixture、ネットワーク遮断環境を使い、hookが「止めたつもり」ではなく、後続のtool callが発生しなかったことを証跡で確認します。CIではexit 0だけを成功とせず、期待したイベントとdecisionがあるかを検証します。
prompt hookとpermissionを混同しない
Claude Codeの公式Securityガイドは、Manual modeでは編集・テスト・コマンド実行などで承認を求め、Auto modeでは別のclassifierがunsafeな操作を確認すると説明しています。hookはその動作を置き換える万能な認証ではありません。権限モード、allow・denyルール、sandbox、作業ディレクトリ、hookの順に、どの層が最終的に操作を止めるかを整理します。
たとえば「本番ブランチへpushしない」という要件をprompt hookだけに書くと、入力の言い換え、別のtool、subagent、直接Bashによって抜け道が生まれます。対象toolと引数の検査、Git側の保護、ネットワークやcredentialの分離、レビュー承認を組み合わせます。hookの修正確認と、企業の安全設計は別の受け入れ条件です。
| 症状 | 最初に見る場所 | 停止判断 |
|---|---|---|
| 禁止操作が通る | バージョン、matcher、handler出力 | 本番設定を一時停止 |
| 早く終了する | Stop条件、テスト結果の渡し方 | 完了条件を明示し再現 |
| ログがない | stdout、stderr、OTel、CI保存 | 公開・自動実行を保留 |
| 許可が過剰 | permission mode、managed設定 | Manualとsandboxへ戻す |
以前のrm安全対策と同じく、危険操作は一つの設定名で守らず、入力・権限・実行環境・レビューを分けて記録します。
企業運用のチェックリスト
- 全端末でClaude Code 2.1.294以上を確認した
- prompt、agent、Stop、SubagentStopを別々に棚卸しした
- 禁止・許可・曖昧の3ケースをテストした
- tool callが発生しなかったことをログで確認した
- hookとpermission、sandbox、Git保護の責任分界がある
- 失敗時のManual化、停止、通知、rollback条件がある
- 設定変更をレビューし、次回更新で再実行する担当者がいる
アップデートの価値は、修正内容を読むことだけでなく、自社のhookがどの仕様へ依存しているかを明確にすることです。変更前後のバージョン、設定ハッシュ、テスト結果、未確認範囲を残せば、同じ障害が発生したときに「Claudeの判定か、自社handlerか、権限設定か」を切り分けられます。
更新確認の記録には、端末ごとのバージョン、読み込まれたsettingsのscope、テスト入力のhash、hookのdecision、実際に発生したtool callを残します。仕様修正を受けた直後は、設定を広げるより先に代表的な拒否ケースを回帰させ、ログが欠けた場合は成功扱いにしないことが運用上の境界になります。さらに、設定変更者と承認者を残し、次回更新で同じ入力を再実行できる形にします。
FAQ
- 2.1.294でhooksの何が変わりましたか?
- 命令文のprompt・agent hooksが本来ブロックすべき操作を許す問題が修正され、Stop・SubagentStopの判定も改善されました。
- アップデートだけで安全になりますか?
- いいえ。設定、matcher、権限モード、ログを自社の禁止・許可ケースで検証します。
- 企業のhook設計を相談できますか?
- できます。対象業務、禁止操作、承認点、監査ログ、停止条件を無料診断(60秒)で整理します。
