Skip to main content
カスタムポリシーは、トレースや監査から得られた障害パターンを、エージェントの動作中にリアルタイムで実行される判断に変換します。ポリシーはアクションを許可したり、エージェントにガイダンスを提供したり、別のインシデントを引き起こす前にアクションを拒否したりできます。 動作がツール、パス、コマンド、環境、または運用ルールに依存する場合はカスタムポリシーを使用してください。既存のコントロールを再作成しないよう、まず Failproof AI ポリシーパック を確認してください。

カスタムポリシーの作成

  1. Admin → ポリシーエディター に移動し、新しいポリシー を選択して、防止したい障害を説明します。
  2. ポリシーソースを追加し、エディターで期待されるマッチと安全な非マッチをテストします。すべてのバリデーションエラーを解消します。
  3. ドラフトを保存し、バージョンを公開 を選択して不変バージョンを作成します。
  4. Admin → 施行 に移動し、観察 モードでテストマシンにバージョンをデプロイし、施行する前に 観察 → ポリシー で決定を確認します。 カスタムポリシーの作成と公開に使用するポリシーエディター。

狭いルールから始める

このポリシーは、コマンドがproductionをターゲットにしている場合にのみ、破壊的なKubernetesコマンドをブロックします。この厳密な障害モード以外はすべて allow() を返します。
良いポリシーは1文で説明できるほど狭いものです。エージェントの意図ではなく、観察可能なアクションにマッチさせ、ルールが適用されない場合はすぐに allow() を返します。

決定を選択する

理由は回復しなければならないエージェント向けに書いてください。何が検出されたか、代わりに何をすべきかを説明します。
安全境界に instruct() を使用しないでください。ガイダンスの配信はエージェントハーネスによって異なります。アクションを防止しなければならない場合は deny() を使用してください。

ポリシーオブジェクト

ツールのフィルタリングは fn 内で行ってください。match.toolNames はパブリックなカスタムポリシー型には含まれていません。

ポリシーコンテキスト

すべてのポリシーは PolicyContext を受け取ります。 すべてのオプション値を本当にオプションとして扱ってください。エージェントのバージョンとイベントタイプによって提供されるフィールドは異なります。

共通ツール入力

Failproof AI はサポートされているハーネス間で共通ツールを正規化するため、ポリシーは通常1つの入力形式を使用できます。 ツール入力値は unknown 型であるため、防御的な型変換を使用してください:

イベントを選択する

イベントの可用性とブロック動作はエージェントハーネスによって異なります。混合フリートでイベントに依存する前に エージェントハーネス を参照してください。
SessionStart、SessionEnd、UserPromptSubmit、PreToolUse、PermissionRequest、PermissionDenied、PostToolUse、PostToolUseFailure、Notification、SubagentStart、SubagentStop、TaskCreated、TaskCompleted、Stop、StopFailure、TeammateIdle、InstructionsLoaded、ConfigChange、CwdChanged、FileChanged、WorktreeCreate、WorktreeRemove、PreCompact、PostCompact、Elicitation、ElicitationResult、UserPromptExpansion、PostToolBatch、Setup。

一般的なポリシーパターンの作成

保護されたパスへの書き込みをブロックする

非ブロッキングのガイダンスを提供する

セッション完了をゲートする

Stop イベントが拒否されると、エージェントが再試行する可能性があります。現在の環境でエージェントが満たせる条件のみにゲートし、すべてのサブプロセスやネットワーク呼び出しに制限を設けてください。

ポリシーファイルの読み込み

コンベンションファイル

コンベンションファイルは自動的に読み込まれます:
  • プロジェクトとユーザーのポリシーディレクトリは両方読み込まれます。
  • ファイルは各ディレクトリ内でアルファベット順に読み込まれます。
  • ファイルは policies.js、policies.mjs、または policies.ts で終わる必要があります。
  • 1つのファイル内で複数の customPolicies.add() 呼び出しがサポートされています。
  • ローカルモジュールからの相対インポートがサポートされています。
  • プロジェクトポリシーはコミットでき、同じルールがリポジトリに従います。

明示的なファイル

バリデーションや設定でエントリーファイルを直接指定する場合は明示的なパスを使用してください:
明示的なファイルが最初に読み込まれ、次にプロジェクトのコンベンションファイル、その後ユーザーのコンベンションファイルが読み込まれます。両方のパスで見つかったファイルは一度だけ読み込まれます。

バリデートとテスト

バリデーションはプロダクションローダーを通じてモジュールを実行し、少なくとも1つのポリシーが登録されていることを確認します。
バリデーションは、ファイルの欠落、構文エラー、未解決のインポート、トップレベルの例外、およびモジュール読み込みタイムアウトを検出します。ただし、マッチロジックが正しいかどうかは検証されません。 少なくとも以下のケースをテストしてください:
  • マッチして意図したポリシー理由を生成しなければならないアクション。
  • allow() を返さなければならない近しいが安全なアクション。
  • ツールフィールドの欠落または不正な形式。
  • 代替コマンド構文、パス、クォート、大文字小文字、および空白。
  • 利用できないサブプロセスまたはネットワーク依存関係。
観察 → ポリシー でカスタムポリシーに結果を帰属させてください。異なる組み込みポリシーが決定を行った場合、ブロックされたテストは十分ではありません。

ランタイム動作

  • 組み込みポリシーはカスタムポリシーより先に評価されます。
  • 最初の deny でそれ以降のポリシー評価が停止します。
  • どのポリシーもイベントを拒否しない場合、複数の instruct 結果を組み合わせることができます。
  • ポリシー関数の実行期限は10秒です。
  • 例外またはタイムアウトはログに記録され、allow() として扱われます。
  • 読み込みに失敗したコンベンションファイルはスキップされ、他のカスタムファイルと組み込みポリシーは続行されます。
  • トップレベルのモジュール読み込みにも10秒の期限があります。
  • クラウド観察モードはポリシーを実行しますが、非許可の決定を施行せずに記録します。
ポリシーモジュールは決定論的かつ高速に保ちます。トップレベルのネットワーク呼び出しやサーバー起動は避けてください。fn 内の処理を制限し、依存関係の失敗をキャッチし、その失敗がアクションを許可するか拒否するかを意図的に選択してください。

APIエクスポート

TypeScriptは PolicyContext、PolicyResult、CustomHook、PolicyDecision、および PolicyFunction をエクスポートします。

カスタムポリシーをデプロイする

バージョンを公開し、観察モードでデプロイして決定を確認し、施行に移行します。