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)

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

判定ヘルパー

deny(message) — メッセージは "Blocked by failproofai:" というプレフィックスを付けて Claude に表示されます。1つの deny が発生すると、それ以降の評価はすべて短絡します。 instruct(message) — メッセージは現在のツール呼び出しに対する Claude のコンテキストに追記されます。すべての instruct メッセージは蓄積されて一括して配信されます。
deny または instruct メッセージに追加のガイダンスを付け加えるには、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/ ディレクトリにはすぐに使えるポリシーファイルが含まれています:

明示的なファイルのサンプルを使用する

規約ベースのサンプルを使用する

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