allow、deny、instruct の判定を使用します。
クイックサンプル
カスタムポリシーの2つの読み込み方法
オプション1: 規約ベース(推奨)
*policies.{js,mjs,ts} ファイルを .failproofai/policies/ に配置するだけで自動的に読み込まれます。フラグや設定変更は不要です。gitフックと同じ仕組みで、ファイルを置くだけで動作します。
- プロジェクトとユーザーの両ディレクトリがスキャンされます(和集合 — スコープ優先ではありません)
- ファイルは各ディレクトリ内でアルファベット順に読み込まれます。順序を制御するには
01-、02-などのプレフィックスを付けてください *policies.{js,mjs,ts}にマッチするファイルのみ読み込まれ、それ以外は無視されます- 各ファイルは独立して読み込まれます(ファイル単位でフェイルオープン)
- 明示的な
--customや組み込みポリシーと共存できます
オプション2: 明示的なファイルパス
policies-config.json の customPoliciesPath に保存されます。ファイルはフックイベントのたびに新たに読み込まれ、イベント間でのキャッシュはありません。
両方を組み合わせて使う
規約ポリシーと明示的な--custom ファイルは共存できます。読み込み順序:
- 明示的な
customPoliciesPathファイル(設定されている場合) - プロジェクト規約ファイル(
{cwd}/.failproofai/policies/、アルファベット順) - ユーザー規約ファイル(
~/.failproofai/policies/、アルファベット順)
API
インポート
customPolicies.add(hook)
ポリシーを登録します。1つのファイルに複数のポリシーを定義する場合は、必要なだけ呼び出せます。
判定ヘルパー
deny(message) — メッセージは "Blocked by failproofai:" というプレフィックスが付いて Claude に表示されます。1つでも deny が返されると、それ以降の評価は短絡されます。
instruct(message) — メッセージは現在のツール呼び出しに対する Claude のコンテキストに追記されます。すべての instruct メッセージは蓄積されてまとめて配信されます。
情報提供用の allow メッセージ
allow(message) は操作を許可しつつ、Claude へ情報メッセージを送信します。メッセージはフックハンドラーの stdout レスポンスの additionalContext として配信されます — instruct と同じ仕組みですが、意味的には異なります: 警告ではなくステータス更新です。
ユースケース:
- ステータス確認:
allow("All CI checks passed.")— すべて正常であることを Claude に伝える - フェイルオープンの説明:
allow("GitHub CLI not installed, skipping CI check.")— チェックがスキップされた理由を Claude に伝え、完全なコンテキストを提供する - 複数メッセージの蓄積: 複数のポリシーがそれぞれ
allow(message)を返した場合、すべてのメッセージが改行で結合されてまとめて配信される
PolicyContext フィールド
SessionMetadata フィールド
イベントタイプ
評価順序
ポリシーは以下の順序で評価されます:- 組み込みポリシー(定義順)
customPoliciesPathからの明示的なカスタムポリシー(.add()の呼び出し順)- プロジェクトの
.failproofai/policies/からの規約ポリシー(ファイルはアルファベット順、ファイル内は.add()の呼び出し順) - ユーザーの
~/.failproofai/policies/からの規約ポリシー(ファイルはアルファベット順、ファイル内は.add()の呼び出し順)
最初の
deny はそれ以降のすべてのポリシーを短絡します。すべての instruct メッセージは蓄積されてまとめて配信されます。推移的なインポート
カスタムポリシーファイルは相対パスを使ってローカルモジュールをインポートできます:from "failproofai" インポートを実際の dist パスに書き換え、ESM 互換性を確保するために一時的な .mjs ファイルを作成することで実装されています。
イベントタイプのフィルタリング
match.events を使って、ポリシーが発火するタイミングを限定できます:
match を完全に省略すると、すべてのイベントタイプで発火します。
エラー処理と障害モード
カスタムポリシーはフェイルオープンです。エラーが発生しても組み込みポリシーをブロックしたり、フックハンドラーをクラッシュさせたりすることはありません。全サンプル: 複数ポリシー
サンプル集
examples/ ディレクトリにはすぐに使えるポリシーファイルが含まれています:

