allow, deny, instruct, что и встроенные политики.
Быстрый пример
Два способа загрузки пользовательских политик
Вариант 1: На основе соглашения (рекомендуется)
Поместите файлы*policies.{js,mjs,ts} в .failproofai/policies/ и они будут загружены автоматически — не требуются флаги или изменения конфигурации. Это работает как git hooks: положите файл, и всё работает.
- Сканируются оба каталога проекта и пользователя (объединение — не первый приоритет)
- Файлы загружаются в алфавитном порядке в каждом каталоге. Префиксируйте
01-,02-для управления порядком - Загружаются только файлы, соответствующие
*policies.{js,mjs,ts}; другие файлы игнорируются - Каждый файл загружается независимо (открытое поведение при ошибке для каждого файла)
- Работает вместе с явным
--customи встроенными политиками
Вариант 2: Явный путь к файлу
policies-config.json как customPoliciesPath. Файл загружается заново при каждом событии хука — кэширования между событиями нет.
Использование обоих способов вместе
Политики на основе соглашения и явный файл--custom могут сосуществовать. Порядок загрузки:
- Явный файл
customPoliciesPath(если настроен) - Файлы соглашения проекта (
{cwd}/.failproofai/policies/, по алфавиту) - Файлы соглашения пользователя (
~/.failproofai/policies/, по алфавиту)
API
Импорт
customPolicies.add(hook)
Регистрирует политику. Вызывайте это столько раз, сколько необходимо для нескольких политик в одном файле.
Вспомогательные функции решения
deny(message) — сообщение отображается для Claude с префиксом "Blocked by failproofai:". Один deny прерывает всю дальнейшую оценку.
instruct(message) — сообщение добавляется в контекст Claude для текущего вызова инструмента. Все сообщения instruct накапливаются и доставляются вместе.
Информационные сообщения 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
Типы событий
Порядок оценки
Политики оцениваются в этом порядке:- Встроенные политики (в порядке определения)
- Явные пользовательские политики из
customPoliciesPath(в порядке.add()) - Политики соглашения из проекта
.failproofai/policies/(файлы по алфавиту,.add()порядок внутри) - Политики соглашения из пользователя
~/.failproofai/policies/(файлы по алфавиту,.add()порядок внутри)
Первый
deny прерывает все последующие политики. Все сообщения instruct накапливаются и доставляются вместе.Транзитивные импорты
Файлы пользовательских политик могут импортировать локальные модули, используя относительные пути:from "failproofai" на фактический путь dist и создания временных файлов .mjs для обеспечения совместимости ESM.
Фильтрация типов событий
Используйтеmatch.events для ограничения срабатывания политики:
match полностью, чтобы срабатывало на каждый тип события.
Обработка ошибок и режимы отказа
Пользовательские политики открыты при ошибке: ошибки никогда не блокируют встроенные политики и не приводят к сбою обработчика хука.Полный пример: несколько политик
Примеры
Каталогexamples/ содержит готовые к использованию файлы политик:

