title: Встроенные политики description: “Все 39 встроенных политик, которые ловят распространённые сбои агентов” icon: shield
failproofai поставляется с 39 встроенными политиками, которые ловят распространённые сбои агентов. Каждая политика срабатывает на конкретный тип события hook и имя инструмента. Девятнадцать политик принимают параметры, позволяющие настраивать их поведение без написания кода. Пять политик workflow принудительно соблюдают конвейер commit → push → PR → CI перед остановкой Claude.Обзор
Политики сгруппированы по категориям:| Категория | Политики | Тип hook |
|---|---|---|
| Опасные команды | block-sudo, block-rm-rf, block-curl-pipe-sh, block-failproofai-commands | PreToolUse |
| Команды инфраструктуры | block-kubectl, block-terraform, block-aws-cli, block-gcloud, block-az-cli, block-helm, block-gh-pipeline | PreToolUse |
| Секреты (санитайзеры) | sanitize-jwt, sanitize-api-keys, sanitize-connection-strings, sanitize-private-key-content, sanitize-bearer-tokens | PostToolUse |
| Переменные окружения | block-env-files, protect-env-vars | PreToolUse |
| Доступ к файлам | block-read-outside-cwd, block-secrets-write | PreToolUse |
| Git | block-push-master, block-work-on-main, block-force-push, warn-git-amend, warn-git-stash-drop, warn-all-files-staged | PreToolUse |
| База данных | warn-destructive-sql, warn-schema-alteration | PreToolUse |
| Предупреждения | warn-large-file-write, warn-package-publish, warn-background-process, warn-global-package-install | PreToolUse |
| Менеджеры пакетов | prefer-package-manager | PreToolUse |
| Workflow | require-commit-before-stop, require-push-before-stop, require-pr-before-stop, require-no-conflicts-before-stop, require-ci-green-before-stop | Stop |
block-— остановить выполнение агентом операции.warn-— дать агенту дополнительный контекст, чтобы он мог самокорректироваться.sanitize-— удалить чувствительные данные из вывода инструмента перед тем, как агент их увидит.
Пространства имён
Каждая политика находится в слоте<namespace>/<name>. Встроенные политики принадлежат пространству имён failproofai/ — например, failproofai/sanitize-jwt. Пространство имён предотвращает коллизии, когда вы также загружаете пользовательские или сторонние политики с похожими короткими именами.
В вашей конфигурации вы можете ссылаться на встроенную политику как по её короткому имени, так и по полному имени; обе формы разрешаются в одну и ту же политику:
/, failproofai обрабатывает его как принадлежащее пространству имён по умолчанию failproofai. Имена, которые уже содержат / (например myorg/foo, custom/my-hook), сохраняются как есть.
require-— заблокировать событие Stop до выполнения условий.
Опасные команды
Предотвратить выполнение агентом операций, которые сложно отменить или которые могут повредить хост-систему.block-sudo
Событие: PreToolUse (Bash)По умолчанию: Блокирует любую команду
sudo.
Блокирует вызовы, содержащие ключевое слово sudo. Сопоставление шаблонов выполняется на разобранных токенах команды, а не на исходной строке, чтобы предотвратить обход через инъекцию операторов shell.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
allowPatterns | string[] | [] | Точные префиксы команд, которые разрешены. Каждая запись сопоставляется с разобранными токенами argv. |
sudo systemctl status nginx разрешена, но sudo rm /etc/hosts заблокирована.
Шаблоны сопоставляются с разобранными токенами, а не с исходной командной строкой. Это предотвращает обход через приложенные операторы shell (например
sudo systemctl status x; rm -rf / не соответствует sudo systemctl status *).block-rm-rf
Событие: PreToolUse (Bash)По умолчанию: Блокирует
rm -rf, rm -fr и похожие формы рекурсивного удаления.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
allowPaths | string[] | [] | Пути, которые безопасно рекурсивно удалять (например /tmp). |
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).
Нет параметров.
Команды инфраструктуры
Остановить agent-ы кодирования от запуска CLI инфраструктуры или срабатывания CI/CD pipeline-ов. Все политики в этой категории opt-in (defaultEnabled: false) — агенты, которым легитимно нужно вызывать kubectl, terraform и т.д., не будут нарушены, если вы не включите политику. При включении каждый вызов сопоставленного CLI блокируется, если только команда не совпадает с записью в allowPatterns.
Грамматика шаблонов такая же, как в block-sudo: токены сопоставляются с разобранными argv, * является подстановочным символом для одного токена, и любая команда, содержащая отдельный оператор shell (&&, ||, |, ;) или токен с встроенными метасимволами shell, отклоняется до сопоставления списка разрешений, чтобы предотвратить обход через инъекцию.
block-kubectl
Событие: PreToolUse (Bash)По умолчанию: Блокирует любой вызов
kubectl.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
allowPatterns | string[] | [] | Префиксы команд kubectl, которые разрешены. |
kubectl get pods разрешена, но kubectl apply -f deploy.yaml заблокирована.
block-terraform
Событие: PreToolUse (Bash)По умолчанию: Блокирует любой вызов
terraform или tofu (OpenTofu).
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
allowPatterns | string[] | [] | Префиксы команд terraform/tofu, которые разрешены. |
block-aws-cli
Событие: PreToolUse (Bash)По умолчанию: Блокирует любой вызов AWS CLI. Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
allowPatterns | string[] | [] | Префиксы команд AWS CLI, которые разрешены. |
block-gcloud
Событие: PreToolUse (Bash)По умолчанию: Блокирует любой вызов
gcloud (Google Cloud) CLI.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
allowPatterns | string[] | [] | Префиксы команд gcloud, которые разрешены. |
block-az-cli
Событие: PreToolUse (Bash)По умолчанию: Блокирует любой вызов Azure CLI. Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
allowPatterns | string[] | [] | Префиксы команд Azure CLI, которые разрешены. |
block-helm
Событие: PreToolUse (Bash)По умолчанию: Блокирует любой вызов
helm.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
allowPatterns | string[] | [] | Префиксы команд helm, которые разрешены. |
block-gh-pipeline
Событие: PreToolUse (Bash)По умолчанию: Блокирует следующие подкоманды
gh CLI, которые изменяют состояние или запускают pipeline-ы:
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, такие как gh pr view, gh pr list, gh run list, gh release view и gh api repos/.../... не соответствуют этой политике — они регулярно нужны для проверок workflow (включая собственный require-ci-green-before-stop failproofai).
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
allowPatterns | string[] | [] | Конкретные сценариальные вызовы, которые нужно разрешить, несмотря на то что они иначе были бы заблокированы. |
Секреты (санитайзеры)
Остановить агентов от утечки учётных данных в их контекст или вывод. Политики-санитайзеры срабатывают на событиях PostToolUse. Когда Claude запускает команду Bash, читает файл или вызывает любой инструмент, эти политики проверяют вывод перед его возвратом Claude. Если обнаружен паттерн секрета, политика возвращает решение deny, которое предотвращает передачу вывода обратно.sanitize-jwt
Событие: PostToolUse (все инструменты)По умолчанию: Скрывает JWT токены (три сегмента base64url, разделённые
.).
Нет параметров.
sanitize-api-keys
Событие: PostToolUse (все инструменты)По умолчанию: Скрывает распространённые форматы API ключей: Anthropic (
sk-ant-), OpenAI (sk-), GitHub PAT (ghp_), AWS ключи доступа (AKIA), Stripe ключи (sk_live_, sk_test_) и Google API ключи (AIza).
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
additionalPatterns | { regex: string; label: string }[] | [] | Дополнительные regex паттерны, которые нужно обрабатывать как секреты. |
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 (все инструменты)По умолчанию: Скрывает
Authorization: Bearer <token> заголовки, где токен составляет 20 или более символов.
Нет параметров.
Переменные окружения
Защитить чувствительную конфигурацию окружения от чтения или раскрытия агентами.block-env-files
Событие: PreToolUse (Bash, Read)По умолчанию: Блокирует чтение файлов
.env через cat .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), с fallback на текущую рабочую директорию сеанса, если эта переменная не установлена. Использование корня проекта вместо live cwd означает, что граница остаётся стабильной даже после того, как Claude перейдёт в подпапку.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
allowPaths | string[] | [] | Абсолютные префиксы путей, которые разрешены даже если вне корня проекта. |
block-secrets-write
Событие: PreToolUse (Write, Edit)По умолчанию: Блокирует запись в файлы, обычно используемые для приватных ключей и сертификатов:
id_rsa, id_ed25519, *.key, *.pem, *.p12, *.pfx.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
additionalPatterns | string[] | [] | Дополнительные паттерны имён файлов (glob-стиль) для блокировки. |
Git
Предотвратить случайные push-и, force-push-и и ошибки веток, которые сложно отменить.block-push-master
Событие: PreToolUse (Bash)По умолчанию: Блокирует
git push origin main и git push origin master.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
protectedBranches | string[] | ["main", "master"] | Имена веток, в которые нельзя напрямую push-ить. |
block-work-on-main
Событие: PreToolUse (Bash)По умолчанию: Блокирует
git commit, git merge, git rebase и git cherry-pick пока рабочее дерево находится на main или master. Создание и переключение веток (git checkout, git checkout -b, git switch, git switch -c) не затронуты.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
protectedBranches | string[] | ["main", "master"] | Имена веток, на которых commit/merge/rebase/cherry-pick заблокированы. |
block-force-push
Событие: PreToolUse (Bash)По умолчанию: Блокирует
git push --force и git push -f.
Нет политико-специфичных параметров. Используйте cross-cutting hint для предложения альтернатив:
warn-git-amend
Событие: PreToolUse (Bash)По умолчанию: Инструктирует Claude действовать осторожно при запуске
git commit --amend. Команда не блокируется.
Нет параметров.
warn-git-stash-drop
Событие: PreToolUse (Bash)По умолчанию: Инструктирует Claude подтвердить перед запуском
git stash drop. Команда не блокируется.
Нет параметров.
warn-all-files-staged
Событие: PreToolUse (Bash)По умолчанию: Инструктирует Claude просмотреть то, что оно ставит на сцену, при запуске
git add -A или git add .. Команда не блокируется.
Нет параметров.
База данных
Поймать деструктивные SQL операции перед их выполнением на вашей БД.warn-destructive-sql
Событие: PreToolUse (Bash)По умолчанию: Инструктирует Claude подтвердить перед запуском SQL, содержащего
DROP TABLE, DROP DATABASE или DELETE без предложения WHERE.
Нет параметров.
warn-schema-alteration
Событие: PreToolUse (Bash)По умолчанию: Инструктирует Claude подтвердить перед запуском
ALTER TABLE операторов.
Нет параметров.
Предупреждения
Дать агентам дополнительный контекст перед потенциально рискованными, но не деструктивными операциями.warn-large-file-write
Событие: PreToolUse (Write)По умолчанию: Инструктирует Claude подтвердить перед записью файлов больше 1024 КБ. Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
thresholdKb | number | 1024 | Пороговый размер файла в килобайтах, выше которого выводится предупреждение. |
Обработчик hook применяет лимит 1 МБ stdin для payload-ов. Чтобы протестировать эту политику с малым содержимым, установите
thresholdKb значительно ниже 1024.warn-package-publish
Событие: PreToolUse (Bash)По умолчанию: Инструктирует Claude подтвердить перед запуском
npm publish.
Нет параметров.
warn-background-process
Событие: PreToolUse (Bash)По умолчанию: Инструктирует Claude быть осторожным при запуске фоновых процессов через
nohup, &, disown или screen.
Нет параметров.
warn-global-package-install
Событие: PreToolUse (Bash)По умолчанию: Инструктирует Claude подтвердить перед запуском
npm install -g, yarn global add или pip install без виртуального окружения.
Нет параметров.
Менеджеры пакетов
Принудить агента использовать только разрешённые менеджеры пакетов.prefer-package-manager
Событие: PreToolUse (Bash)По умолчанию: Отключена. При включении блокирует любую команду менеджера пакетов не в списке
allowed и говорит Claude переписать команду, используя разрешённый менеджер.
Обнаруживает: pip, pip3, python -m pip, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
allowed | string[] | [] | Разрешённые имена менеджеров пакетов. Любой обнаруженный менеджер не в этом списке блокируется. Когда пусто, политика не оказывает эффекта. |
blocked | string[] | [] | Дополнительные имена менеджеров для блокировки помимо встроенного списка (например ['pdm', 'pipx']). |
blocked для добавления менеджеров не в этом списке.
Пример конфигурации:
pip install flask и pdm install flask оба заблокированы с сообщением, говорящим Claude использовать uv или bun вместо этого. Команды типа uv pip install flask разрешены, потому что uv в списке разрешений и проверяется первым.
Поведение AI
Обнаружить когда агенты зависают или ведут себя неожиданно.warn-repeated-tool-calls
Событие: PreToolUse (все инструменты)По умолчанию: Инструктирует Claude пересмотреть когда один и тот же инструмент вызывается 3+ раза с идентичными параметрами — частый признак того, что агент застрял в loop. Нет параметров.
Workflow
Принудить соблюдать дисциплинированный workflow конца сеанса. Эти политики срабатывают на событие Stop и блокируют агенту остановку до выполнения каждого условия. Они следуют естественной цепочке зависимостей: commit → push → PR → CI. Если политика блокирует, позднейшие политики в цепочке пропускаются (deny short-circuits). Все политики workflow fail-open: если требуемый инструмент не доступен (напримерgh не установлен, нет git remote), политика разрешает с информационным сообщением, объясняющим, почему проверка была пропущена.
Semantics Stop на CLI
Применение Stop немного отличается в семи поддерживаемых CLI, потому что каждый раскрывает разный contract хука «agent finished». Результат — одинаковый — агент не может остановиться пока gate workflow не пройден — но механика отличается. Таблица ниже резюмирует; только Pi имеет видимую для пользователя особенность, стоящую понимания перед включением политикиrequire-*-before-stop.
| CLI | Когда gate срабатывает | Что вы видите |
|---|---|---|
| Claude Code | Тот же loop агента, сразу же | Claude продолжает работу — исправляет проблему, затем снова пытается закончить. Без видимых перерывов для вас. |
| Codex | Тот же loop агента, сразу же | Как Claude. |
| GitHub Copilot CLI | Тот же loop агента, сразу же | Как Claude (использует {decision:"block", reason} retry канал Copilot — проверено эмпирически на Copilot CLI 1.0.41). |
| Cursor Agent | Тот же loop агента, сразу же | Как Claude (использует {followup_message} канал Cursor — capped на loop_limit, по умолчанию 5 retries). |
| Gemini CLI | Тот же loop агента, сразу же | Как Claude (использует {decision:"block", reason} канал Gemini на AfterAgent). |
| OpenCode | Тот же loop агента, сразу же | Как Claude (использует client.session.prompt(...) вызов SDK OpenCode маршрутизированный через hookSpecificOutput.additionalContext). |
| Pi (pi-coding-agent) | Следующий turn пользователя | Pi видимо останавливается когда gate срабатывает — её loop агента выходит и вы возвращаетесь к prompt. Gate затем срабатывает в следующий раз, когда вы отправляете prompt: failproofai добавляет директиву MANDATORY ACTION REQUIRED к system prompt этого turn, инструктируя LLM завершить шаг workflow (commit, push и т.д.) перед тем как делать то, что вы просили. |
Ограничение Pi.
AgentEndEvent Pi (аналог upstream Stop hook Claude) не имеет типа Result — к моменту его срабатывания loop агента Pi уже выхода. Pi не может быть принуждена к retry того же loop как Claude / Copilot / Cursor / Gemini / OpenCode могут. failproofai сдвигает gate на before_agent_start event Pi (который срабатывает после следующего пользовательского prompt), чтобы проверка workflow всё ещё применялась, только на следующем turn вместо текущего.Что это означает на практике:- После остановки Pi, причина deny захватывается в памяти, ключ по Pi session id. Очень следующий prompt, который вы отправляете в том же процессе Pi дренирует это: LLM видит директиву
MANDATORY ACTION REQUIREDв верхней части своего system prompt, коммитит (или push-ит / открывает PR / ждёт CI), и только затем продолжает с вашим запросом. Захваченная причина deny — one-shot — один раз слита, gate очищен. - Gate ограничена lifetime процесса Pi. Если вы
Ctrl+CPi или выходите между turn-ами, в памяти entry dropped вместе с процессом и gate пропущена. Claude, Copilot, Cursor, Gemini и OpenCode имеют ту же граничную (kill агента и gate пропущена) — Pi только делает это более видимым, потому что агент видимо выходит перед тем как gate срабатывает. - Pending deny также очищена на
session_shutdownпо любой причине (new/resume/fork/quit), поэтому stale gate от приоров сеанса не может утечь в свежий сеанс, запущенный в том же процессе Pi.
Stop политики под любым из шести других поддерживаемых CLI. Мы отслеживаем Pi upstream для будущего типа Result на AgentEndEvent, который позволил бы нам закрыть этот gap.require-commit-before-stop
Событие: StopПо умолчанию: Блокирует остановку когда есть неподтверждённые изменения (изменённые, staged или untracked файлы). Возвращает информационное сообщение когда рабочая директория чиста. Нет параметров.
require-push-before-stop
Событие: StopПо умолчанию: Блокирует остановку когда есть unpushed commits или когда текущая ветка не имеет удалённой tracking ветки. Предлагает
git push -u создать tracking ветку если нужно. Fails open если нет настроенного remote.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
remote | string | "origin" | Имя remote для push-а. |
require-pr-before-stop
Событие: StopПо умолчанию: Блокирует остановку когда не существует pull request для текущей ветки, или когда существующий PR закрыт без merge. Инструктирует Claude создать PR с
gh pr create. Когда PR merged, политика разрешает (работа доставлена) и сообщение намекает переключиться с ветки (git checkout main && git pull).
Нет параметров.
Эта политика требует GitHub CLI (
gh) установленной и аутентифицированной.
Запустите gh auth login с personal access token, который имеет repo scope для чтения pull requests. Если gh не установлена или не аутентифицирована, политика fails open и сообщает причину Claude.require-no-conflicts-before-stop
Событие: StopПо умолчанию: Блокирует остановку когда текущая ветка не может cleanly merge в base ветку. Политика сначала подтверждает существует ли
OPEN PR на GitHub для ветки — без одного, нет merge target для применения, поэтому вся политика short-circuits к allow. После подтверждения OPEN PR, два независимых probe запускаются:
- Локальный —
git merge-tree --write-tree --name-only origin/<baseBranch> HEAD. При конфликте сообщение deny называет конфликтующие файлы так Claude знает ровно что разрешать. - GitHub — переиспользует
gh pr view --json mergeable,stateрезультат уже загруженный в precheck. Ловит конфликты, которые stale локальныйorigin/<baseBranch>пропустил бы (например кто-то landed конфликтующий PR наmainс последнего fetch). РезультатCONFLICTINGблокирует. РезультатUNKNOWNтакже блокирует и инструктирует Claude ждать ~10 секунд и повторно проверить перед тем как снова пытаться остановиться — это предотвращает false negatives пока GitHub переcomputes.
gh не установлена, нет PR для ветки, PR состояние не OPEN (например MERGED, CLOSED), или gh pr view возвращает распарсиваемый вывод. Также fails open когда origin/<baseBranch> пропущена локально или когда нет commits вперёд от base — те Layer 1 fall-throughs всё ещё консультируют cached PR mergeability перед разрешением.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
baseBranch | string | "main" | Base ветка для проверки конфликтов. |
GitHub CLI (
gh) требуется для этой политики. Политика использует gh pr view для подтверждения
существует ли OPEN PR перед запуском любого probe конфликтов — без gh, политика
short-circuits к разрешению. Запустите gh auth login с personal access token, который имеет
repo scope для чтения pull requests.require-ci-green-before-stop
Событие: StopПо умолчанию: Блокирует остановку когда CI checks падают или всё ещё запускаются на текущей ветке. Проверяет GitHub Actions workflow runs и сторонние bot checks (например CodeRabbit, SonarCloud, Codecov). Обрабатывает
skipped, cancelled и neutral выводы как non-failing (последний охватывает например Socket Security alerts на outside contributor PR, где app намеренно сообщает neutral вместо success/failure). Возвращает информационное сообщение когда все checks проходят.
Нет параметров.
Эта политика требует GitHub CLI (
gh) установленной и аутентифицированной.
Запустите gh auth login с personal access token, который имеет repo scope для чтения
Actions workflow runs и Checks API. Если gh не установлена или не аутентифицирована, политика fails open и сообщает причину Claude.Отключение отдельных политик
Удалить конкретную политику изenabledPolicies в вашей конфигурации, или переключить её в dashboard Policies tab.
enabledPolicies не запускаются, даже если policyParams записи для них существуют.
