概要
ポリシーはカテゴリ別にグループ化されています:block-— エージェントの処理を停止する。warn-— エージェントが自己修正できるよう追加のコンテキストを提供する。sanitize-— エージェントが確認する前にツール出力から機密データを除去する。
名前空間
すべてのポリシーは<名前空間>/<名前> というスロットに存在します。組み込みポリシーは failproofai/ 名前空間に属しています(例:failproofai/sanitize-jwt)。名前空間により、類似した短い名前のカスタムポリシーやサードパーティポリシーを読み込む際の衝突を防ぎます。
設定ファイルでは、組み込みポリシーを短縮名または完全修飾名のどちらでも参照でき、両方の形式が同じポリシーに解決されます:
/ が含まれない場合、failproofai はそれをデフォルト名前空間 failproofai に属するものとして扱います。すでに / を含む名前(例:myorg/foo、custom/my-hook)はそのまま保持されます。
require-— 条件が満たされるまで Stop イベントをブロックする。
危険なコマンド
取り消しが困難な操作や、ホストシステムに損害を与える可能性のある操作をエージェントが実行するのを防ぎます。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 -rf、rm -fr、および類似の再帰的削除形式を拒否します。
パラメーター:
例:
block-curl-pipe-sh
イベント: PreToolUse (Bash)デフォルト:
curl <url> | bash、curl <url> | sh、wget <url> | bash、および類似のパターンを拒否します。
パラメーターなし。
block-failproofai-commands
イベント: PreToolUse (Bash)デフォルト: failproofai 自体をアンインストールまたは無効化するコマンド(例:
npm uninstall failproofai、failproofai policies --uninstall)を拒否します。
パラメーターなし。
インフラコマンド
コーディングエージェントがインフラ CLI を実行したり、CI/CD パイプラインをトリガーしたりするのを停止します。このカテゴリのすべてのポリシーはオプトイン(defaultEnabled: false)です。正当に kubectl や terraform などを呼び出す必要があるエージェントは、ポリシーを有効にしない限り影響を受けません。有効にすると、コマンドが 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 run、gh workflow enable、gh workflow disablegh run rerun、gh run cancelgh pr mergegh release create、gh release deletegh cache deletegh secret set、gh secret delete
gh pr view、gh pr list、gh run list、gh release view、gh 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)デフォルト: 環境変数を表示するコマンド(
printenv、env、echo $VAR)を拒否します。
パラメーターなし。
ファイルアクセス
エージェントをプロジェクトの境界内に留め、機密ファイルへのアクセスを防ぎます。block-read-outside-cwd
イベント: PreToolUse (Read, Bash)デフォルト: プロジェクトルート外のファイル読み取りを拒否します。境界は
CLAUDE_PROJECT_DIR(Claude Code がセッションごとに1回設定)で、この変数が未設定の場合はセッションの現在の作業ディレクトリにフォールバックします。ライブの cwd ではなくプロジェクトルートを使用することで、Claude がサブディレクトリに cd した後も境界が安定したまま保たれます。
パラメーター:
例:
block-secrets-write
イベント: PreToolUse (Write, Edit)デフォルト: 秘密鍵や証明書によく使用されるファイルへの書き込みを拒否します:
id_rsa、id_ed25519、*.key、*.pem、*.p12、*.pfx。
パラメーター:
例:
Git
取り消しが困難な誤ったプッシュ、強制プッシュ、ブランチミスを防ぎます。block-push-master
イベント: PreToolUse (Bash)デフォルト:
git push origin main および git push origin master を拒否します。
パラメーター:
例:
block-work-on-main
イベント: PreToolUse (Bash)デフォルト: ワーキングツリーが
main または master 上にある場合、git commit、git merge、git rebase、git cherry-pick を拒否します。ブランチの作成と切り替え(git checkout、git checkout -b、git switch、git 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 TABLE、DROP 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 -g、yarn 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 flask と pdm 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 プロセスで開始された新しいセッションに漏れることはありません。
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 CLI(
gh)のインストールと認証が必要です。
プルリクエストへの読み取りアクセスのために repo スコープを持つ個人アクセストークンで gh auth login を実行してください。gh がインストールされていないか認証されていない場合、ポリシーはフェイルオープンし、理由を Claude に報告します。require-no-conflicts-before-stop
イベント: Stopデフォルト: 現在のブランチがベースブランチにクリーンにマージできない場合に停止を拒否します。まず GitHub 上のブランチに
OPEN 状態の PR があることを確認します。PR がなければ強制するマージターゲットがないため、ポリシー全体が allow にショートサーキットします。OPEN の PR が確認されると、2つの独立したプローブが実行されます:
- ローカル —
git merge-tree --write-tree --name-only origin/<baseBranch> HEAD。コンフリクトが発生した場合、Claude が何を解決すべきかを正確に把握できるよう、deny メッセージにコンフリクトしたファイル名が含まれます。 - GitHub — プレチェックですでに取得した
gh pr view --json mergeable,stateの結果を再利用します。古いローカルのorigin/<baseBranch>では見逃してしまうコンフリクトを検出します(例:最後のフェッチ以降にmainに競合する PR がマージされた場合)。CONFLICTINGの結果は拒否されます。UNKNOWNの結果も拒否され、再度停止を試みる前に約10秒待って再確認するよう Claude に指示します。これは GitHub が再計算する間の偽陰性を防ぎます。
gh がインストールされていない、ブランチに PR が存在しない、PR の状態が OPEN でない(例:MERGED、CLOSED)、または 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)の両方を確認します。
skipped、cancelled、neutral の結論は失敗として扱いません(後者は例えば Socket Security が外部コントリビューターの PR に対して success/failure ではなく neutral を意図的に報告するケースをカバーします)。すべてのチェックが通過した場合は情報メッセージを返します。
パラメーターなし。
このポリシーには GitHub CLI(
gh)のインストールと認証が必要です。
Actions ワークフロー実行と Checks API への読み取りアクセスのために repo スコープを持つ個人アクセストークンで gh auth login を実行してください。gh がインストールされていないか認証されていない場合、ポリシーはフェイルオープンし、理由を Claude に報告します。個別ポリシーの無効化
設定のenabledPolicies から特定のポリシーを削除するか、ダッシュボードの「ポリシー」タブでオフにしてください。
enabledPolicies にリストされていないポリシーは、policyParams のエントリが存在していても実行されません。
