Saltar al contenido principal
Ejemplos listos para usar en escenarios comunes. Cada uno muestra cómo instalar y qué esperar.

Configurar hooks para Claude Code

Failproof AI se integra con Claude Code a través de su sistema de hooks. Al ejecutar failproofai policies --install, registra comandos de hook en el settings.json de Claude Code que se activan en cada llamada a herramientas.
1

Instalar failproofai

npm install -g failproofai
2

Habilitar todas las políticas integradas

failproofai policies --install
3

Verificar que los hooks están registrados

cat ~/.claude/settings.json | grep failproofai
Deberías ver entradas de hook para los eventos PreToolUse, PostToolUse, Notification y Stop.
4

Ejecutar Claude Code

claude
Las políticas ahora se ejecutan automáticamente en cada llamada a herramientas. Intenta pedirle a Claude que ejecute sudo rm -rf / — será bloqueado.

Configurar hooks para el Agents SDK

Si estás desarrollando con el Agents SDK, puedes usar el mismo sistema de hooks de forma programática.
1

Instalar failproofai en tu proyecto

npm install failproofai
2

Configurar hooks en tu agente

Pasa comandos de hook al crear el proceso de tu agente. Los hooks se activan de la misma manera que en Claude Code — mediante JSON por stdin/stdout:
failproofai --hook PreToolUse   # se llama antes de cada herramienta
failproofai --hook PostToolUse  # se llama después de cada herramienta
3

Escribir una política personalizada para tu agente

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

Instalar la política personalizada

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

Bloquear comandos destructivos

La configuración más común: evitar que los agentes causen daños irreversibles.
failproofai policies --install block-sudo block-rm-rf block-force-push block-curl-pipe-sh
Qué hace esto:
  • block-sudo — bloquea todos los comandos sudo
  • block-rm-rf — bloquea la eliminación recursiva de archivos
  • block-force-push — bloquea git push --force
  • block-curl-pipe-sh — bloquea la ejecución de scripts remotos canalizados a la shell

Prevenir la filtración de secretos

Impide que los agentes vean o filtren credenciales en la salida de herramientas.
failproofai policies --install sanitize-api-keys sanitize-jwt sanitize-connection-strings sanitize-bearer-tokens
Estas políticas se activan en PostToolUse — después de que se ejecuta una herramienta, limpian la salida antes de que el agente la vea.

Recibir alertas en Slack cuando los agentes necesitan atención

Usa el hook de notificación para reenviar alertas de inactividad a 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 {
      // nunca bloquear el agente si Slack no está disponible
    }

    return allow();
  },
});
Instálalo:
SLACK_WEBHOOK_URL=https://hooks.slack.com/... failproofai policies --install --custom ./slack-alerts.js

Mantener los agentes en una rama

Evita que los agentes cambien de rama o hagan push a ramas protegidas.
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();
  },
});

Requerir pruebas antes de hacer commit

Recuerda a los agentes que ejecuten las pruebas antes de hacer commit.
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();
  },
});

Bloquear un repositorio de producción

Incluye una configuración a nivel de proyecto para que todos los desarrolladores de tu equipo compartan las mismas políticas. Crea .failproofai/policies-config.json en tu repositorio:
{
  "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"]
    }
  }
}
Luego confírmalo:
git add .failproofai/policies-config.json
git commit -m "Add failproofai team policies"
Cada miembro del equipo que tenga failproofai instalado adoptará estas reglas automáticamente.

Más ejemplos

El directorio examples/ del repositorio contiene:
ArchivoQué muestra
policies-basic.jsPolíticas básicas: bloquear escrituras en producción, force-push y scripts canalizados
policies-notification.jsAlertas de Slack para notificaciones de inactividad y fin de sesión
policies-advanced/index.jsImportaciones transitivas, hooks asíncronos, limpieza de salida en PostToolUse y manejo del evento Stop