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)
ポリシーを登録します。同一ファイルに複数のポリシーを定義する場合は、必要な回数だけ呼び出せます。
判定ヘルパー
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/ ディレクトリにはすぐに使えるポリシーファイルが含まれています:

