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.
Files changed (191) hide show
  1. package/.next/standalone/.failproofai/policies/review-policies.mjs +113 -0
  2. package/.next/standalone/.next/BUILD_ID +1 -1
  3. package/.next/standalone/.next/build-manifest.json +5 -5
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/required-server-files.json +1 -1
  6. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +2 -2
  7. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  9. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  12. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  13. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  14. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  15. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  16. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  17. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +2 -2
  18. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  19. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  22. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  23. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  24. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  25. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
  26. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  27. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  28. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  29. package/.next/standalone/.next/server/app/index.html +1 -1
  30. package/.next/standalone/.next/server/app/index.rsc +15 -15
  31. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  32. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  33. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  34. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
  35. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  36. package/.next/standalone/.next/server/app/page/build-manifest.json +2 -2
  37. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  38. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/policies/page/build-manifest.json +2 -2
  41. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
  42. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/project/[name]/page/build-manifest.json +2 -2
  45. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  46. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/build-manifest.json +2 -2
  49. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  50. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  51. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/projects/page/build-manifest.json +2 -2
  54. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  55. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g72weg._.js +1 -1
  58. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
  59. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0a.nuas._.js → [root-of-the-server]__05akje6._.js} +2 -2
  60. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
  61. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
  62. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
  63. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
  64. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0.~fd7s._.js → [root-of-the-server]__0i5kvry._.js} +2 -2
  65. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0okos0k._.js +2 -2
  66. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +6 -6
  67. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
  68. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
  69. package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
  70. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
  71. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
  72. package/.next/standalone/.next/server/middleware-build-manifest.js +5 -5
  73. package/.next/standalone/.next/server/pages/404.html +2 -2
  74. package/.next/standalone/.next/server/pages/500.html +1 -1
  75. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
  77. package/.next/standalone/.next/static/chunks/{0teq8wdh3po1n.js → 00j0rr7rh8ef8.js} +1 -1
  78. package/.next/standalone/.next/static/chunks/{0maq.q1t.ri85.js → 05j1px0r8yzh6.js} +2 -2
  79. package/.next/standalone/.next/static/chunks/0badv41uxa56..js +4 -0
  80. package/.next/standalone/.next/static/chunks/{0hplx-8c-4vpv.js → 0ijk_kek9_wyx.js} +1 -1
  81. package/.next/standalone/.next/static/chunks/{0uc0um_uz51m_.js → 0npb~873.wvg3.js} +1 -1
  82. package/.next/standalone/.next/static/chunks/{0hctoh28rg838.js → 0xpl.oscrakvx.js} +1 -1
  83. package/.next/standalone/.next/static/chunks/{0.z51twd.0l5z.js → 1052sguyd-.ka.js} +1 -1
  84. package/.next/standalone/.next/static/chunks/{09e7drilkf1sn.js → 12simlrcfk3g2.js} +1 -1
  85. package/.next/standalone/.next/static/chunks/{0ul6fk-z.6k-0.js → 14cl9poem30dq.js} +1 -1
  86. package/.next/standalone/.next/static/chunks/{turbopack-0r26pc8h0y_-e.js → turbopack-0o7k.hakttp4k.js} +1 -1
  87. package/.next/standalone/CHANGELOG.md +19 -0
  88. package/.next/standalone/README.md +2 -2
  89. package/.next/standalone/bun.lock +43 -85
  90. package/.next/standalone/dist/cli.mjs +91 -4
  91. package/.next/standalone/docs/ar/built-in-policies.mdx +124 -87
  92. package/.next/standalone/docs/ar/custom-policies.mdx +72 -72
  93. package/.next/standalone/docs/ar/examples.mdx +86 -33
  94. package/.next/standalone/docs/ar/getting-started.mdx +82 -29
  95. package/.next/standalone/docs/built-in-policies.mdx +38 -1
  96. package/.next/standalone/docs/custom-policies.mdx +1 -1
  97. package/.next/standalone/docs/de/built-in-policies.mdx +93 -56
  98. package/.next/standalone/docs/de/custom-policies.mdx +56 -56
  99. package/.next/standalone/docs/de/examples.mdx +72 -18
  100. package/.next/standalone/docs/de/getting-started.mdx +72 -20
  101. package/.next/standalone/docs/es/built-in-policies.mdx +115 -78
  102. package/.next/standalone/docs/es/custom-policies.mdx +55 -55
  103. package/.next/standalone/docs/es/examples.mdx +73 -19
  104. package/.next/standalone/docs/es/getting-started.mdx +72 -20
  105. package/.next/standalone/docs/examples.mdx +54 -0
  106. package/.next/standalone/docs/fr/built-in-policies.mdx +83 -46
  107. package/.next/standalone/docs/fr/custom-policies.mdx +51 -51
  108. package/.next/standalone/docs/fr/examples.mdx +78 -24
  109. package/.next/standalone/docs/fr/getting-started.mdx +65 -13
  110. package/.next/standalone/docs/getting-started.mdx +52 -0
  111. package/.next/standalone/docs/he/built-in-policies.mdx +156 -117
  112. package/.next/standalone/docs/he/custom-policies.mdx +75 -75
  113. package/.next/standalone/docs/he/examples.mdx +87 -33
  114. package/.next/standalone/docs/he/getting-started.mdx +84 -33
  115. package/.next/standalone/docs/hi/built-in-policies.mdx +101 -60
  116. package/.next/standalone/docs/hi/custom-policies.mdx +71 -70
  117. package/.next/standalone/docs/hi/examples.mdx +90 -36
  118. package/.next/standalone/docs/hi/getting-started.mdx +80 -27
  119. package/.next/standalone/docs/i18n/README.ar.md +69 -69
  120. package/.next/standalone/docs/i18n/README.de.md +46 -46
  121. package/.next/standalone/docs/i18n/README.es.md +42 -42
  122. package/.next/standalone/docs/i18n/README.fr.md +39 -39
  123. package/.next/standalone/docs/i18n/README.he.md +83 -83
  124. package/.next/standalone/docs/i18n/README.hi.md +69 -69
  125. package/.next/standalone/docs/i18n/README.it.md +72 -72
  126. package/.next/standalone/docs/i18n/README.ja.md +71 -71
  127. package/.next/standalone/docs/i18n/README.ko.md +52 -52
  128. package/.next/standalone/docs/i18n/README.pt-br.md +44 -44
  129. package/.next/standalone/docs/i18n/README.ru.md +66 -66
  130. package/.next/standalone/docs/i18n/README.tr.md +82 -83
  131. package/.next/standalone/docs/i18n/README.vi.md +70 -71
  132. package/.next/standalone/docs/i18n/README.zh.md +51 -51
  133. package/.next/standalone/docs/it/built-in-policies.mdx +118 -81
  134. package/.next/standalone/docs/it/custom-policies.mdx +69 -69
  135. package/.next/standalone/docs/it/examples.mdx +93 -39
  136. package/.next/standalone/docs/it/getting-started.mdx +73 -21
  137. package/.next/standalone/docs/ja/built-in-policies.mdx +98 -61
  138. package/.next/standalone/docs/ja/custom-policies.mdx +71 -71
  139. package/.next/standalone/docs/ja/examples.mdx +76 -22
  140. package/.next/standalone/docs/ja/getting-started.mdx +65 -13
  141. package/.next/standalone/docs/ko/built-in-policies.mdx +137 -100
  142. package/.next/standalone/docs/ko/custom-policies.mdx +67 -67
  143. package/.next/standalone/docs/ko/examples.mdx +87 -33
  144. package/.next/standalone/docs/ko/getting-started.mdx +61 -9
  145. package/.next/standalone/docs/pt-br/built-in-policies.mdx +94 -57
  146. package/.next/standalone/docs/pt-br/custom-policies.mdx +56 -56
  147. package/.next/standalone/docs/pt-br/examples.mdx +78 -24
  148. package/.next/standalone/docs/pt-br/getting-started.mdx +64 -12
  149. package/.next/standalone/docs/ru/built-in-policies.mdx +142 -105
  150. package/.next/standalone/docs/ru/custom-policies.mdx +82 -81
  151. package/.next/standalone/docs/ru/examples.mdx +77 -22
  152. package/.next/standalone/docs/ru/getting-started.mdx +74 -22
  153. package/.next/standalone/docs/tr/built-in-policies.mdx +104 -67
  154. package/.next/standalone/docs/tr/custom-policies.mdx +59 -60
  155. package/.next/standalone/docs/tr/examples.mdx +97 -42
  156. package/.next/standalone/docs/tr/getting-started.mdx +75 -23
  157. package/.next/standalone/docs/vi/built-in-policies.mdx +110 -72
  158. package/.next/standalone/docs/vi/custom-policies.mdx +68 -68
  159. package/.next/standalone/docs/vi/examples.mdx +93 -38
  160. package/.next/standalone/docs/vi/getting-started.mdx +74 -22
  161. package/.next/standalone/docs/zh/built-in-policies.mdx +132 -95
  162. package/.next/standalone/docs/zh/custom-policies.mdx +49 -49
  163. package/.next/standalone/docs/zh/examples.mdx +90 -36
  164. package/.next/standalone/docs/zh/getting-started.mdx +73 -21
  165. package/.next/standalone/node_modules/@next/env/package.json +1 -1
  166. package/.next/standalone/node_modules/next/dist/build/swc/index.js +1 -1
  167. package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +7 -7
  168. package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
  169. package/.next/standalone/node_modules/next/dist/server/config-schema.js +10 -2
  170. package/.next/standalone/node_modules/next/dist/server/config.js +1 -1
  171. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
  172. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  173. package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  174. package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
  175. package/.next/standalone/node_modules/next/dist/server/render.js +27 -20
  176. package/.next/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
  177. package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  178. package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  179. package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
  180. package/.next/standalone/node_modules/next/package.json +15 -15
  181. package/.next/standalone/package.json +2 -2
  182. package/.next/standalone/server.js +1 -1
  183. package/.next/standalone/src/hooks/builtin-policies.ts +106 -1
  184. package/README.md +2 -2
  185. package/dist/cli.mjs +91 -4
  186. package/package.json +2 -2
  187. package/src/hooks/builtin-policies.ts +106 -1
  188. package/.next/standalone/.next/static/chunks/0w9lwqy0-v1dk.js +0 -4
  189. /package/.next/standalone/.next/static/{8mygPGI5bzrtWK36ZYO59 → A9pNTZdoYJTVyPAYwQMx5}/_buildManifest.js +0 -0
  190. /package/.next/standalone/.next/static/{8mygPGI5bzrtWK36ZYO59 → A9pNTZdoYJTVyPAYwQMx5}/_clientMiddlewareManifest.js +0 -0
  191. /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 del proyecto, prevenir la deriva, bloquear operaciones destructivas, detectar agentes atascados o integrarte con Slack, flujos de aprobación y más. Utilizan el mismo sistema de eventos de hook y las decisiones `allow`, `deny`, `instruct` que las políticas integradas.
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
- Instálalo:
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 convenciones (recomendada)
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, sin necesidad de flags ni cambios de configuración. Funciona como los git hooks: deposita un archivo y ya está.
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
- # Nivel de proyecto — incluido en git, compartido con el equipo
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
- # Nivel de usuario — personal, se aplica a todos los proyectos
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 primero en ámbito)
57
- - Los archivos se cargan en orden alfabético dentro de cada directorio. Usa el prefijo `01-`, `02-` para controlar el orden
58
- - Solo se cargan los archivos que coincidan con `*policies.{js,mjs,ts}`; los demás se ignoran
59
- - Cada archivo se carga de forma independiente (fail-open por archivo)
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 sencilla de compartir políticas en un equipo. Incluye `.failproofai/policies/` en git y todos los miembros del equipo las obtendrán automáticamente.
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 personalizadas
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
- ### Usando ambas formas juntas
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 explícito `customPoliciesPath` (si está configurado)
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. Llámalo tantas veces como sea necesario para múltiples políticas en el mismo archivo.
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; omite para coincidir con todos
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 auxiliares de decisión
112
+ ### Funciones de decisión
113
113
 
114
114
  | Función | Efecto | Cuándo usarla |
115
115
  |----------|--------|----------|
116
- | `allow()` | Permite la operación en silencio | La acción es segura, no se necesita mensaje |
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 aparece ante Claude con el prefijo `"Blocked by failproofai:"`. Un único `deny` cortocircuita toda evaluación posterior.
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`, sin necesidad de cambiar el código. Esto también funciona 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.
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 indica a Claude que todo está en orden
138
- - **Explicaciones de fail-open:** `allow("GitHub CLI not installed, skipping CI check.")` — le indica 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 devuelven `allow(message)`, todos los mensajes se unen con saltos de línea y se entregan juntos
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á invocando (p. ej. `"Bash"`, `"Write"`, `"Read"`) |
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>` | Payload completo del evento sin procesar, proveniente de Claude Code |
166
- | `session` | `SessionMetadata \| undefined` | Contexto de la sesión (ver más abajo) |
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 completa su ejecución | 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 devolver `allow()`, no pueden bloquear notificaciones |
183
- | `Stop` | Cuando la sesión de Claude finaliza | Vacío |
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 de convención del proyecto en `.failproofai/policies/` (archivos en orden alfabético, orden de `.add()` dentro de cada uno)
194
- 4. Políticas de convención del usuario en `~/.failproofai/policies/` (archivos en orden alfabético, orden de `.add()` dentro de cada uno)
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 políticas personalizadas pueden importar módulos locales usando rutas relativas:
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 termina
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 hacen fallar el manejador de hooks.
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 de convención y las integradas continúan con normalidad |
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 igualmente |
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 | Se registra el timeout; se trata como `allow` |
257
- | Directorio de convención faltante | No se ejecutan políticas de convención; sin error |
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 en políticas personalizadas, monitorea el archivo de log:
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
- // Evitar que el agente escriba en el directorio secrets/
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
- // Mantener al agente en curso: verificar tests antes de hacer commit
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
- // Prevenir cambios de dependencias no planificados durante el período de congelamiento
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 políticas listos para usar:
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 iniciales que cubren los modos de fallo más comunes del agente |
331
- | `examples/policies-advanced/index.js` | Patrones avanzados: importaciones transitivas, llamadas asíncronas, limpieza de salida y hooks al final de sesión |
332
- | `examples/convention-policies/security-policies.mjs` | Políticas de seguridad basadas en convenciones (bloquear escrituras en .env, prevenir la reescritura del historial de git) |
333
- | `examples/convention-policies/workflow-policies.mjs` | Políticas de flujo de trabajo basadas en convenciones (recordatorios de tests, auditoría de escrituras en archivos) |
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
- ### Uso de los ejemplos con archivo explícito
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
- ### Uso de los ejemplos basados en convenciones
341
+ ### Usar los ejemplos basados en convención
342
342
 
343
343
  ```bash
344
- # Copiar al nivel del proyecto
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 del usuario
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 escenarios comunes. Cada uno muestra cómo instalar y qué esperar.
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 activan en cada llamada a herramientas.
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 están registrados">
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 herramientas. Intenta pedirle a Claude que ejecute `sudo rm -rf /` — será bloqueado.
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 activan de la misma manera que en Claude Code — mediante JSON por stdin/stdout:
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 común: evitar que los agentes causen daños irreversibles.
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 esto:
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 la ejecución de scripts remotos canalizados a la shell
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 activan en `PostToolUse` — después de que se ejecuta una herramienta, limpian la salida antes de que el agente la vea.
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 el agente si Slack no está disponible
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
- ## Requerir pruebas antes de hacer commit
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
- ## Bloquear un repositorio de producción
209
+ ## Blindar un repositorio de producción
210
210
 
211
- Incluye una configuración a nivel de proyecto para que todos los desarrolladores de tu equipo compartan las mismas políticas.
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 adoptará estas reglas automáticamente.
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 canalizados |
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 en PostToolUse y manejo del evento Stop |
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 fiable"
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 solo necesario para compilar desde el código fuente)
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 una herramienta del agente. Detectan comandos destructivos, fugas de secretos y otros modos de fallo antes de que causen daño.
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 único proyecto o seleccionar políticas específicas:
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 activadas y los parámetros configurados.
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 hacer algo arriesgado, failproofai lo intercepta automáticamente. Déjalo correr sin supervisión y revisa lo ocurrido en el panel de control.
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 llama a failproofai como subproceso:
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** el agente continúa con normalidad
81
- - **deny** la acción es bloqueada y el agente recibe una explicación
82
- - **instruct** se añade contexto adicional al prompt del agente
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 ningún servicio remoto.
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 permanecen en tu máquina:
144
+ Toda la configuración y los registros se mantienen en tu máquina:
93
145
 
94
- | Ruta | Contenido |
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 (incluida en el repositorio) |
100
- | `.failproofai/policies-config.local.json` | Ajustes personales (excluidos con gitignore) |
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
- ## Desinstalación
156
+ ## Desinstalar
105
157
 
106
158
  ```bash
107
159
  failproofai policies --uninstall
108
160
  ```
109
161
 
110
- Elimina las entradas de hook de `~/.claude/settings.json`. Los archivos de configuración en `~/.failproofai/` se conservan.
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 disponibles con sus parámetros
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
- Supervisa sesiones y revisa la actividad de las políticas
183
+ Monitorea sesiones y revisa la actividad de las políticas
132
184
  </Card>
133
185
 
134
186
  </CardGroup>