Skip to main content
failproofai には、エージェントの一般的な障害モードを検出する39の組み込みポリシーが同梱されています。各ポリシーは特定のフックイベントタイプとツール名に対して発火します。19のポリシーはパラメーターを受け付けており、コードを書くことなく動作を調整できます。5つのワークフローポリシーは、Claude が停止する前にコミット → プッシュ → PR → CI のパイプラインを強制します。

概要

ポリシーはカテゴリ別にグループ化されています:
  • block- — エージェントの処理を停止する。
  • warn- — エージェントが自己修正できるよう追加のコンテキストを提供する。
  • sanitize- — エージェントが確認する前にツール出力から機密データを除去する。

名前空間

すべてのポリシーは <名前空間>/<名前> というスロットに存在します。組み込みポリシーは failproofai/ 名前空間に属しています(例:failproofai/sanitize-jwt)。名前空間により、類似した短い名前のカスタムポリシーやサードパーティポリシーを読み込む際の衝突を防ぎます。 設定ファイルでは、組み込みポリシーを短縮名または完全修飾名のどちらでも参照でき、両方の形式が同じポリシーに解決されます:
名前に / が含まれない場合、failproofai はそれをデフォルト名前空間 failproofai に属するものとして扱います。すでに / を含む名前(例:myorg/foocustom/my-hook)はそのまま保持されます。
  • require- — 条件が満たされるまで Stop イベントをブロックする。

すべてのポリシーは policyParams にオプションの hint フィールドをサポートします。ヒントは Claude が受け取る deny または instruct メッセージに追加され、ポリシーコードを変更せずに実用的なガイダンスを提供します。組み込み・カスタム・規約ポリシーのすべてで機能します。詳細は設定 → hintを参照してください。

危険なコマンド

取り消しが困難な操作や、ホストシステムに損害を与える可能性のある操作をエージェントが実行するのを防ぎます。

block-sudo

イベント: PreToolUse (Bash)
デフォルト: sudo コマンドを含む任意のコマンドを拒否します。
sudo キーワードを含む呼び出しをブロックします。パターンマッチングは生の文字列ではなく解析済みのコマンドトークンに対して行われるため、シェル演算子インジェクションによる回避を防ぎます。 パラメーター: 例:
この設定では、sudo systemctl status nginx は許可されますが、sudo rm /etc/hosts は拒否されます。
パターンは生のコマンド文字列ではなく解析済みトークンと照合されます。これにより、追加されたシェル演算子による回避を防ぎます(例:sudo systemctl status x; rm -rf /sudo systemctl status * にマッチしません)。

block-rm-rf

イベント: PreToolUse (Bash)
デフォルト: rm -rfrm -fr、および類似の再帰的削除形式を拒否します。
パラメーター: 例:

block-curl-pipe-sh

イベント: PreToolUse (Bash)
デフォルト: curl <url> | bashcurl <url> | shwget <url> | bash、および類似のパターンを拒否します。
パラメーターなし。

block-failproofai-commands

イベント: PreToolUse (Bash)
デフォルト: failproofai 自体をアンインストールまたは無効化するコマンド(例:npm uninstall failproofaifailproofai policies --uninstall)を拒否します。
パラメーターなし。

インフラコマンド

コーディングエージェントがインフラ CLI を実行したり、CI/CD パイプラインをトリガーしたりするのを停止します。このカテゴリのすべてのポリシーはオプトインdefaultEnabled: false)です。正当に kubectlterraform などを呼び出す必要があるエージェントは、ポリシーを有効にしない限り影響を受けません。有効にすると、コマンドが allowPatterns のエントリにマッチしない限り、マッチした CLI のすべての呼び出しが拒否されます。 パターン文法は block-sudo と同じです:トークンは解析済みの argv と照合され、* は1つのトークンのワイルドカードです。また、スタンドアロンのシェル演算子(&&|||;)を含むコマンドや、埋め込まれたシェルメタ文字を含むトークンは、インジェクション回避を防ぐためにアローリストマッチングの前に拒否されます。

block-kubectl

