Перейти к основному содержанию
Пользовательские политики позволяют вам написать правила для любого поведения агента: соблюдать соглашения проекта, предотвращать отклонения, ограничивать деструктивные операции, обнаруживать зависших агентов или интегрироваться с Slack, рабочими процессами утверждения и многим другим. Они используют ту же систему событий хука и решения allow, deny, instruct, что и встроенные политики.

Быстрый пример

Установите её:

Два способа загрузки пользовательских политик

Вариант 1: На основе соглашения (рекомендуется)

Поместите файлы *policies.{js,mjs,ts} в .failproofai/policies/ и они будут загружены автоматически — не требуются флаги или изменения конфигурации. Это работает как git hooks: положите файл, и всё работает.
Как это работает:
  • Сканируются оба каталога проекта и пользователя (объединение — не первый приоритет)
  • Файлы загружаются в алфавитном порядке в каждом каталоге. Префиксируйте 01-, 02- для управления порядком
  • Загружаются только файлы, соответствующие *policies.{js,mjs,ts}; другие файлы игнорируются
  • Каждый файл загружается независимо (открытое поведение при ошибке для каждого файла)
  • Работает вместе с явным --custom и встроенными политиками
Политики на основе соглашения — это самый простой способ создать стандарт качества для вашей организации. Зафиксируйте .failproofai/policies/ в git и каждый член команды автоматически получит одинаковые правила — никакой предварительной настройки для каждого разработчика не требуется. По мере того, как ваша команда обнаруживает новые сбои, добавляйте политику и выполняйте push. Со временем они станут живым стандартом качества, который постоянно улучшается с каждым вкладом.

Вариант 2: Явный путь к файлу

Разрешённый абсолютный путь сохраняется в policies-config.json как customPoliciesPath. Файл загружается заново при каждом событии хука — кэширования между событиями нет.

Использование обоих способов вместе

Политики на основе соглашения и явный файл --custom могут сосуществовать. Порядок загрузки:
  1. Явный файл customPoliciesPath (если настроен)
  2. Файлы соглашения проекта ({cwd}/.failproofai/policies/, по алфавиту)
  3. Файлы соглашения пользователя (~/.failproofai/policies/, по алфавиту)

API

Импорт

customPolicies.add(hook)

Регистрирует политику. Вызывайте это столько раз, сколько необходимо для нескольких политик в одном файле.

Вспомогательные функции решения

deny(message) — сообщение отображается для Claude с префиксом "Blocked by failproofai:". Один deny прерывает всю дальнейшую оценку. instruct(message) — сообщение добавляется в контекст Claude для текущего вызова инструмента. Все сообщения instruct накапливаются и доставляются вместе.
Вы можете добавить дополнительное руководство к любому сообщению deny или instruct, добавив поле hint в policyParams — изменение кода не требуется. Это работает для пользовательских (custom/), соглашений проекта (.failproofai-project/) и соглашений пользователя (.failproofai-user/) политик тоже. See Configuration → hint для подробностей.

Информационные сообщения allow

allow(message) разрешает операцию и отправляет информационное сообщение обратно Claude. Сообщение доставляется как additionalContext в ответе stdout обработчика хука — тот же механизм, используемый 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 и создания временных файлов .mjs для обеспечения совместимости ESM.

Фильтрация типов событий

Используйте match.events для ограничения срабатывания политики:
Опустите match полностью, чтобы срабатывало на каждый тип события.

Обработка ошибок и режимы отказа

Пользовательские политики открыты при ошибке: ошибки никогда не блокируют встроенные политики и не приводят к сбою обработчика хука.
Для отладки ошибок пользовательской политики смотрите файл журнала:

Полный пример: несколько политик


Примеры

Каталог examples/ содержит готовые к использованию файлы политик:

Использование примеров явных файлов

Использование примеров на основе соглашения

Команда установки не требуется — файлы подбираются автоматически при следующем событии хука.