Skip to main content
カスタムポリシーを使うと、あらゆるエージェントの動作に対してルールを記述できます。プロジェクト規約の強制、ドリフトの防止、破壊的操作のゲート処理、スタックしたエージェントの検出、Slackや承認ワークフローとの連携など、さまざまな用途に対応しています。組み込みポリシーと同じフックイベントシステムと allowdenyinstruct の判定を使用します。

クイックサンプル

インストール:

カスタムポリシーの2つの読み込み方法

オプション1: 規約ベース(推奨)

*policies.{js,mjs,ts} ファイルを .failproofai/policies/ に配置するだけで自動的に読み込まれます。フラグや設定変更は不要です。gitフックと同じ仕組みで、ファイルを置くだけで動作します。
動作の仕組み:
  • プロジェクトとユーザーの両ディレクトリがスキャンされます(和集合 — スコープ優先ではありません)
  • ファイルは各ディレクトリ内でアルファベット順に読み込まれます。順序を制御するには 01-02- などのプレフィックスを付けてください
  • *policies.{js,mjs,ts} にマッチするファイルのみ読み込まれ、それ以外は無視されます
  • 各ファイルは独立して読み込まれます(ファイル単位でフェイルオープン)
  • 明示的な --custom や組み込みポリシーと共存できます
規約ポリシーは、組織の品質基準を構築する最も簡単な方法です。.failproofai/policies/ をgitにコミットすれば、開発者ごとのセットアップなしにすべてのチームメンバーが同じルールを自動的に適用できます。新しい障害パターンを発見したらポリシーを追加してプッシュするだけで、継続的に改善される生きた品質基準が積み上がっていきます。

オプション2: 明示的なファイルパス

解決された絶対パスは policies-config.jsoncustomPoliciesPath に保存されます。ファイルはフックイベントのたびに新たに読み込まれ、イベント間でのキャッシュはありません。

両方を組み合わせて使う

規約ポリシーと明示的な --custom ファイルは共存できます。読み込み順序:
  1. 明示的な customPoliciesPath ファイル(設定されている場合)
  2. プロジェクト規約ファイル({cwd}/.failproofai/policies/、アルファベット順)
  3. ユーザー規約ファイル(~/.failproofai/policies/、アルファベット順)

API

インポート

customPolicies.add(hook)

ポリシーを登録します。1つのファイルに複数のポリシーを定義する場合は、必要なだけ呼び出せます。

判定ヘルパー

deny(message) — メッセージは "Blocked by failproofai:" というプレフィックスが付いて Claude に表示されます。1つでも deny が返されると、それ以降の評価は短絡されます。 instruct(message) — メッセージは現在のツール呼び出しに対する Claude のコンテキストに追記されます。すべての instruct メッセージは蓄積されてまとめて配信されます。
denyinstruct のメッセージに追加のガイダンスを付け加えるには、policyParamshint フィールドを使います — コードの変更は不要です。カスタム(custom/)、プロジェクト規約(.failproofai-project/)、ユーザー規約(.failproofai-user/)ポリシーでも機能します。詳細は 設定 → hint を参照してください。

情報提供用の 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 フィールド

イベントタイプ


評価順序

ポリシーは以下の順序で評価されます:
  1. 組み込みポリシー(定義順)
  2. customPoliciesPath からの明示的なカスタムポリシー(.add() の呼び出し順)
  3. プロジェクトの .failproofai/policies/ からの規約ポリシー(ファイルはアルファベット順、ファイル内は .add() の呼び出し順)
  4. ユーザーの ~/.failproofai/policies/ からの規約ポリシー(ファイルはアルファベット順、ファイル内は .add() の呼び出し順)
最初の deny はそれ以降のすべてのポリシーを短絡します。すべての instruct メッセージは蓄積されてまとめて配信されます。

推移的なインポート

カスタムポリシーファイルは相対パスを使ってローカルモジュールをインポートできます:
エントリファイルから到達可能なすべての相対インポートが解決されます。これは from "failproofai" インポートを実際の dist パスに書き換え、ESM 互換性を確保するために一時的な .mjs ファイルを作成することで実装されています。

イベントタイプのフィルタリング

match.events を使って、ポリシーが発火するタイミングを限定できます:
match を完全に省略すると、すべてのイベントタイプで発火します。

エラー処理と障害モード

カスタムポリシーはフェイルオープンです。エラーが発生しても組み込みポリシーをブロックしたり、フックハンドラーをクラッシュさせたりすることはありません。
カスタムポリシーのエラーをデバッグするには、ログファイルを監視してください:

全サンプル: 複数ポリシー


サンプル集

examples/ ディレクトリにはすぐに使えるポリシーファイルが含まれています:

明示的なファイルサンプルの使い方

規約ベースのサンプルの使い方

インストールコマンドは不要です。次のフックイベント時に自動的にファイルが読み込まれます。