イベント: PreToolUse (Bash)
デフォルト: kubectl の任意の呼び出しを拒否します。
パラメーター: 例:
この設定では、kubectl get pods は許可されますが、kubectl apply -f deploy.yaml は拒否されます。

block-terraform

イベント: PreToolUse (Bash)
デフォルト: terraform または tofu(OpenTofu)の任意の呼び出しを拒否します。
パラメーター: 例:

block-aws-cli

イベント: PreToolUse (Bash)
デフォルト: aws CLI の任意の呼び出しを拒否します。
パラメーター: 例:

block-gcloud

イベント: PreToolUse (Bash)
デフォルト: gcloud(Google Cloud)CLI の任意の呼び出しを拒否します。
パラメーター: 例:

block-az-cli

イベント: PreToolUse (Bash)
デフォルト: az(Azure)CLI の任意の呼び出しを拒否します。
パラメーター: 例:

block-helm

イベント: PreToolUse (Bash)
デフォルト: helm の任意の呼び出しを拒否します。
パラメーター: 例:

block-gh-pipeline

イベント: PreToolUse (Bash)
デフォルト: 状態を変更したりパイプラインをトリガーしたりする以下の gh CLI サブコマンドを拒否します:
  • gh workflow rungh workflow enablegh workflow disable
  • gh run rerungh run cancel
  • gh pr merge
  • gh release creategh release delete
  • gh cache delete
  • gh secret setgh secret delete
gh pr viewgh pr listgh run listgh release viewgh api repos/.../... などの読み取り専用の gh サブコマンドは、このポリシーの対象外です。これらはワークフローの確認(failproofai 自身の require-ci-green-before-stop を含む)に日常的に必要とされます。 パラメーター: 例:

シークレット(サニタイザー)

エージェントが認証情報をコンテキストや出力に漏洩させるのを防ぎます。サニタイザーポリシーは PostToolUse イベントで発火します。Claude が Bash コマンドを実行したり、ファイルを読み込んだり、ツールを呼び出したりすると、これらのポリシーは出力が Claude に返される前に検査します。シークレットパターンが検出された場合、ポリシーは出力が返されるのを防ぐ deny 決定を返します。

sanitize-jwt

イベント: PostToolUse(全ツール)
デフォルト: JWT トークン(. で区切られた3つの base64url セグメント)を削除します。
パラメーターなし。

sanitize-api-keys

イベント: PostToolUse(全ツール)
デフォルト: 一般的な API キー形式を削除します:Anthropic(sk-ant-)、OpenAI(sk-)、GitHub PAT(ghp_)、AWS アクセスキー(AKIA)、Stripe キー(sk_live_sk_test_)、Google API キー(AIza)。
パラメーター: 例:

sanitize-connection-strings

