Перейти к основному содержанию

title: Примеры description: “Как настроить hooks для Claude Code и Agents SDK” icon: book-open

Готовые к использованию примеры для типичных сценариев. Каждый показывает, как установить и чего ожидать.

Настройка hooks для Claude Code

Failproof AI интегрируется с Claude Code через его систему hooks. Когда вы запускаете failproofai policies --install, он регистрирует команды hooks в settings.json Claude Code, которые срабатывают при каждом вызове инструмента.
1

Установите failproofai

npm install -g failproofai
2

Включите все встроенные политики

failproofai policies --install
3

Проверьте, что hooks зарегистрированы

cat ~/.claude/settings.json | grep failproofai
Вы должны увидеть записи hooks для событий PreToolUse, PostToolUse, Notification и Stop.
4

Запустите Claude Code

claude
Политики теперь выполняются автоматически при каждом вызове инструмента. Попробуйте попросить Claude выполнить sudo rm -rf / — это будет заблокировано.

Настройка hooks для Agents SDK

Если вы разрабатываете с помощью Agents SDK, вы можете использовать ту же систему hooks программно.
1

Установите failproofai в ваш проект

npm install failproofai
2

Настройте hooks в вашем агенте

Передайте команды hooks при создании процесса агента. Hooks срабатывают точно так же, как в Claude Code — через stdin/stdout JSON:
failproofai --hook PreToolUse   # вызывается перед каждым инструментом
failproofai --hook PostToolUse  # вызывается после каждого инструмента
3

Напишите пользовательскую политику для вашего агента

import { customPolicies, allow, deny } from "failproofai";

customPolicies.add({
  name: "limit-to-project-dir",
  description: "Keep the agent inside the project directory",
  match: { events: ["PreToolUse"] },
  fn: async (ctx) => {
    const path = String(ctx.toolInput?.file_path ?? "");
    if (path.startsWith("/") && !path.startsWith(ctx.session?.cwd ?? "")) {
      return deny("Agent is restricted to the project directory");
    }
    return allow();
  },
});
4

Установите пользовательскую политику

failproofai policies --install --custom ./my-agent-policies.js

Блокировка деструктивных команд

Самая распространённая настройка — предотвращение необратимого ущерба от действий агентов.
failproofai policies --install block-sudo block-rm-rf block-force-push block-curl-pipe-sh
Что это делает:
  • block-sudo — блокирует все команды sudo
  • block-rm-rf — блокирует рекурсивное удаление файлов
  • block-force-push — блокирует git push --force
  • block-curl-pipe-sh — блокирует передачу удалённых скриптов в оболочку

Предотвращение утечки секретов

Остановите агентов от просмотра или утечки учётных данных в выводе инструментов.
failproofai policies --install sanitize-api-keys sanitize-jwt sanitize-connection-strings sanitize-bearer-tokens
Эти политики срабатывают на PostToolUse — после выполнения инструмента они очищают вывод перед тем, как агент его увидит.

Получайте оповещения в Slack, когда агентам требуется внимание

Используйте hook уведомлений для отправки оповещений о неактивности в Slack.
import { customPolicies, allow, instruct } from "failproofai";

customPolicies.add({
  name: "slack-on-idle",
  description: "Alert Slack when the agent is waiting for input",
  match: { events: ["Notification"] },
  fn: async (ctx) => {
    const webhookUrl = process.env.SLACK_WEBHOOK_URL;
    if (!webhookUrl) return allow();

    const message = String(ctx.payload?.message ?? "Agent is waiting");
    const project = ctx.session?.cwd ?? "unknown";

    try {
      await fetch(webhookUrl, {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
          text: `*${message}*\nProject: \`${project}\``,
        }),
        signal: AbortSignal.timeout(5000),
      });
    } catch {
      // never block the agent if Slack is unreachable
    }

    return allow();
  },
});
Установите её:
SLACK_WEBHOOK_URL=https://hooks.slack.com/... failproofai policies --install --custom ./slack-alerts.js

Держите агентов на одной ветке

Предотвратите переключение ветвей или отправку на защищённые ветви.
import { customPolicies, allow, deny } from "failproofai";

customPolicies.add({
  name: "stay-on-branch",
  description: "Prevent the agent from checking out other branches",
  match: { events: ["PreToolUse"] },
  fn: async (ctx) => {
    if (ctx.toolName !== "Bash") return allow();
    const cmd = String(ctx.toolInput?.command ?? "");
    if (/git\s+checkout\s+(?!-b)/.test(cmd)) {
      return deny("Stay on the current branch. Create a new branch with -b if needed.");
    }
    return allow();
  },
});

Требуйте тесты перед коммитом

Напоминайте агентам запускать тесты перед коммитом.
import { customPolicies, allow, instruct } from "failproofai";

customPolicies.add({
  name: "test-before-commit",
  description: "Remind the agent to run tests before committing",
  match: { events: ["PreToolUse"] },
  fn: async (ctx) => {
    if (ctx.toolName !== "Bash") return allow();
    const cmd = String(ctx.toolInput?.command ?? "");
    if (/git\s+commit/.test(cmd)) {
      return instruct("Run tests before committing. Use `npm test` or `bun test` first.");
    }
    return allow();
  },
});

Заблокируйте production репозиторий

Добавьте конфигурацию на уровне проекта, чтобы все разработчики вашей команды получили одинаковые политики. Создайте .failproofai/policies-config.json в вашем репозитории:
{
  "enabledPolicies": [
    "block-sudo",
    "block-rm-rf",
    "block-force-push",
    "block-push-master",
    "block-env-files",
    "sanitize-api-keys",
    "sanitize-jwt"
  ],
  "policyParams": {
    "block-push-master": {
      "protectedBranches": ["main", "release", "production"]
    }
  }
}
Затем добавьте её:
git add .failproofai/policies-config.json
git commit -m "Add failproofai team policies"
Каждый член команды, у которого установлен failproofai, автоматически получит эти правила.

Больше примеров

Директория examples/ в репозитории содержит:
ФайлЧто он показывает
policies-basic.jsБазовые политики — блокировка записей в production, force-push, передачи скриптов
policies-notification.jsОповещения Slack для уведомлений о неактивности и завершении сессии
policies-advanced/index.jsПереходные импорты, асинхронные hooks, очистка вывода PostToolUse, обработка события Stop