AIエージェントの利便性は非常に高いが、その自律的な判断にすべてを委ねるのはリスクがある。AIは確率的に動作するモデルであり、指示がブレることもある。重要なのは、AIの「やる気」や「判断力」に期待するのではなく、システムレベルで強制的に介入する「機械的なガードレール」を構築することだ。本記事では、AIエージェントの事故を未然に防ぐための実践的な設定術を網羅する。
SNS運用を自動化しませんか?
ThreadPostなら、投稿作成・画像生成・スケジュール管理までAIがサポート。
1. Web検索のモード設定(cached vs live)
AIエージェントの検索機能において、生ページを直接取得する「live」モードは、プロンプトインジェクションの攻撃面となる。攻撃者が用意したページに悪意ある命令を仕込まれると、エージェントがそれを自分のタスクだと勘違いして実行する可能性がある。既定の「cached」を利用し、最新情報が必要な場合のみ「allowed_domains」で取得先を限定する運用が安全だ。
2. PreToolUseフックによる事前遮断
「実行後に警告する」PostToolUseではなく、実行前に介入できる「PreToolUse」を活用する。AIの判断に頼らず、特定のツール使用やファイル操作を機械的にブロックすることで、事故を未然に防ぐポカヨケを構築できる。この手法はAIの判断ブレを排除し、確実に操作を制限するための必須テクニックだ。
3. ガードレールの契約テスト(Contract Testing)
フック設定はモデル更新などで無効化されるリスクがある。擬似的なトランスクリプトとペイロードを用いてフックを実起動するテストを導入する。正常系と異常系の両方を検証し、ガードが機能し続けていることを自動確認するサイクルを回す。
4. PII(メールアドレス等)の出口遮断
AIエージェントに自動注入されるアカウント情報が、意図せず外部リクエストに含まれるリスクを排除する必要がある。フックを用いてツールを通る全経路を監視し、機密情報が含まれる出力を機械的に止めるガードを実装する。モデルのプロンプトインジェクション耐性に依存せず、情報を守るための防波堤だ。

ここまで読んだあなたに
今なら無料で全機能をお試しいただけます。設定後はAIが投稿案を毎日生成。確認して選ぶだけ。
5. Fail-Closed設計の徹底
ガードレールは「判定不能な場合は素通りさせる」のではなく、「判定不能な場合は実行を拒否する」Fail-Closedな設計にする。予期せぬエラーでガードが停止した際に、無防備な状態で運用されるのを防ぐのが目的だ。障害発生時に安全側に倒す設計は、堅牢なシステム運用の基本だ。
6. 通知フックによる人間による監視
重要な操作や確認待ちのタイミングでデスクトップ通知を飛ばすフックを設定する。ターミナルを常時監視しなくても、AIの重要なアクションを人間が即座に把握できる環境を整える。AIの自律的な動きに対して、人間が介入する機会を物理的に増やす運用だ。
7. 設定ファイルの構造管理(JSON管理)
フック設定はJSON形式で管理される。既存の設定を上書きせず、hooksという単一の箱の中にイベントを追加していく構造を理解し、設定の競合や消失を防ぐ運用ルールを確立する。設定ファイルを可視化し、チームで共有可能な状態に保つことが重要だ。

| 設定項目 | 安全性レベル | 運用負荷 | おすすめ度 |
|---|---|---|---|
| Web検索制限 | 高 | 低 | ★★★★★ |
| PreToolUse遮断 | 極高 | 中 | ★★★★★ |
| 契約テスト導入 | 高 | 高 | ★★★★☆ |
| PII出口遮断 | 高 | 高 | ★★★★☆ |
| Fail-Closed設計 | 極高 | 低 | ★★★★★ |
しんたろー:
Claude Codeを運用する上で、PreToolUseのガードレールは必須だ。特定のファイル操作を制限するフックを常駐させることで、開発中の心理的安全性は向上する。
しんたろー:
設定ファイルが複雑になると管理が難しくなるが、JSONで構造を管理するのは理にかなっている。まだフックを導入していないなら、まずは通知フックから導入するのが確実だ。
FAQ
Q1: なぜAIに「気をつけて」と頼むだけではダメなのか
A1: AIは確率的に動作するモデルであり、毎回状況を判断するため、指示がブレたり無視されたりする可能性がある。フックはAIの判断を経由せず、システムレベルで強制的に介入する「ポカヨケ」であるため、AIの判断力に左右されず、常に一定の安全性を保証できる。
Q2: フックの設定を間違えてAIが動かなくなった場合はどうすればいいか
A2: 設定ファイルを一時的に退避またはリネームして、Claude Codeを再起動する。デフォルト設定で起動できれば、フックの記述ミスが原因と特定できる。JSONの構文チェックを行い、マッチャーやコマンドの記述が正しいか再確認する。
Q3: PostToolUseとPreToolUseはどちらを優先すべきか
A3: 止めたい操作がある場合は、必ず「PreToolUse」を使う。PostToolUseはツールが実行された後のイベントであるため、ファイルの上書きや外部リクエストを止めることはできない。PostToolUseは、実行後のログ記録や通知など、事後処理に適している。
Q4: モデルが勝手にメールアドレスを送信しないか不安な場合はどう防ぐか
A4: モデルへの自動注入自体を止める設定がない場合、フックを使ってツールを通る全経路を監視するのが最も確実だ。PreToolUseフックで、外部へのリクエストやコミット時に、PIIが含まれていないかチェックするスクリプトを走らせ、検知した場合は処理を中断させる設計にする。
Q5: フックのテストはどうやって書けばいいか
A5: 擬似的なトランスクリプトとペイロードを作成し、それらをフック用のシェルスクリプトに流し込むテストコードを書く。期待通りの警告が出るケースと、許可されるケースの両方をテストすることで、ガードが正しく機能しているかを確認できる。

AIエージェントの安全性は、モデルの指示に従うことではなく、フックや設定による「機械的な制約」を重ねることで担保される。特に「実行前の遮断」と「Fail-Closed設計」を組み合わせ、テストでその有効性を継続的に検証するサイクルを構築する。

この記事が参考になったら、ThreadPostを試してみませんか?
投稿作成・画像生成・スケジュール管理まで、AIがサポートします。
ThreadPostをもっと知る