イベント: PostToolUse(全ツール)
デフォルト: 認証情報が埋め込まれたデータベース接続文字列(例:postgresql://user:password@host/db)を削除します。
パラメーターなし。

sanitize-private-key-content

イベント: PostToolUse(全ツール)
デフォルト: PEM ブロック(-----BEGIN PRIVATE KEY----------BEGIN RSA PRIVATE KEY----- など)を削除します。
パラメーターなし。

sanitize-bearer-tokens

イベント: PostToolUse(全ツール)
デフォルト: トークンが20文字以上の Authorization: Bearer <token> ヘッダーを削除します。
パラメーターなし。

環境

エージェントによる機密環境設定の読み取りや露出を防ぎます。

block-env-files

イベント: PreToolUse (Bash, Read)
デフォルト: cat .env.env をファイルパスとして指定した Read ツール呼び出しなど、.env ファイルの読み取りを拒否します。
.envrc やその他の環境関連ファイルはブロックせず、正確に .env という名前のファイルのみを対象とします。 パラメーターなし。

protect-env-vars

イベント: PreToolUse (Bash)
デフォルト: 環境変数を表示するコマンド(printenvenvecho $VAR)を拒否します。
パラメーターなし。

ファイルアクセス

エージェントをプロジェクトの境界内に留め、機密ファイルへのアクセスを防ぎます。

block-read-outside-cwd

イベント: PreToolUse (Read, Bash)
デフォルト: プロジェクトルート外のファイル読み取りを拒否します。境界は CLAUDE_PROJECT_DIR(Claude Code がセッションごとに1回設定)で、この変数が未設定の場合はセッションの現在の作業ディレクトリにフォールバックします。ライブの cwd ではなくプロジェクトルートを使用することで、Claude がサブディレクトリに cd した後も境界が安定したまま保たれます。
パラメーター: 例:

block-secrets-write

イベント: PreToolUse (Write, Edit)
デフォルト: 秘密鍵や証明書によく使用されるファイルへの書き込みを拒否します:id_rsaid_ed25519*.key*.pem*.p12*.pfx
パラメーター: 例:

Git

取り消しが困難な誤ったプッシュ、強制プッシュ、ブランチミスを防ぎます。

block-push-master

イベント: PreToolUse (Bash)
デフォルト: git push origin main および git push origin master を拒否します。
パラメーター: 例:
すべてのブランチへのプッシュを許可する(enabledPolicies からポリシーを削除せずに実質的に無効化する)には、protectedBranches: [] を設定してください。

block-work-on-main

イベント: PreToolUse (Bash)
デフォルト: ワーキングツリーが main または master 上にある場合、git commitgit mergegit rebasegit cherry-pick を拒否します。ブランチの作成と切り替え(git checkoutgit checkout -bgit switchgit switch -c)は影響を受けません。
パラメーター:

block-force-push

イベント: PreToolUse (Bash)
デフォルト: git push --force および git push -f を拒否します。
ポリシー固有のパラメーターはありません。代替案を提案するには、共通の hint を使用してください:

warn-git-amend

イベント: PreToolUse (Bash)
デフォルト: git commit --amend を実行する際に慎重に進むよう Claude に指示します。コマンドをブロックしません。
パラメーターなし。

warn-git-stash-drop

イベント: PreToolUse (Bash)
デフォルト: git stash drop を実行する前に確認するよう Claude に指示します。コマンドをブロックしません。
パラメーターなし。

warn-all-files-staged

イベント: PreToolUse (Bash)
デフォルト: git add -A または git add . を実行する際に、ステージングする内容を確認するよう Claude に指示します。コマンドをブロックしません。
パラメーターなし。

データベース

データベースに対して実行される前に破壊的な SQL 操作を検出します。

warn-destructive-sql

イベント: PreToolUse (Bash)
デフォルト: DROP TABLEDROP DATABASE、または WHERE 句なしの DELETE を含む SQL を実行する前に確認するよう Claude に指示します。
パラメーターなし。

warn-schema-alteration

イベント: PreToolUse (Bash)
デフォルト: ALTER TABLE 文を実行する前に確認するよう Claude に指示します。
パラメーターなし。

警告

潜在的にリスクはあるが破壊的ではない操作の前に、エージェントに追加のコンテキストを提供します。

warn-large-file-write

イベント: PreToolUse (Write)
デフォルト: 1024 KB を超えるファイルを書き込む前に確認するよう Claude に指示します。
パラメーター: 例:
フックハンドラーはペイロードに対して 1 MB の stdin 制限を適用します。小さいコンテンツでこのポリシーをテストするには、thresholdKb を 1024 よりも十分に低い値に設定してください。

warn-package-publish

イベント: PreToolUse (Bash)
デフォルト: npm publish を実行する前に確認するよう Claude に指示します。
パラメーターなし。

warn-background-process

イベント: PreToolUse (Bash)
デフォルト: nohup&disown、または screen を使用してバックグラウンドプロセスを起動する際に注意するよう Claude に指示します。
パラメーターなし。

warn-global-package-install

イベント: PreToolUse (Bash)
デフォルト: npm install -gyarn global add、または仮想環境なしの pip install を実行する前に確認するよう Claude に指示します。
パラメーターなし。

パッケージマネージャー

エージェントが使用できるパッケージマネージャーを強制します。

prefer-package-manager

イベント: PreToolUse (Bash)
デフォルト: 無効。有効にすると、allowed リストにないパッケージマネージャーコマンドをブロックし、許可されたマネージャーを使用してコマンドを書き直すよう Claude に指示します。
検出対象:pip、pip3、python -m pip、npm、npx、yarn、pnpm、pnpx、bun、bunx、uv、poetry、pipenv、conda、cargo。 組み込みブロックリストは次を対象とします:pip、pip3、npm、npx、yarn、pnpm、pnpx、bun、bunx、uv、poetry、pipenv、conda、cargo。このリストにないマネージャーを追加するには blocked を使用してください。 設定例:
この設定では、pip install flaskpdm install flask はどちらも、uv または bun を使用するよう指示するメッセージとともに拒否されます。uv pip install flask のようなコマンドは、uv がアローリストに含まれており最初にチェックされるため許可されます。

AI の動作

エージェントが行き詰まったり予期しない動作をしていないかを検出します。

warn-repeated-tool-calls

イベント: PreToolUse(全ツール)
デフォルト: 同じツールが同一のパラメーターで3回以上呼び出された場合に再考するよう Claude に指示します。これはエージェントがループにはまっている一般的なサインです。
パラメーターなし。

ワークフロー

セッション終了時に規律あるワークフローを強制します。これらのポリシーは Stop イベントで発火し、各条件が満たされるまでエージェントの停止を拒否します。コミット → プッシュ → PR → CI という自然な依存チェーンに従います。ポリシーが拒否した場合、チェーン内のそれ以降のポリシーはスキップされます(deny はショートサーキット)。 すべてのワークフローポリシーはフェイルオープンです:必要なツールが利用できない場合(例:gh がインストールされていない、git リモートがない)、ポリシーはチェックがスキップされた理由を説明する情報メッセージとともに許可します。

CLI ごとの Stop セマンティクス

Stop の強制は、サポートされている6つの CLI によって若干異なります。各 CLI が異なる「エージェント終了」フックコントラクトを公開しているためです。結果は同じです(ワークフローゲートが失敗している間、エージェントは停止できません)が、仕組みは異なります。以下の表に要約します。require-*-before-stop ポリシーを有効にする前に理解しておく価値のある、ユーザーに見える挙動があるのは Pi のみです。
Pi の制限事項。 Pi の AgentEndEvent(Claude の Stop フックに相当するアップストリーム)には Result タイプがありません。発火した時点で Pi のエージェントループはすでに終了しています。Claude / Copilot / Cursor / OpenCode のように Pi を同じループで再試行させることはできません。failproofai はゲートを Pi の before_agent_start イベント(次のユーザープロンプトの後に発火)にシフトするため、ワークフローチェックは依然として強制されますが、現在のターンではなく次のターンで適用されます。実際の動作:
  • Pi が停止した後、deny の理由は Pi のセッション ID をキーとしてメモリ内に保存されます。同じ Pi プロセスで次に送信したプロンプトがそれを消費します:LLM はシステムプロンプトの先頭で MANDATORY ACTION REQUIRED ディレクティブを確認し、コミット(またはプッシュ / PR 作成 / CI 待機)してから、あなたのリクエストを続行します。保存された deny の理由は一度消費されるとクリアされ、ゲートは解除されます。
  • ゲートは Pi のプロセスの存続期間に縛られます。ターンの間に Pi を Ctrl+C で終了するか終了した場合、メモリ内のエントリはプロセスとともに削除され、ゲートは失われます。Claude、Copilot、Cursor、OpenCode も同じ制約があります(エージェントを強制終了するとゲートは失われます)。Pi はエージェントがゲートの発火前に目に見えて終了するため、これがより顕著に現れます。
  • 保留中の deny は、任意の理由(new / resume / fork / quit)による session_shutdown でもクリアされるため、前のセッションの古いゲートが同じ Pi プロセスで開始された新しいセッションに漏れることはありません。
Claude スタイルの同ループ再試行が必要な場合は、他の5つのサポートされている CLI のいずれかで Stop ポリシーを実行してください。AgentEndEvent に Result タイプを追加するためのアップストリームの Pi の更新を追跡しており、これによりこのギャップを解消できる可能性があります。

require-commit-before-stop

イベント: Stop
デフォルト: コミットされていない変更(変更済み、ステージ済み、または未追跡ファイル)がある場合に停止を拒否します。作業ディレクトリがクリーンな場合は情報メッセージを返します。
パラメーターなし。

require-push-before-stop

イベント: Stop
デフォルト: プッシュされていないコミットがある場合、または現在のブランチにリモートトラッキングブランチがない場合に停止を拒否します。必要に応じてトラッキングブランチを作成するために git push -u を提案します。リモートが設定されていない場合はフェイルオープンします。
パラメーター: 例:

require-pr-before-stop

イベント: Stop
デフォルト: 現在のブランチにプルリクエストが存在しない場合、または既存の PR がマージされずにクローズされた場合に停止を拒否します。gh pr create を使用して PR を作成するよう Claude に指示します。PR がマージ済みの場合、ポリシーは許可し(作業がリリースされたため)、ブランチから切り替えるヒント(git checkout main && git pull)を提示します。
パラメーターなし。
このポリシーには GitHub CLIgh)のインストールと認証が必要です。 プルリクエストへの読み取りアクセスのために repo スコープを持つ個人アクセストークンで gh auth login を実行してください。gh がインストールされていないか認証されていない場合、ポリシーはフェイルオープンし、理由を Claude に報告します。

