failproofai 0.0.6-beta.0 → 0.0.6-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.failproofai/policies/review-policies.mjs +113 -0
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/required-server-files.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/policies/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
- package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/page/build-manifest.json +2 -2
- package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g72weg._.js +1 -1
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0a.nuas._.js → [root-of-the-server]__05akje6._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0.~fd7s._.js → [root-of-the-server]__0i5kvry._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0okos0k._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +6 -6
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +5 -5
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
- package/.next/standalone/.next/static/chunks/{0teq8wdh3po1n.js → 00j0rr7rh8ef8.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0maq.q1t.ri85.js → 05j1px0r8yzh6.js} +2 -2
- package/.next/standalone/.next/static/chunks/0badv41uxa56..js +4 -0
- package/.next/standalone/.next/static/chunks/{0hplx-8c-4vpv.js → 0ijk_kek9_wyx.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0uc0um_uz51m_.js → 0npb~873.wvg3.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0hctoh28rg838.js → 0xpl.oscrakvx.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0.z51twd.0l5z.js → 1052sguyd-.ka.js} +1 -1
- package/.next/standalone/.next/static/chunks/{09e7drilkf1sn.js → 12simlrcfk3g2.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0ul6fk-z.6k-0.js → 14cl9poem30dq.js} +1 -1
- package/.next/standalone/.next/static/chunks/{turbopack-0r26pc8h0y_-e.js → turbopack-0o7k.hakttp4k.js} +1 -1
- package/.next/standalone/CHANGELOG.md +19 -0
- package/.next/standalone/README.md +2 -2
- package/.next/standalone/bun.lock +43 -85
- package/.next/standalone/dist/cli.mjs +91 -4
- package/.next/standalone/docs/ar/built-in-policies.mdx +124 -87
- package/.next/standalone/docs/ar/custom-policies.mdx +72 -72
- package/.next/standalone/docs/ar/examples.mdx +86 -33
- package/.next/standalone/docs/ar/getting-started.mdx +82 -29
- package/.next/standalone/docs/built-in-policies.mdx +38 -1
- package/.next/standalone/docs/custom-policies.mdx +1 -1
- package/.next/standalone/docs/de/built-in-policies.mdx +93 -56
- package/.next/standalone/docs/de/custom-policies.mdx +56 -56
- package/.next/standalone/docs/de/examples.mdx +72 -18
- package/.next/standalone/docs/de/getting-started.mdx +72 -20
- package/.next/standalone/docs/es/built-in-policies.mdx +115 -78
- package/.next/standalone/docs/es/custom-policies.mdx +55 -55
- package/.next/standalone/docs/es/examples.mdx +73 -19
- package/.next/standalone/docs/es/getting-started.mdx +72 -20
- package/.next/standalone/docs/examples.mdx +54 -0
- package/.next/standalone/docs/fr/built-in-policies.mdx +83 -46
- package/.next/standalone/docs/fr/custom-policies.mdx +51 -51
- package/.next/standalone/docs/fr/examples.mdx +78 -24
- package/.next/standalone/docs/fr/getting-started.mdx +65 -13
- package/.next/standalone/docs/getting-started.mdx +52 -0
- package/.next/standalone/docs/he/built-in-policies.mdx +156 -117
- package/.next/standalone/docs/he/custom-policies.mdx +75 -75
- package/.next/standalone/docs/he/examples.mdx +87 -33
- package/.next/standalone/docs/he/getting-started.mdx +84 -33
- package/.next/standalone/docs/hi/built-in-policies.mdx +101 -60
- package/.next/standalone/docs/hi/custom-policies.mdx +71 -70
- package/.next/standalone/docs/hi/examples.mdx +90 -36
- package/.next/standalone/docs/hi/getting-started.mdx +80 -27
- package/.next/standalone/docs/i18n/README.ar.md +69 -69
- package/.next/standalone/docs/i18n/README.de.md +46 -46
- package/.next/standalone/docs/i18n/README.es.md +42 -42
- package/.next/standalone/docs/i18n/README.fr.md +39 -39
- package/.next/standalone/docs/i18n/README.he.md +83 -83
- package/.next/standalone/docs/i18n/README.hi.md +69 -69
- package/.next/standalone/docs/i18n/README.it.md +72 -72
- package/.next/standalone/docs/i18n/README.ja.md +71 -71
- package/.next/standalone/docs/i18n/README.ko.md +52 -52
- package/.next/standalone/docs/i18n/README.pt-br.md +44 -44
- package/.next/standalone/docs/i18n/README.ru.md +66 -66
- package/.next/standalone/docs/i18n/README.tr.md +82 -83
- package/.next/standalone/docs/i18n/README.vi.md +70 -71
- package/.next/standalone/docs/i18n/README.zh.md +51 -51
- package/.next/standalone/docs/it/built-in-policies.mdx +118 -81
- package/.next/standalone/docs/it/custom-policies.mdx +69 -69
- package/.next/standalone/docs/it/examples.mdx +93 -39
- package/.next/standalone/docs/it/getting-started.mdx +73 -21
- package/.next/standalone/docs/ja/built-in-policies.mdx +98 -61
- package/.next/standalone/docs/ja/custom-policies.mdx +71 -71
- package/.next/standalone/docs/ja/examples.mdx +76 -22
- package/.next/standalone/docs/ja/getting-started.mdx +65 -13
- package/.next/standalone/docs/ko/built-in-policies.mdx +137 -100
- package/.next/standalone/docs/ko/custom-policies.mdx +67 -67
- package/.next/standalone/docs/ko/examples.mdx +87 -33
- package/.next/standalone/docs/ko/getting-started.mdx +61 -9
- package/.next/standalone/docs/pt-br/built-in-policies.mdx +94 -57
- package/.next/standalone/docs/pt-br/custom-policies.mdx +56 -56
- package/.next/standalone/docs/pt-br/examples.mdx +78 -24
- package/.next/standalone/docs/pt-br/getting-started.mdx +64 -12
- package/.next/standalone/docs/ru/built-in-policies.mdx +142 -105
- package/.next/standalone/docs/ru/custom-policies.mdx +82 -81
- package/.next/standalone/docs/ru/examples.mdx +77 -22
- package/.next/standalone/docs/ru/getting-started.mdx +74 -22
- package/.next/standalone/docs/tr/built-in-policies.mdx +104 -67
- package/.next/standalone/docs/tr/custom-policies.mdx +59 -60
- package/.next/standalone/docs/tr/examples.mdx +97 -42
- package/.next/standalone/docs/tr/getting-started.mdx +75 -23
- package/.next/standalone/docs/vi/built-in-policies.mdx +110 -72
- package/.next/standalone/docs/vi/custom-policies.mdx +68 -68
- package/.next/standalone/docs/vi/examples.mdx +93 -38
- package/.next/standalone/docs/vi/getting-started.mdx +74 -22
- package/.next/standalone/docs/zh/built-in-policies.mdx +132 -95
- package/.next/standalone/docs/zh/custom-policies.mdx +49 -49
- package/.next/standalone/docs/zh/examples.mdx +90 -36
- package/.next/standalone/docs/zh/getting-started.mdx +73 -21
- package/.next/standalone/node_modules/@next/env/package.json +1 -1
- package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
- package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +7 -7
- package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
- package/.next/standalone/node_modules/next/dist/server/config-schema.js +10 -2
- package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
- package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
- package/.next/standalone/node_modules/next/dist/server/render.js +27 -20
- package/.next/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
- package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
- package/.next/standalone/node_modules/next/package.json +15 -15
- package/.next/standalone/package.json +2 -2
- package/.next/standalone/server.js +1 -1
- package/.next/standalone/src/hooks/builtin-policies.ts +106 -1
- package/README.md +2 -2
- package/dist/cli.mjs +91 -4
- package/package.json +2 -2
- package/src/hooks/builtin-policies.ts +106 -1
- package/.next/standalone/.next/static/chunks/0w9lwqy0-v1dk.js +0 -4
- /package/.next/standalone/.next/static/{8mygPGI5bzrtWK36ZYO59 → A9pNTZdoYJTVyPAYwQMx5}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{8mygPGI5bzrtWK36ZYO59 → A9pNTZdoYJTVyPAYwQMx5}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{8mygPGI5bzrtWK36ZYO59 → A9pNTZdoYJTVyPAYwQMx5}/_ssgManifest.js +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Políticas Personalizadas
|
|
3
|
-
description: "Escribe tus propias políticas en JavaScript: aplica convenciones, previene la deriva, detecta fallos e integra con sistemas externos"
|
|
3
|
+
description: "Escribe tus propias políticas en JavaScript: aplica convenciones de proyecto, previene la deriva, detecta fallos e integra con sistemas externos"
|
|
4
4
|
icon: code
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Las políticas personalizadas te permiten escribir reglas para cualquier comportamiento del agente: aplicar convenciones
|
|
7
|
+
Las políticas personalizadas te permiten escribir reglas para cualquier comportamiento del agente: aplicar convenciones de proyecto, prevenir la deriva, bloquear operaciones destructivas, detectar agentes atascados o integrarse con Slack, flujos de aprobación y mucho más. Utilizan el mismo sistema de eventos de hook y las decisiones `allow`, `deny`, `instruct` que las políticas integradas.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -29,7 +29,7 @@ customPolicies.add({
|
|
|
29
29
|
});
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
Instálala:
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
35
|
failproofai policies --install --custom ./my-policies.js
|
|
@@ -39,34 +39,34 @@ failproofai policies --install --custom ./my-policies.js
|
|
|
39
39
|
|
|
40
40
|
## Dos formas de cargar políticas personalizadas
|
|
41
41
|
|
|
42
|
-
### Opción 1: Basada en
|
|
42
|
+
### Opción 1: Basada en convención (recomendada)
|
|
43
43
|
|
|
44
|
-
Coloca archivos `*policies.{js,mjs,ts}` en `.failproofai/policies/` y se cargarán automáticamente
|
|
44
|
+
Coloca archivos `*policies.{js,mjs,ts}` en `.failproofai/policies/` y se cargarán automáticamente — sin necesidad de flags ni cambios de configuración. Funciona como los git hooks: dejas el archivo y listo.
|
|
45
45
|
|
|
46
46
|
```
|
|
47
|
-
#
|
|
47
|
+
# A nivel de proyecto — incluido en git, compartido con el equipo
|
|
48
48
|
.failproofai/policies/security-policies.mjs
|
|
49
49
|
.failproofai/policies/workflow-policies.mjs
|
|
50
50
|
|
|
51
|
-
#
|
|
51
|
+
# A nivel de usuario — personal, aplica a todos los proyectos
|
|
52
52
|
~/.failproofai/policies/my-policies.mjs
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
**Cómo funciona:**
|
|
56
|
-
- Se analizan tanto el directorio del proyecto como el del usuario (unión — no gana el
|
|
57
|
-
- Los archivos se cargan en orden alfabético dentro de cada directorio. Usa
|
|
58
|
-
- Solo se cargan los archivos que coincidan con `*policies.{js,mjs,ts}`;
|
|
59
|
-
- Cada archivo se carga de forma independiente (
|
|
56
|
+
- Se analizan tanto el directorio del proyecto como el del usuario (unión — no gana el primer ámbito)
|
|
57
|
+
- Los archivos se cargan en orden alfabético dentro de cada directorio. Usa prefijos `01-`, `02-` para controlar el orden
|
|
58
|
+
- Solo se cargan los archivos que coincidan con `*policies.{js,mjs,ts}`; el resto se ignora
|
|
59
|
+
- Cada archivo se carga de forma independiente (fallo abierto por archivo)
|
|
60
60
|
- Funciona junto con `--custom` explícito y las políticas integradas
|
|
61
61
|
|
|
62
62
|
<Tip>
|
|
63
|
-
Las políticas por convención son la forma más
|
|
63
|
+
Las políticas por convención son la forma más fácil de establecer un estándar de calidad para tu organización. Incluye `.failproofai/policies/` en git y todos los miembros del equipo obtendrán las mismas reglas automáticamente — sin configuración individual. A medida que el equipo descubre nuevos modos de fallo, agrega una política y haz push. Con el tiempo, estas se convierten en un estándar de calidad vivo que mejora con cada contribución.
|
|
64
64
|
</Tip>
|
|
65
65
|
|
|
66
66
|
### Opción 2: Ruta de archivo explícita
|
|
67
67
|
|
|
68
68
|
```bash
|
|
69
|
-
# Instalar con un archivo de políticas
|
|
69
|
+
# Instalar con un archivo de políticas personalizado
|
|
70
70
|
failproofai policies --install --custom ./my-policies.js
|
|
71
71
|
|
|
72
72
|
# Reemplazar la ruta del archivo de políticas
|
|
@@ -78,11 +78,11 @@ failproofai policies --uninstall --custom
|
|
|
78
78
|
|
|
79
79
|
La ruta absoluta resuelta se almacena en `policies-config.json` como `customPoliciesPath`. El archivo se carga de nuevo en cada evento de hook — no hay caché entre eventos.
|
|
80
80
|
|
|
81
|
-
###
|
|
81
|
+
### Usar ambas opciones a la vez
|
|
82
82
|
|
|
83
83
|
Las políticas por convención y el archivo `--custom` explícito pueden coexistir. Orden de carga:
|
|
84
84
|
|
|
85
|
-
1. Archivo
|
|
85
|
+
1. Archivo `customPoliciesPath` explícito (si está configurado)
|
|
86
86
|
2. Archivos de convención del proyecto (`{cwd}/.failproofai/policies/`, en orden alfabético)
|
|
87
87
|
3. Archivos de convención del usuario (`~/.failproofai/policies/`, en orden alfabético)
|
|
88
88
|
|
|
@@ -98,31 +98,31 @@ import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
|
98
98
|
|
|
99
99
|
### `customPolicies.add(hook)`
|
|
100
100
|
|
|
101
|
-
Registra una política.
|
|
101
|
+
Registra una política. Puedes llamarla tantas veces como necesites para definir múltiples políticas en el mismo archivo.
|
|
102
102
|
|
|
103
103
|
```ts
|
|
104
104
|
customPolicies.add({
|
|
105
105
|
name: string; // requerido - identificador único
|
|
106
106
|
description?: string; // se muestra en la salida de `failproofai policies`
|
|
107
|
-
match?: { events?: HookEventType[] }; // filtra por tipo de evento;
|
|
107
|
+
match?: { events?: HookEventType[] }; // filtra por tipo de evento; omitir para coincidir con todos
|
|
108
108
|
fn: (ctx: PolicyContext) => PolicyResult | Promise<PolicyResult>;
|
|
109
109
|
});
|
|
110
110
|
```
|
|
111
111
|
|
|
112
|
-
### Funciones
|
|
112
|
+
### Funciones de decisión
|
|
113
113
|
|
|
114
114
|
| Función | Efecto | Cuándo usarla |
|
|
115
115
|
|----------|--------|----------|
|
|
116
|
-
| `allow()` | Permite la operación
|
|
116
|
+
| `allow()` | Permite la operación silenciosamente | La acción es segura, no se necesita mensaje |
|
|
117
117
|
| `deny(message)` | Bloquea la operación | El agente no debería realizar esta acción |
|
|
118
118
|
| `instruct(message)` | Añade contexto sin bloquear | Proporciona contexto adicional al agente para mantenerlo en curso |
|
|
119
119
|
|
|
120
|
-
`deny(message)` — el mensaje
|
|
120
|
+
`deny(message)` — el mensaje se muestra a Claude con el prefijo `"Blocked by failproofai:"`. Un único `deny` cortocircuita toda evaluación posterior.
|
|
121
121
|
|
|
122
|
-
`instruct(message)` — el mensaje se añade al contexto de Claude para la llamada de herramienta actual. Todos los mensajes `instruct` se acumulan y se entregan juntos.
|
|
122
|
+
`instruct(message)` — el mensaje se añade al contexto de Claude para la llamada de herramienta actual. Todos los mensajes de `instruct` se acumulan y se entregan juntos.
|
|
123
123
|
|
|
124
124
|
<Tip>
|
|
125
|
-
Puedes añadir orientación adicional a cualquier mensaje `deny` o `instruct` agregando un campo `hint` en `policyParams
|
|
125
|
+
Puedes añadir orientación adicional a cualquier mensaje `deny` o `instruct` agregando un campo `hint` en `policyParams` — sin necesidad de cambiar el código. Esto funciona también para políticas personalizadas (`custom/`), de convención de proyecto (`.failproofai-project/`) y de convención de usuario (`.failproofai-user/`). Consulta [Configuración → hint](/es/configuration#hint-cross-cutting) para más detalles.
|
|
126
126
|
</Tip>
|
|
127
127
|
|
|
128
128
|
### Mensajes informativos en allow
|
|
@@ -134,9 +134,9 @@ Puedes añadir orientación adicional a cualquier mensaje `deny` o `instruct` ag
|
|
|
134
134
|
| `allow(message)` | Permite y envía contexto a Claude | Confirmar que una verificación pasó, o explicar por qué se omitió |
|
|
135
135
|
|
|
136
136
|
Casos de uso:
|
|
137
|
-
- **Confirmaciones de estado:** `allow("All CI checks passed.")` — le
|
|
138
|
-
- **Explicaciones de
|
|
139
|
-
- **Acumulación de múltiples mensajes:** si varias políticas
|
|
137
|
+
- **Confirmaciones de estado:** `allow("All CI checks passed.")` — le dice a Claude que todo está bien
|
|
138
|
+
- **Explicaciones de fallo abierto:** `allow("GitHub CLI not installed, skipping CI check.")` — le dice a Claude por qué se omitió una verificación para que tenga contexto completo
|
|
139
|
+
- **Acumulación de múltiples mensajes:** si varias políticas retornan `allow(message)`, todos los mensajes se unen con saltos de línea y se entregan juntos
|
|
140
140
|
|
|
141
141
|
```js
|
|
142
142
|
customPolicies.add({
|
|
@@ -160,10 +160,10 @@ customPolicies.add({
|
|
|
160
160
|
| Campo | Tipo | Descripción |
|
|
161
161
|
|-------|------|-------------|
|
|
162
162
|
| `eventType` | `string` | `"PreToolUse"`, `"PostToolUse"`, `"Notification"`, `"Stop"` |
|
|
163
|
-
| `toolName` | `string \| undefined` | La herramienta que se está
|
|
163
|
+
| `toolName` | `string \| undefined` | La herramienta que se está llamando (p. ej. `"Bash"`, `"Write"`, `"Read"`) |
|
|
164
164
|
| `toolInput` | `Record<string, unknown> \| undefined` | Los parámetros de entrada de la herramienta |
|
|
165
|
-
| `payload` | `Record<string, unknown>` |
|
|
166
|
-
| `session` | `SessionMetadata \| undefined` | Contexto de
|
|
165
|
+
| `payload` | `Record<string, unknown>` | Carga útil completa del evento en bruto desde Claude Code |
|
|
166
|
+
| `session` | `SessionMetadata \| undefined` | Contexto de sesión (ver más abajo) |
|
|
167
167
|
|
|
168
168
|
### Campos de `SessionMetadata`
|
|
169
169
|
|
|
@@ -178,9 +178,9 @@ customPolicies.add({
|
|
|
178
178
|
| Evento | Cuándo se dispara | Contenido de `toolInput` |
|
|
179
179
|
|-------|--------------|----------------------|
|
|
180
180
|
| `PreToolUse` | Antes de que Claude ejecute una herramienta | La entrada de la herramienta (p. ej. `{ command: "..." }` para Bash) |
|
|
181
|
-
| `PostToolUse` | Después de que una herramienta
|
|
182
|
-
| `Notification` | Cuando Claude envía una notificación | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` — los hooks siempre deben
|
|
183
|
-
| `Stop` | Cuando la sesión de Claude
|
|
181
|
+
| `PostToolUse` | Después de que una herramienta finaliza | La entrada de la herramienta + `tool_result` (la salida) |
|
|
182
|
+
| `Notification` | Cuando Claude envía una notificación | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` — los hooks siempre deben retornar `allow()`, no pueden bloquear notificaciones |
|
|
183
|
+
| `Stop` | Cuando finaliza la sesión de Claude | Vacío |
|
|
184
184
|
|
|
185
185
|
---
|
|
186
186
|
|
|
@@ -190,18 +190,18 @@ Las políticas se evalúan en este orden:
|
|
|
190
190
|
|
|
191
191
|
1. Políticas integradas (en orden de definición)
|
|
192
192
|
2. Políticas personalizadas explícitas de `customPoliciesPath` (en orden de `.add()`)
|
|
193
|
-
3. Políticas
|
|
194
|
-
4. Políticas
|
|
193
|
+
3. Políticas por convención del proyecto en `.failproofai/policies/` (archivos en orden alfabético, orden de `.add()` dentro de cada uno)
|
|
194
|
+
4. Políticas por convención del usuario en `~/.failproofai/policies/` (archivos en orden alfabético, orden de `.add()` dentro de cada uno)
|
|
195
195
|
|
|
196
196
|
<Note>
|
|
197
|
-
El primer `deny` cortocircuita todas las políticas siguientes. Todos los mensajes `instruct` se acumulan y se entregan juntos.
|
|
197
|
+
El primer `deny` cortocircuita todas las políticas siguientes. Todos los mensajes de `instruct` se acumulan y se entregan juntos.
|
|
198
198
|
</Note>
|
|
199
199
|
|
|
200
200
|
---
|
|
201
201
|
|
|
202
202
|
## Importaciones transitivas
|
|
203
203
|
|
|
204
|
-
Los archivos de
|
|
204
|
+
Los archivos de política personalizados pueden importar módulos locales mediante rutas relativas:
|
|
205
205
|
|
|
206
206
|
```js
|
|
207
207
|
// my-policies.js
|
|
@@ -231,7 +231,7 @@ customPolicies.add({
|
|
|
231
231
|
name: "require-summary-on-stop",
|
|
232
232
|
match: { events: ["Stop"] },
|
|
233
233
|
fn: async (ctx) => {
|
|
234
|
-
// Solo se dispara cuando la sesión
|
|
234
|
+
// Solo se dispara cuando finaliza la sesión
|
|
235
235
|
// ctx.session.transcriptPath contiene el registro completo de la sesión
|
|
236
236
|
return allow();
|
|
237
237
|
},
|
|
@@ -244,20 +244,20 @@ Omite `match` por completo para disparar en cada tipo de evento.
|
|
|
244
244
|
|
|
245
245
|
## Manejo de errores y modos de fallo
|
|
246
246
|
|
|
247
|
-
Las políticas personalizadas son **fail-open**: los errores nunca bloquean las políticas integradas ni
|
|
247
|
+
Las políticas personalizadas son **fail-open**: los errores nunca bloquean las políticas integradas ni provocan un crash del manejador de hooks.
|
|
248
248
|
|
|
249
249
|
| Fallo | Comportamiento |
|
|
250
250
|
|---------|----------|
|
|
251
|
-
| `customPoliciesPath` no configurado | No se ejecutan políticas personalizadas explícitas; las políticas
|
|
252
|
-
| Archivo no encontrado | Se registra una advertencia en `~/.failproofai/hook.log`; las integradas continúan |
|
|
251
|
+
| `customPoliciesPath` no configurado | No se ejecutan políticas personalizadas explícitas; las políticas por convención y las integradas continúan normalmente |
|
|
252
|
+
| Archivo no encontrado | Se registra una advertencia en `~/.failproofai/hook.log`; las políticas integradas continúan |
|
|
253
253
|
| Error de sintaxis/importación (explícito) | Error registrado en `~/.failproofai/hook.log`; se omiten las políticas personalizadas explícitas |
|
|
254
|
-
| Error de sintaxis/importación (convención) | Error registrado; ese archivo se omite, los demás archivos de convención se cargan
|
|
254
|
+
| Error de sintaxis/importación (convención) | Error registrado; ese archivo se omite, los demás archivos de convención se cargan igual |
|
|
255
255
|
| `fn` lanza un error en tiempo de ejecución | Error registrado; ese hook se trata como `allow`; los demás hooks continúan |
|
|
256
|
-
| `fn` tarda más de 10 segundos |
|
|
257
|
-
| Directorio de convención
|
|
256
|
+
| `fn` tarda más de 10 segundos | Timeout registrado; se trata como `allow` |
|
|
257
|
+
| Directorio de convención inexistente | No se ejecutan políticas por convención; sin error |
|
|
258
258
|
|
|
259
259
|
<Tip>
|
|
260
|
-
Para depurar errores
|
|
260
|
+
Para depurar errores de políticas personalizadas, observa el archivo de log:
|
|
261
261
|
|
|
262
262
|
```bash
|
|
263
263
|
tail -f ~/.failproofai/hook.log
|
|
@@ -272,7 +272,7 @@ tail -f ~/.failproofai/hook.log
|
|
|
272
272
|
// my-policies.js
|
|
273
273
|
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
274
274
|
|
|
275
|
-
//
|
|
275
|
+
// Prevent agent from writing to secrets/ directory
|
|
276
276
|
customPolicies.add({
|
|
277
277
|
name: "block-secrets-dir",
|
|
278
278
|
description: "Prevent agent from writing to secrets/ directory",
|
|
@@ -285,7 +285,7 @@ customPolicies.add({
|
|
|
285
285
|
},
|
|
286
286
|
});
|
|
287
287
|
|
|
288
|
-
//
|
|
288
|
+
// Keep the agent on track: verify tests before committing
|
|
289
289
|
customPolicies.add({
|
|
290
290
|
name: "remind-test-before-commit",
|
|
291
291
|
description: "Keep the agent on track: verify tests pass before committing",
|
|
@@ -300,7 +300,7 @@ customPolicies.add({
|
|
|
300
300
|
},
|
|
301
301
|
});
|
|
302
302
|
|
|
303
|
-
//
|
|
303
|
+
// Prevent unplanned dependency changes during freeze
|
|
304
304
|
customPolicies.add({
|
|
305
305
|
name: "dependency-freeze",
|
|
306
306
|
description: "Prevent unplanned dependency changes during freeze period",
|
|
@@ -323,29 +323,29 @@ export { customPolicies };
|
|
|
323
323
|
|
|
324
324
|
## Ejemplos
|
|
325
325
|
|
|
326
|
-
El directorio `examples/` contiene archivos de
|
|
326
|
+
El directorio `examples/` contiene archivos de política listos para ejecutar:
|
|
327
327
|
|
|
328
328
|
| Archivo | Contenido |
|
|
329
329
|
|------|----------|
|
|
330
|
-
| `examples/policies-basic.js` | Cinco políticas
|
|
331
|
-
| `examples/policies-advanced/index.js` | Patrones avanzados: importaciones transitivas, llamadas asíncronas, limpieza de salida y hooks
|
|
332
|
-
| `examples/convention-policies/security-policies.mjs` | Políticas de seguridad basadas en
|
|
333
|
-
| `examples/convention-policies/workflow-policies.mjs` | Políticas de flujo de trabajo basadas en
|
|
330
|
+
| `examples/policies-basic.js` | Cinco políticas de inicio que cubren los modos de fallo más comunes de los agentes |
|
|
331
|
+
| `examples/policies-advanced/index.js` | Patrones avanzados: importaciones transitivas, llamadas asíncronas, limpieza de salida y hooks de fin de sesión |
|
|
332
|
+
| `examples/convention-policies/security-policies.mjs` | Políticas de seguridad basadas en convención (bloquear escrituras en .env, prevenir reescritura del historial de git) |
|
|
333
|
+
| `examples/convention-policies/workflow-policies.mjs` | Políticas de flujo de trabajo basadas en convención (recordatorios de pruebas, registro de escrituras de archivos) |
|
|
334
334
|
|
|
335
|
-
###
|
|
335
|
+
### Usar los ejemplos con archivo explícito
|
|
336
336
|
|
|
337
337
|
```bash
|
|
338
338
|
failproofai policies --install --custom ./examples/policies-basic.js
|
|
339
339
|
```
|
|
340
340
|
|
|
341
|
-
###
|
|
341
|
+
### Usar los ejemplos basados en convención
|
|
342
342
|
|
|
343
343
|
```bash
|
|
344
|
-
# Copiar al nivel
|
|
344
|
+
# Copiar al nivel de proyecto
|
|
345
345
|
mkdir -p .failproofai/policies
|
|
346
346
|
cp examples/convention-policies/*.mjs .failproofai/policies/
|
|
347
347
|
|
|
348
|
-
# O copiar al nivel
|
|
348
|
+
# O copiar al nivel de usuario
|
|
349
349
|
mkdir -p ~/.failproofai/policies
|
|
350
350
|
cp examples/convention-policies/*.mjs ~/.failproofai/policies/
|
|
351
351
|
```
|
|
@@ -4,13 +4,13 @@ description: "Cómo configurar hooks para Claude Code y el Agents SDK"
|
|
|
4
4
|
icon: book-open
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Ejemplos listos para usar en
|
|
7
|
+
Ejemplos listos para usar en situaciones comunes. Cada uno muestra cómo instalarlo y qué esperar.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
## Configurar hooks para Claude Code
|
|
12
12
|
|
|
13
|
-
Failproof AI se integra con Claude Code a través de su [sistema de hooks](https://docs.anthropic.com/en/docs/claude-code/hooks). Al ejecutar `failproofai policies --install`, registra comandos de hook en el `settings.json` de Claude Code que se
|
|
13
|
+
Failproof AI se integra con Claude Code a través de su [sistema de hooks](https://docs.anthropic.com/en/docs/claude-code/hooks). Al ejecutar `failproofai policies --install`, registra comandos de hook en el archivo `settings.json` de Claude Code que se disparan en cada llamada a herramienta.
|
|
14
14
|
|
|
15
15
|
<Steps>
|
|
16
16
|
<Step title="Instalar failproofai">
|
|
@@ -23,7 +23,7 @@ Failproof AI se integra con Claude Code a través de su [sistema de hooks](https
|
|
|
23
23
|
failproofai policies --install
|
|
24
24
|
```
|
|
25
25
|
</Step>
|
|
26
|
-
<Step title="Verificar que los hooks
|
|
26
|
+
<Step title="Verificar que los hooks estén registrados">
|
|
27
27
|
```bash
|
|
28
28
|
cat ~/.claude/settings.json | grep failproofai
|
|
29
29
|
```
|
|
@@ -35,7 +35,7 @@ Failproof AI se integra con Claude Code a través de su [sistema de hooks](https
|
|
|
35
35
|
claude
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
Las políticas ahora se ejecutan automáticamente en cada llamada a
|
|
38
|
+
Las políticas ahora se ejecutan automáticamente en cada llamada a herramienta. Prueba pedirle a Claude que ejecute `sudo rm -rf /` — será bloqueado.
|
|
39
39
|
</Step>
|
|
40
40
|
</Steps>
|
|
41
41
|
|
|
@@ -52,7 +52,7 @@ Si estás desarrollando con el [Agents SDK](https://docs.anthropic.com/en/docs/a
|
|
|
52
52
|
```
|
|
53
53
|
</Step>
|
|
54
54
|
<Step title="Configurar hooks en tu agente">
|
|
55
|
-
Pasa comandos de hook al crear el proceso de tu agente. Los hooks se
|
|
55
|
+
Pasa los comandos de hook al crear el proceso de tu agente. Los hooks se disparan de la misma forma que en Claude Code — mediante JSON por stdin/stdout:
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
58
|
failproofai --hook PreToolUse # se llama antes de cada herramienta
|
|
@@ -88,29 +88,29 @@ Si estás desarrollando con el [Agents SDK](https://docs.anthropic.com/en/docs/a
|
|
|
88
88
|
|
|
89
89
|
## Bloquear comandos destructivos
|
|
90
90
|
|
|
91
|
-
La configuración más
|
|
91
|
+
La configuración más habitual: evitar que los agentes causen daños irreversibles.
|
|
92
92
|
|
|
93
93
|
```bash
|
|
94
94
|
failproofai policies --install block-sudo block-rm-rf block-force-push block-curl-pipe-sh
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
-
Qué hace
|
|
97
|
+
Qué hace cada uno:
|
|
98
98
|
- `block-sudo` — bloquea todos los comandos `sudo`
|
|
99
99
|
- `block-rm-rf` — bloquea la eliminación recursiva de archivos
|
|
100
100
|
- `block-force-push` — bloquea `git push --force`
|
|
101
|
-
- `block-curl-pipe-sh` — bloquea
|
|
101
|
+
- `block-curl-pipe-sh` — bloquea el envío por tubería de scripts remotos a la shell
|
|
102
102
|
|
|
103
103
|
---
|
|
104
104
|
|
|
105
105
|
## Prevenir la filtración de secretos
|
|
106
106
|
|
|
107
|
-
Impide que los agentes vean o filtren credenciales en la salida de herramientas.
|
|
107
|
+
Impide que los agentes vean o filtren credenciales en la salida de las herramientas.
|
|
108
108
|
|
|
109
109
|
```bash
|
|
110
110
|
failproofai policies --install sanitize-api-keys sanitize-jwt sanitize-connection-strings sanitize-bearer-tokens
|
|
111
111
|
```
|
|
112
112
|
|
|
113
|
-
Estas políticas se
|
|
113
|
+
Estas políticas se disparan en `PostToolUse` — después de que una herramienta se ejecuta, limpian la salida antes de que el agente la vea.
|
|
114
114
|
|
|
115
115
|
---
|
|
116
116
|
|
|
@@ -142,7 +142,7 @@ customPolicies.add({
|
|
|
142
142
|
signal: AbortSignal.timeout(5000),
|
|
143
143
|
});
|
|
144
144
|
} catch {
|
|
145
|
-
// nunca bloquear
|
|
145
|
+
// nunca bloquear al agente si Slack no está disponible
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
return allow();
|
|
@@ -158,7 +158,7 @@ SLACK_WEBHOOK_URL=https://hooks.slack.com/... failproofai policies --install --c
|
|
|
158
158
|
|
|
159
159
|
---
|
|
160
160
|
|
|
161
|
-
## Mantener los agentes en una rama
|
|
161
|
+
## Mantener a los agentes en una rama
|
|
162
162
|
|
|
163
163
|
Evita que los agentes cambien de rama o hagan push a ramas protegidas.
|
|
164
164
|
|
|
@@ -182,9 +182,9 @@ customPolicies.add({
|
|
|
182
182
|
|
|
183
183
|
---
|
|
184
184
|
|
|
185
|
-
##
|
|
185
|
+
## Exigir pruebas antes de hacer commits
|
|
186
186
|
|
|
187
|
-
Recuerda a los agentes que ejecuten las pruebas antes de hacer commit.
|
|
187
|
+
Recuerda a los agentes que ejecuten las pruebas antes de hacer un commit.
|
|
188
188
|
|
|
189
189
|
```javascript
|
|
190
190
|
import { customPolicies, allow, instruct } from "failproofai";
|
|
@@ -206,9 +206,9 @@ customPolicies.add({
|
|
|
206
206
|
|
|
207
207
|
---
|
|
208
208
|
|
|
209
|
-
##
|
|
209
|
+
## Blindar un repositorio de producción
|
|
210
210
|
|
|
211
|
-
|
|
211
|
+
Confirma una configuración a nivel de proyecto para que todos los desarrolladores de tu equipo apliquen las mismas políticas.
|
|
212
212
|
|
|
213
213
|
Crea `.failproofai/policies-config.json` en tu repositorio:
|
|
214
214
|
|
|
@@ -238,7 +238,61 @@ git add .failproofai/policies-config.json
|
|
|
238
238
|
git commit -m "Add failproofai team policies"
|
|
239
239
|
```
|
|
240
240
|
|
|
241
|
-
Cada miembro del equipo que tenga failproofai instalado
|
|
241
|
+
Cada miembro del equipo que tenga failproofai instalado aplicará estas reglas automáticamente.
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Construir un estándar de calidad para toda la organización con políticas de convención
|
|
246
|
+
|
|
247
|
+
La configuración más impactante: confirma `.failproofai/policies/` en tu repositorio con políticas adaptadas a tu proyecto. Todos los miembros del equipo las reciben automáticamente — sin comandos de instalación ni cambios de configuración.
|
|
248
|
+
|
|
249
|
+
<Steps>
|
|
250
|
+
<Step title="Crear el directorio y añadir políticas">
|
|
251
|
+
```bash
|
|
252
|
+
mkdir -p .failproofai/policies
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
```js
|
|
256
|
+
// .failproofai/policies/team-policies.mjs
|
|
257
|
+
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
258
|
+
|
|
259
|
+
// Aplica el gestor de paquetes preferido de tu equipo
|
|
260
|
+
// (o activa la política integrada prefer-package-manager en su lugar)
|
|
261
|
+
customPolicies.add({
|
|
262
|
+
name: "enforce-bun",
|
|
263
|
+
match: { events: ["PreToolUse"] },
|
|
264
|
+
fn: async (ctx) => {
|
|
265
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
266
|
+
const cmd = String(ctx.toolInput?.command ?? "");
|
|
267
|
+
if (/\bnpm\b/.test(cmd)) return deny("Use bun instead of npm.");
|
|
268
|
+
return allow();
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
// Recuerda al agente que ejecute las pruebas antes de hacer un commit
|
|
273
|
+
customPolicies.add({
|
|
274
|
+
name: "test-before-commit",
|
|
275
|
+
match: { events: ["PreToolUse"] },
|
|
276
|
+
fn: async (ctx) => {
|
|
277
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
278
|
+
if (/git\s+commit/.test(ctx.toolInput?.command ?? "")) {
|
|
279
|
+
return instruct("Run tests before committing.");
|
|
280
|
+
}
|
|
281
|
+
return allow();
|
|
282
|
+
},
|
|
283
|
+
});
|
|
284
|
+
```
|
|
285
|
+
</Step>
|
|
286
|
+
<Step title="Confirmar en git">
|
|
287
|
+
```bash
|
|
288
|
+
git add .failproofai/policies/
|
|
289
|
+
git commit -m "Add team quality policies"
|
|
290
|
+
```
|
|
291
|
+
</Step>
|
|
292
|
+
<Step title="Seguir mejorando">
|
|
293
|
+
A medida que tu equipo encuentre nuevos fallos, añade políticas y envíalas. Todos recibirán la actualización en su próximo `git pull`. Estas políticas se convierten en un estándar de calidad vivo que crece con tu equipo.
|
|
294
|
+
</Step>
|
|
295
|
+
</Steps>
|
|
242
296
|
|
|
243
297
|
---
|
|
244
298
|
|
|
@@ -248,6 +302,6 @@ El directorio [`examples/`](https://github.com/exospherehost/failproofai/tree/ma
|
|
|
248
302
|
|
|
249
303
|
| Archivo | Qué muestra |
|
|
250
304
|
|---------|-------------|
|
|
251
|
-
| `policies-basic.js` | Políticas básicas: bloquear escrituras en producción, force-push y scripts
|
|
305
|
+
| `policies-basic.js` | Políticas básicas: bloquear escrituras en producción, force-push y scripts por tubería |
|
|
252
306
|
| `policies-notification.js` | Alertas de Slack para notificaciones de inactividad y fin de sesión |
|
|
253
|
-
| `policies-advanced/index.js` | Importaciones transitivas, hooks asíncronos, limpieza de salida
|
|
307
|
+
| `policies-advanced/index.js` | Importaciones transitivas, hooks asíncronos, limpieza de salida con PostToolUse y manejo del evento Stop |
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Primeros pasos
|
|
3
|
-
description: "Instala failproofai, activa las políticas y deja que tus agentes funcionen de forma
|
|
3
|
+
description: "Instala failproofai, activa las políticas y deja que tus agentes funcionen de forma confiable"
|
|
4
4
|
icon: rocket
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
## Requisitos
|
|
8
8
|
|
|
9
9
|
- **Node.js** >= 20.9.0
|
|
10
|
-
- **Bun** >= 1.3.0 (opcional
|
|
10
|
+
- **Bun** >= 1.3.0 (opcional - solo necesario para compilar desde el código fuente)
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
@@ -31,13 +31,13 @@ bun add -g failproofai
|
|
|
31
31
|
|
|
32
32
|
<Steps>
|
|
33
33
|
<Step title="Activar las políticas">
|
|
34
|
-
Las políticas son reglas que se ejecutan antes y después de cada llamada a
|
|
34
|
+
Las políticas son reglas que se ejecutan antes y después de cada llamada a herramientas del agente. Detectan comandos destructivos, filtraciones de secretos y otros modos de fallo antes de que causen daños.
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
37
|
failproofai policies --install
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
Esto escribe entradas de hook en el archivo `settings.json` de Claude Code. También puedes instalar para un
|
|
40
|
+
Esto escribe entradas de hook en el archivo `settings.json` de Claude Code. También puedes instalar para un solo proyecto o elegir políticas específicas:
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
43
|
failproofai policies --install --scope project
|
|
@@ -49,7 +49,7 @@ bun add -g failproofai
|
|
|
49
49
|
failproofai policies
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
Muestra todas las políticas, si están
|
|
52
|
+
Muestra todas las políticas, si están habilitadas y los parámetros configurados.
|
|
53
53
|
</Step>
|
|
54
54
|
<Step title="Abrir el panel de control">
|
|
55
55
|
```bash
|
|
@@ -59,7 +59,7 @@ bun add -g failproofai
|
|
|
59
59
|
Abre un panel de control local en `http://localhost:8020` donde puedes explorar sesiones, inspeccionar llamadas a herramientas y gestionar políticas.
|
|
60
60
|
</Step>
|
|
61
61
|
<Step title="Ejecutar tu agente">
|
|
62
|
-
Inicia Claude Code como de costumbre. Si el agente intenta
|
|
62
|
+
Inicia Claude Code como de costumbre. Si el agente intenta algo arriesgado, failproofai lo intercepta automáticamente. Déjalo correr sin supervisión y revisa lo que ocurrió en el panel de control.
|
|
63
63
|
</Step>
|
|
64
64
|
</Steps>
|
|
65
65
|
|
|
@@ -67,7 +67,7 @@ bun add -g failproofai
|
|
|
67
67
|
|
|
68
68
|
## Cómo funcionan las políticas
|
|
69
69
|
|
|
70
|
-
Cada vez que un agente ejecuta una herramienta, Claude Code
|
|
70
|
+
Cada vez que un agente ejecuta una herramienta, Claude Code invoca failproofai como subproceso:
|
|
71
71
|
|
|
72
72
|
```text
|
|
73
73
|
Claude Code → failproofai --hook PreToolUse → reads stdin JSON
|
|
@@ -77,37 +77,89 @@ Claude Code → failproofai --hook PreToolUse → reads stdin JSON
|
|
|
77
77
|
|
|
78
78
|
Cada política devuelve una de tres decisiones:
|
|
79
79
|
|
|
80
|
-
- **allow**
|
|
81
|
-
- **deny**
|
|
82
|
-
- **instruct**
|
|
80
|
+
- **allow** - el agente continúa con normalidad
|
|
81
|
+
- **deny** - la acción es bloqueada y se le informa al agente el motivo
|
|
82
|
+
- **instruct** - se añade contexto adicional al prompt del agente
|
|
83
83
|
|
|
84
84
|
<Note>
|
|
85
|
-
Las políticas se ejecutan en tu proceso local. No se envía nada a
|
|
85
|
+
Las políticas se ejecutan en tu proceso local. No se envía nada a un servicio remoto.
|
|
86
86
|
</Note>
|
|
87
87
|
|
|
88
88
|
---
|
|
89
89
|
|
|
90
|
+
## Configurar políticas de equipo con políticas basadas en convenciones
|
|
91
|
+
|
|
92
|
+
La forma más rápida de establecer estándares de calidad en tu equipo es la convención `.failproofai/policies/`. Coloca archivos de políticas en este directorio y se cargan automáticamente — sin flags, sin cambios de configuración, sin comandos de instalación.
|
|
93
|
+
|
|
94
|
+
<Steps>
|
|
95
|
+
<Step title="Crear el directorio de políticas">
|
|
96
|
+
```bash
|
|
97
|
+
mkdir -p .failproofai/policies
|
|
98
|
+
```
|
|
99
|
+
</Step>
|
|
100
|
+
<Step title="Añadir archivos de políticas">
|
|
101
|
+
Copia los ejemplos de inicio o escribe los tuyos propios:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
cp node_modules/failproofai/examples/convention-policies/*.mjs .failproofai/policies/
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
O crea uno nuevo:
|
|
108
|
+
|
|
109
|
+
```js
|
|
110
|
+
// .failproofai/policies/team-policies.mjs
|
|
111
|
+
import { customPolicies, allow, deny, instruct } from "failproofai";
|
|
112
|
+
|
|
113
|
+
customPolicies.add({
|
|
114
|
+
name: "test-before-commit",
|
|
115
|
+
match: { events: ["PreToolUse"] },
|
|
116
|
+
fn: async (ctx) => {
|
|
117
|
+
if (ctx.toolName !== "Bash") return allow();
|
|
118
|
+
if (/git\s+commit/.test(ctx.toolInput?.command ?? "")) {
|
|
119
|
+
return instruct("Run tests before committing.");
|
|
120
|
+
}
|
|
121
|
+
return allow();
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
```
|
|
125
|
+
</Step>
|
|
126
|
+
<Step title="Hacer commit en git">
|
|
127
|
+
```bash
|
|
128
|
+
git add .failproofai/policies/
|
|
129
|
+
git commit -m "Add team quality policies"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Todos los miembros del equipo que tengan failproofai instalado adoptarán estas políticas automáticamente. No se necesita configuración por desarrollador.
|
|
133
|
+
</Step>
|
|
134
|
+
</Steps>
|
|
135
|
+
|
|
136
|
+
<Tip>
|
|
137
|
+
Haz commit de `.failproofai/policies/` en tu repositorio para que todo el equipo comparta los mismos estándares. A medida que el equipo descubra nuevos modos de fallo, añade políticas y haz push — todos recibirán la actualización en su próximo `git pull`. Con el tiempo, estas políticas se convierten en un estándar de calidad vivo que sigue mejorando.
|
|
138
|
+
</Tip>
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
90
142
|
## Almacenamiento de datos
|
|
91
143
|
|
|
92
|
-
Toda la configuración y los registros
|
|
144
|
+
Toda la configuración y los registros se mantienen en tu máquina:
|
|
93
145
|
|
|
94
|
-
| Ruta |
|
|
95
|
-
|
|
146
|
+
| Ruta | Qué almacena |
|
|
147
|
+
|------|--------------|
|
|
96
148
|
| `~/.failproofai/policies-config.json` | Configuración global de políticas |
|
|
97
149
|
| `~/.failproofai/hook-activity.jsonl` | Historial de ejecución de hooks |
|
|
98
150
|
| `~/.failproofai/hook.log` | Registro de depuración para errores de hooks personalizados |
|
|
99
|
-
| `.failproofai/policies-config.json` | Configuración por proyecto (
|
|
100
|
-
| `.failproofai/policies-config.local.json` | Ajustes personales (
|
|
151
|
+
| `.failproofai/policies-config.json` | Configuración por proyecto (en el repositorio) |
|
|
152
|
+
| `.failproofai/policies-config.local.json` | Ajustes personales (en gitignore) |
|
|
101
153
|
|
|
102
154
|
---
|
|
103
155
|
|
|
104
|
-
##
|
|
156
|
+
## Desinstalar
|
|
105
157
|
|
|
106
158
|
```bash
|
|
107
159
|
failproofai policies --uninstall
|
|
108
160
|
```
|
|
109
161
|
|
|
110
|
-
Elimina las entradas de hook
|
|
162
|
+
Elimina las entradas de hook del archivo `~/.claude/settings.json`. Los archivos de configuración en `~/.failproofai/` se conservan.
|
|
111
163
|
|
|
112
164
|
---
|
|
113
165
|
|
|
@@ -120,7 +172,7 @@ Elimina las entradas de hook de `~/.claude/settings.json`. Los archivos de confi
|
|
|
120
172
|
</Card>
|
|
121
173
|
|
|
122
174
|
<Card title="Políticas integradas" icon="shield" href="/es/built-in-policies">
|
|
123
|
-
Las 26 políticas
|
|
175
|
+
Las 26 políticas con sus parámetros
|
|
124
176
|
</Card>
|
|
125
177
|
|
|
126
178
|
<Card title="Políticas personalizadas" icon="code" href="/es/custom-policies">
|
|
@@ -128,7 +180,7 @@ Elimina las entradas de hook de `~/.claude/settings.json`. Los archivos de confi
|
|
|
128
180
|
</Card>
|
|
129
181
|
|
|
130
182
|
<Card title="Monitor de agentes" icon="chart-line" href="/es/dashboard">
|
|
131
|
-
|
|
183
|
+
Monitorea sesiones y revisa la actividad de las políticas
|
|
132
184
|
</Card>
|
|
133
185
|
|
|
134
186
|
</CardGroup>
|