require-no-conflicts-before-stop

イベント: Stop
デフォルト: 現在のブランチがベースブランチにクリーンにマージできない場合に停止を拒否します。まず GitHub 上のブランチに OPEN 状態の PR があることを確認します。PR がなければ強制するマージターゲットがないため、ポリシー全体が allow にショートサーキットします。OPEN の PR が確認されると、2つの独立したプローブが実行されます:
  1. ローカルgit merge-tree --write-tree --name-only origin/<baseBranch> HEAD。コンフリクトが発生した場合、Claude が何を解決すべきかを正確に把握できるよう、deny メッセージにコンフリクトしたファイル名が含まれます。
  2. GitHub — プレチェックですでに取得した gh pr view --json mergeable,state の結果を再利用します。古いローカルの origin/<baseBranch> では見逃してしまうコンフリクトを検出します(例:最後のフェッチ以降に main に競合する PR がマージされた場合)。CONFLICTING の結果は拒否されます。UNKNOWN の結果も拒否され、再度停止を試みる前に約10秒待って再確認するよう Claude に指示します。これは GitHub が再計算する間の偽陰性を防ぎます。
以下の場合は完全にスキップ(allow)します:gh がインストールされていない、ブランチに PR が存在しない、PR の状態が OPEN でない(例:MERGEDCLOSED)、または gh pr view が解析不能な出力を返す。ローカルに origin/<baseBranch> がない場合や、ベースより先にコミットがない場合もフェイルオープンします。ただし、それらのレイヤー1フォールスルーは、許可する前にキャッシュされた PR のマージ可能性を確認します。 パラメーター:
このポリシーには GitHub CLI(gh)が必要です。ポリシーはコンフリクトプローブを実行する前に gh pr view を使用して OPEN の PR が存在することを確認します。gh がない場合、ポリシーは allow にショートサーキットします。プルリクエストへの読み取りアクセスのために repo スコープを持つ個人アクセストークンで gh auth login を実行してください。

require-ci-green-before-stop

イベント: Stop
デフォルト: 現在のブランチで CI チェックが失敗しているか実行中の場合に停止を拒否します。GitHub Actions ワークフロー実行とサードパーティのボットチェック(例:CodeRabbit、SonarCloud、Codecov)の両方を確認します。skippedcancelledneutral の結論は失敗として扱いません(後者は例えば Socket Security が外部コントリビューターの PR に対して success/failure ではなく neutral を意図的に報告するケースをカバーします)。すべてのチェックが通過した場合は情報メッセージを返します。
パラメーターなし。
このポリシーには GitHub CLIgh)のインストールと認証が必要です。 Actions ワークフロー実行と Checks API への読み取りアクセスのために repo スコープを持つ個人アクセストークンで gh auth login を実行してください。gh がインストールされていないか認証されていない場合、ポリシーはフェイルオープンし、理由を Claude に報告します。


個別ポリシーの無効化

設定の enabledPolicies から特定のポリシーを削除するか、ダッシュボードの「ポリシー」タブでオフにしてください。
enabledPolicies にリストされていないポリシーは、policyParams のエントリが存在していても実行されません。