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: "Escreva suas próprias políticas em JavaScript - aplique convenções, evite desvios, detecte falhas e integre com sistemas externos"
3
+ description: "Escreva suas próprias políticas em JavaScript aplique convenções, evite desvios, detecte falhas e integre com sistemas externos"
4
4
  icon: code
5
5
  ---
6
6
 
7
- As políticas personalizadas permitem que você escreva regras para qualquer comportamento do agente: aplicar convenções do projeto, evitar desvios, bloquear operações destrutivas, detectar agentes travados ou integrar com Slack, fluxos de aprovação e muito mais. Elas utilizam o mesmo sistema de eventos de hook e as decisões `allow`, `deny`, `instruct` das políticas integradas.
7
+ As políticas personalizadas permitem criar regras para qualquer comportamento do agente: aplicar convenções do projeto, evitar desvios, bloquear operações destrutivas, detectar agentes travados ou integrar com Slack, fluxos de aprovação e muito mais. Elas utilizam o mesmo sistema de eventos de hook e as mesmas decisões `allow`, `deny` e `instruct` das políticas integradas.
8
8
 
9
9
  ---
10
10
 
@@ -29,7 +29,7 @@ customPolicies.add({
29
29
  });
30
30
  ```
31
31
 
32
- Instale:
32
+ Instale com:
33
33
 
34
34
  ```bash
35
35
  failproofai policies --install --custom ./my-policies.js
@@ -41,44 +41,44 @@ failproofai policies --install --custom ./my-policies.js
41
41
 
42
42
  ### Opção 1: Baseada em convenção (recomendada)
43
43
 
44
- Coloque arquivos `*policies.{js,mjs,ts}` na pasta `.failproofai/policies/` e eles serão carregados automaticamente — sem flags ou alterações de configuração. Funciona como git hooks: basta adicionar o arquivo e pronto.
44
+ Coloque arquivos `*policies.{js,mjs,ts}` na pasta `.failproofai/policies/` e eles serão carregados automaticamente — sem flags ou alterações de configuração. Funciona como git hooks: adicione o arquivo e pronto.
45
45
 
46
46
  ```
47
- # Nível de projeto — versionado no git, compartilhado com a equipe
47
+ # Nível do projeto — commitado no git, compartilhado com o time
48
48
  .failproofai/policies/security-policies.mjs
49
49
  .failproofai/policies/workflow-policies.mjs
50
50
 
51
- # Nível de usuário — pessoal, aplicado a todos os projetos
51
+ # Nível do usuário — pessoal, aplicado a todos os projetos
52
52
  ~/.failproofai/policies/my-policies.mjs
53
53
  ```
54
54
 
55
55
  **Como funciona:**
56
- - Os diretórios de projeto e usuário são verificados (união — sem prioridade por escopo)
57
- - Os arquivos são carregados em ordem alfabética dentro de cada diretório. Use o prefixo `01-`, `02-` para controlar a ordem
58
- - Somente arquivos que correspondem a `*policies.{js,mjs,ts}` são carregados; outros arquivos são ignorados
56
+ - Tanto o diretório do projeto quanto o do usuário são verificados (união — sem prioridade por escopo)
57
+ - Os arquivos são carregados em ordem alfabética dentro de cada diretório. Use prefixos como `01-`, `02-` para controlar a ordem
58
+ - Apenas arquivos que correspondem ao padrão `*policies.{js,mjs,ts}` são carregados; os demais são ignorados
59
59
  - Cada arquivo é carregado de forma independente (fail-open por arquivo)
60
- - Funciona em conjunto com `--custom` explícito e políticas integradas
60
+ - Funciona junto com `--custom` explícito e políticas integradas
61
61
 
62
62
  <Tip>
63
- As políticas por convenção são a forma mais fácil de compartilhar políticas em uma equipe. Versione `.failproofai/policies/` no git e todos os membros da equipe receberão as políticas automaticamente.
63
+ As políticas por convenção são a forma mais fácil de estabelecer um padrão de qualidade para sua organização. Faça commit de `.failproofai/policies/` no git e todos os membros do time receberão as mesmas regras automaticamente — sem configuração individual. À medida que o time identifica novos modos de falha, adicione uma política e faça push. Com o tempo, elas se tornam um padrão de qualidade vivo que melhora a cada contribuição.
64
64
  </Tip>
65
65
 
66
66
  ### Opção 2: Caminho de arquivo explícito
67
67
 
68
68
  ```bash
69
- # Instalar com um arquivo de políticas personalizadas
69
+ # Instalar com um arquivo de políticas personalizado
70
70
  failproofai policies --install --custom ./my-policies.js
71
71
 
72
72
  # Substituir o caminho do arquivo de políticas
73
73
  failproofai policies --install --custom ./new-policies.js
74
74
 
75
- # Remover o caminho de políticas personalizadas da configuração
75
+ # Remover o caminho de políticas personalizado da configuração
76
76
  failproofai policies --uninstall --custom
77
77
  ```
78
78
 
79
79
  O caminho absoluto resolvido é armazenado em `policies-config.json` como `customPoliciesPath`. O arquivo é carregado novamente a cada evento de hook — não há cache entre eventos.
80
80
 
81
- ### Usando ambas juntas
81
+ ### Usando os dois juntos
82
82
 
83
83
  As políticas por convenção e o arquivo `--custom` explícito podem coexistir. Ordem de carregamento:
84
84
 
@@ -104,7 +104,7 @@ Registra uma política. Chame quantas vezes forem necessárias para múltiplas p
104
104
  customPolicies.add({
105
105
  name: string; // obrigatório - identificador único
106
106
  description?: string; // exibido na saída de `failproofai policies`
107
- match?: { events?: HookEventType[] }; // filtra por tipo de evento; omitir para corresponder a todos
107
+ match?: { events?: HookEventType[] }; // filtra por tipo de evento; omita para corresponder a todos
108
108
  fn: (ctx: PolicyContext) => PolicyResult | Promise<PolicyResult>;
109
109
  });
110
110
  ```
@@ -113,30 +113,30 @@ customPolicies.add({
113
113
 
114
114
  | Função | Efeito | Quando usar |
115
115
  |----------|--------|----------|
116
- | `allow()` | Permite a operação silenciosamente | A ação é segura, sem mensagem necessária |
116
+ | `allow()` | Permite a operação silenciosamente | A ação é segura e não precisa de mensagem |
117
117
  | `deny(message)` | Bloqueia a operação | O agente não deve executar esta ação |
118
118
  | `instruct(message)` | Adiciona contexto sem bloquear | Fornece contexto adicional ao agente para mantê-lo no caminho certo |
119
119
 
120
- `deny(message)` — a mensagem aparece para Claude com o prefixo `"Blocked by failproofai:"`. Um único `deny` interrompe toda avaliação subsequente.
120
+ `deny(message)` — a mensagem é exibida para o Claude com o prefixo `"Blocked by failproofai:"`. Um único `deny` interrompe toda avaliação subsequente.
121
121
 
122
- `instruct(message)` — a mensagem é anexada ao contexto do Claude para a chamada de ferramenta atual. Todas as mensagens `instruct` são acumuladas e entregues juntas.
122
+ `instruct(message)` — a mensagem é adicionada ao contexto do Claude para a chamada de ferramenta atual. Todas as mensagens `instruct` são acumuladas e entregues juntas.
123
123
 
124
124
  <Tip>
125
- Você pode adicionar orientações extras a qualquer mensagem `deny` ou `instruct` incluindo um campo `hint` em `policyParams` — sem necessidade de alteração no código. Isso também funciona para políticas personalizadas (`custom/`), de convenção de projeto (`.failproofai-project/`) e de convenção de usuário (`.failproofai-user/`). Consulte [Configuração → hint](/pt-br/configuration#hint-cross-cutting) para mais detalhes.
125
+ Você pode adicionar orientações extras a qualquer mensagem `deny` ou `instruct` incluindo um campo `hint` em `policyParams` — sem necessidade de alterar o código. Isso funciona também para políticas personalizadas (`custom/`), por convenção do projeto (`.failproofai-project/`) e por convenção do usuário (`.failproofai-user/`). Consulte [Configuração → hint](/pt-br/configuration#hint-cross-cutting) para mais detalhes.
126
126
  </Tip>
127
127
 
128
128
  ### Mensagens informativas de allow
129
129
 
130
- `allow(message)` permite a operação **e** envia uma mensagem informativa para Claude. A mensagem é entregue como `additionalContext` na resposta stdout do handler de hook — o mesmo mecanismo usado por `instruct`, mas semanticamente diferente: é uma atualização de status, não um aviso.
130
+ `allow(message)` permite a operação **e** envia uma mensagem informativa de volta ao Claude. A mensagem é entregue como `additionalContext` na resposta stdout do handler de hook — o mesmo mecanismo usado por `instruct`, mas semanticamente diferente: é uma atualização de status, não um aviso.
131
131
 
132
132
  | Função | Efeito | Quando usar |
133
133
  |----------|--------|----------|
134
- | `allow(message)` | Permite e envia contexto para Claude | Confirma que uma verificação passou ou explica por que foi ignorada |
134
+ | `allow(message)` | Permite e envia contexto ao Claude | Confirmar que uma verificação passou, ou explicar por que foi ignorada |
135
135
 
136
136
  Casos de uso:
137
- - **Confirmações de status:** `allow("All CI checks passed.")` — informa ao Claude que tudo está ok
138
- - **Explicações de fail-open:** `allow("GitHub CLI not installed, skipping CI check.")` — informa ao Claude por que uma verificação foi ignorada para que ele tenha contexto completo
139
- - **Múltiplas mensagens se acumulam:** se várias políticas retornarem `allow(message)`, todas as mensagens são unidas com quebras de linha e entregues juntas
137
+ - **Confirmações de status:** `allow("All CI checks passed.")` — informa ao Claude que tudo está em ordem
138
+ - **Explicações de fail-open:** `allow("GitHub CLI not installed, skipping CI check.")` — informa ao Claude por que uma verificação foi ignorada, garantindo contexto completo
139
+ - **Múltiplas mensagens são acumuladas:** se várias políticas retornarem `allow(message)`, todas as mensagens são unidas com quebras de linha e entregues juntas
140
140
 
141
141
  ```js
142
142
  customPolicies.add({
@@ -146,7 +146,7 @@ customPolicies.add({
146
146
  const cwd = ctx.session?.cwd;
147
147
  if (!cwd) return allow("No working directory, skipping branch check.");
148
148
 
149
- // ... verificar status do branch ...
149
+ // ... check branch status ...
150
150
  if (allPushed) {
151
151
  return allow("Branch is up to date with remote.");
152
152
  }
@@ -160,27 +160,27 @@ customPolicies.add({
160
160
  | Campo | Tipo | Descrição |
161
161
  |-------|------|-------------|
162
162
  | `eventType` | `string` | `"PreToolUse"`, `"PostToolUse"`, `"Notification"`, `"Stop"` |
163
- | `toolName` | `string \| undefined` | A ferramenta sendo chamada (ex: `"Bash"`, `"Write"`, `"Read"`) |
163
+ | `toolName` | `string \| undefined` | A ferramenta sendo chamada (ex.: `"Bash"`, `"Write"`, `"Read"`) |
164
164
  | `toolInput` | `Record<string, unknown> \| undefined` | Os parâmetros de entrada da ferramenta |
165
- | `payload` | `Record<string, unknown>` | Payload completo do evento bruto do Claude Code |
165
+ | `payload` | `Record<string, unknown>` | Payload bruto completo do evento do Claude Code |
166
166
  | `session` | `SessionMetadata \| undefined` | Contexto da sessão (veja abaixo) |
167
167
 
168
168
  ### Campos de `SessionMetadata`
169
169
 
170
170
  | Campo | Tipo | Descrição |
171
171
  |-------|------|-------------|
172
- | `sessionId` | `string` | Identificador de sessão do Claude Code |
172
+ | `sessionId` | `string` | Identificador da sessão do Claude Code |
173
173
  | `cwd` | `string` | Diretório de trabalho da sessão do Claude Code |
174
174
  | `transcriptPath` | `string` | Caminho para o arquivo de transcrição JSONL da sessão |
175
175
 
176
176
  ### Tipos de evento
177
177
 
178
- | Evento | Quando dispara | Conteúdo de `toolInput` |
178
+ | Evento | Quando é disparado | Conteúdo de `toolInput` |
179
179
  |-------|--------------|----------------------|
180
- | `PreToolUse` | Antes de Claude executar uma ferramenta | A entrada da ferramenta (ex: `{ command: "..." }` para Bash) |
181
- | `PostToolUse` | Após uma ferramenta ser concluída | A entrada da ferramenta + `tool_result` (a saída) |
182
- | `Notification` | Quando Claude envia uma notificação | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` - hooks devem sempre retornar `allow()`, não podem bloquear notificações |
183
- | `Stop` | Quando a sessão Claude encerra | Vazio |
180
+ | `PreToolUse` | Antes do Claude executar uma ferramenta | A entrada da ferramenta (ex.: `{ command: "..." }` para Bash) |
181
+ | `PostToolUse` | Após a conclusão de uma ferramenta | A entrada da ferramenta + `tool_result` (a saída) |
182
+ | `Notification` | Quando o Claude envia uma notificação | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` hooks sempre devem retornar `allow()`, não podem bloquear notificações |
183
+ | `Stop` | Quando a sessão do Claude é encerrada | Vazio |
184
184
 
185
185
  ---
186
186
 
@@ -190,8 +190,8 @@ As políticas são avaliadas nesta ordem:
190
190
 
191
191
  1. Políticas integradas (na ordem de definição)
192
192
  2. Políticas personalizadas explícitas de `customPoliciesPath` (na ordem de `.add()`)
193
- 3. Políticas de convenção do projeto em `.failproofai/policies/` (arquivos em ordem alfabética, ordem de `.add()` dentro de cada arquivo)
194
- 4. Políticas de convenção do usuário em `~/.failproofai/policies/` (arquivos em ordem alfabética, ordem de `.add()` dentro de cada arquivo)
193
+ 3. Políticas por convenção do projeto em `.failproofai/policies/` (arquivos em ordem alfabética, ordem de `.add()` dentro de cada arquivo)
194
+ 4. Políticas por convenção do usuário em `~/.failproofai/policies/` (arquivos em ordem alfabética, ordem de `.add()` dentro de cada arquivo)
195
195
 
196
196
  <Note>
197
197
  O primeiro `deny` interrompe todas as políticas subsequentes. Todas as mensagens `instruct` são acumuladas e entregues juntas.
@@ -201,7 +201,7 @@ O primeiro `deny` interrompe todas as políticas subsequentes. Todas as mensagen
201
201
 
202
202
  ## Importações transitivas
203
203
 
204
- Arquivos de políticas personalizadas podem importar módulos locais usando caminhos relativos:
204
+ Arquivos de política personalizados podem importar módulos locais usando caminhos relativos:
205
205
 
206
206
  ```js
207
207
  // my-policies.js
@@ -218,46 +218,46 @@ customPolicies.add({
218
218
  });
219
219
  ```
220
220
 
221
- Todas as importações relativas acessíveis a partir do arquivo de entrada são resolvidas. Isso é implementado reescrevendo as importações `from "failproofai"` para o caminho real em dist e criando arquivos `.mjs` temporários para garantir compatibilidade com ESM.
221
+ Todas as importações relativas acessíveis a partir do arquivo de entrada são resolvidas. Isso é implementado reescrevendo as importações `from "failproofai"` para o caminho real de dist e criando arquivos `.mjs` temporários para garantir compatibilidade com ESM.
222
222
 
223
223
  ---
224
224
 
225
225
  ## Filtragem por tipo de evento
226
226
 
227
- Use `match.events` para limitar quando uma política é disparada:
227
+ Use `match.events` para limitar quando uma política é acionada:
228
228
 
229
229
  ```js
230
230
  customPolicies.add({
231
231
  name: "require-summary-on-stop",
232
232
  match: { events: ["Stop"] },
233
233
  fn: async (ctx) => {
234
- // Só dispara quando a sessão encerra
234
+ // Só é acionado quando a sessão é encerrada
235
235
  // ctx.session.transcriptPath contém o log completo da sessão
236
236
  return allow();
237
237
  },
238
238
  });
239
239
  ```
240
240
 
241
- Omita `match` completamente para disparar em todos os tipos de evento.
241
+ Omita `match` completamente para acionar em todos os tipos de evento.
242
242
 
243
243
  ---
244
244
 
245
245
  ## Tratamento de erros e modos de falha
246
246
 
247
- Políticas personalizadas são **fail-open**: erros nunca bloqueiam políticas integradas nem derrubam o handler de hook.
247
+ As políticas personalizadas são **fail-open**: erros nunca bloqueiam as políticas integradas nem causam falha no handler de hook.
248
248
 
249
249
  | Falha | Comportamento |
250
250
  |---------|----------|
251
251
  | `customPoliciesPath` não configurado | Nenhuma política personalizada explícita é executada; políticas por convenção e integradas continuam normalmente |
252
- | Arquivo não encontrado | Aviso registrado em `~/.failproofai/hook.log`; integradas continuam |
253
- | Erro de sintaxe/importação (explícito) | Erro registrado em `~/.failproofai/hook.log`; políticas personalizadas explícitas ignoradas |
254
- | Erro de sintaxe/importação (convenção) | Erro registrado; aquele arquivo é ignorado, outros arquivos de convenção continuam carregando |
255
- | `fn` lança exceção em tempo de execução | Erro registrado; aquele hook é tratado como `allow`; outros hooks continuam |
252
+ | Arquivo não encontrado | Aviso registrado em `~/.failproofai/hook.log`; políticas integradas continuam |
253
+ | Erro de sintaxe/importação (explícito) | Erro registrado em `~/.failproofai/hook.log`; políticas personalizadas explícitas são ignoradas |
254
+ | Erro de sintaxe/importação (convenção) | Erro registrado; aquele arquivo é ignorado, os demais arquivos de convenção continuam carregando |
255
+ | `fn` lança erro em tempo de execução | Erro registrado; aquele hook é tratado como `allow`; os demais hooks continuam |
256
256
  | `fn` demora mais de 10s | Timeout registrado; tratado como `allow` |
257
- | Diretório de convenção ausente | Nenhuma política de convenção é executada; sem erro |
257
+ | Diretório de convenção ausente | Nenhuma política por convenção é executada; sem erro |
258
258
 
259
259
  <Tip>
260
- Para depurar erros em políticas personalizadas, acompanhe o arquivo de log:
260
+ Para depurar erros em políticas personalizadas, monitore o arquivo de log:
261
261
 
262
262
  ```bash
263
263
  tail -f ~/.failproofai/hook.log
@@ -285,7 +285,7 @@ customPolicies.add({
285
285
  },
286
286
  });
287
287
 
288
- // Mantém o agente no caminho certo: verificar testes antes de fazer commit
288
+ // Mantém o agente no caminho certo: verifica testes antes de commitar
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
- // Evita mudanças de dependências não planejadas durante o período de freeze
303
+ // Impede mudanças de dependências não planejadas durante o período de freeze
304
304
  customPolicies.add({
305
305
  name: "dependency-freeze",
306
306
  description: "Prevent unplanned dependency changes during freeze period",
@@ -323,14 +323,14 @@ export { customPolicies };
323
323
 
324
324
  ## Exemplos
325
325
 
326
- O diretório `examples/` contém arquivos de políticas prontos para uso:
326
+ O diretório `examples/` contém arquivos de política prontos para uso:
327
327
 
328
328
  | Arquivo | Conteúdo |
329
329
  |------|----------|
330
- | `examples/policies-basic.js` | Cinco políticas iniciais cobrindo modos comuns de falha de agentes |
331
- | `examples/policies-advanced/index.js` | Padrões avançados: importações transitivas, chamadas assíncronas, sanitização de saída e hooks de fim de sessão |
332
- | `examples/convention-policies/security-policies.mjs` | Políticas de segurança baseadas em convenção (bloquear escritas em .env, evitar reescrita de histórico git) |
333
- | `examples/convention-policies/workflow-policies.mjs` | Políticas de fluxo de trabalho baseadas em convenção (lembretes de teste, auditoria de escritas em arquivos) |
330
+ | `examples/policies-basic.js` | Cinco políticas iniciais cobrindo modos de falha comuns de agentes |
331
+ | `examples/policies-advanced/index.js` | Padrões avançados: importações transitivas, chamadas assíncronas, limpeza de saída e hooks de encerramento de sessão |
332
+ | `examples/convention-policies/security-policies.mjs` | Políticas de segurança baseadas em convenção (bloquear escritas em .env, impedir reescrita do histórico git) |
333
+ | `examples/convention-policies/workflow-policies.mjs` | Políticas de fluxo de trabalho baseadas em convenção (lembretes de teste, auditoria de escritas em arquivo) |
334
334
 
335
335
  ### Usando exemplos com arquivo explícito
336
336
 
@@ -341,11 +341,11 @@ failproofai policies --install --custom ./examples/policies-basic.js
341
341
  ### Usando exemplos baseados em convenção
342
342
 
343
343
  ```bash
344
- # Copiar para o nível de projeto
344
+ # Copiar para o nível do projeto
345
345
  mkdir -p .failproofai/policies
346
346
  cp examples/convention-policies/*.mjs .failproofai/policies/
347
347
 
348
- # Ou copiar para o nível de usuário
348
+ # Ou copiar para o nível do usuário
349
349
  mkdir -p ~/.failproofai/policies
350
350
  cp examples/convention-policies/*.mjs ~/.failproofai/policies/
351
351
  ```
@@ -8,34 +8,34 @@ Exemplos prontos para uso em cenários comuns. Cada um mostra como instalar e o
8
8
 
9
9
  ---
10
10
 
11
- ## Configurando hooks para o Claude Code
11
+ ## Configurando hooks para Claude Code
12
12
 
13
- O Failproof AI se integra ao Claude Code por meio do seu [sistema de hooks](https://docs.anthropic.com/en/docs/claude-code/hooks). Quando você executa `failproofai policies --install`, ele registra comandos de hook no `settings.json` do Claude Code que são acionados em cada chamada de ferramenta.
13
+ O Failproof AI se integra ao Claude Code por meio do seu [sistema de hooks](https://docs.anthropic.com/en/docs/claude-code/hooks). Quando você executa `failproofai policies --install`, ele registra comandos de hook no `settings.json` do Claude Code, que são acionados a cada chamada de ferramenta.
14
14
 
15
15
  <Steps>
16
- <Step title="Instale o failproofai">
16
+ <Step title="Instalar o failproofai">
17
17
  ```bash
18
18
  npm install -g failproofai
19
19
  ```
20
20
  </Step>
21
- <Step title="Ative todas as políticas integradas">
21
+ <Step title="Habilitar todas as políticas integradas">
22
22
  ```bash
23
23
  failproofai policies --install
24
24
  ```
25
25
  </Step>
26
- <Step title="Verifique se os hooks foram registrados">
26
+ <Step title="Verificar se os hooks foram registrados">
27
27
  ```bash
28
28
  cat ~/.claude/settings.json | grep failproofai
29
29
  ```
30
30
 
31
- Você deverá ver entradas de hook para os eventos `PreToolUse`, `PostToolUse`, `Notification` e `Stop`.
31
+ Você deve ver entradas de hook para os eventos `PreToolUse`, `PostToolUse`, `Notification` e `Stop`.
32
32
  </Step>
33
- <Step title="Execute o Claude Code">
33
+ <Step title="Executar o Claude Code">
34
34
  ```bash
35
35
  claude
36
36
  ```
37
37
 
38
- As políticas agora são executadas automaticamente em cada chamada de ferramenta. Tente pedir ao Claude para executar `sudo rm -rf /` — o comando será bloqueado.
38
+ As políticas agora são executadas automaticamente a cada chamada de ferramenta. Tente pedir ao Claude para executar `sudo rm -rf /` — o comando será bloqueado.
39
39
  </Step>
40
40
  </Steps>
41
41
 
@@ -46,26 +46,26 @@ O Failproof AI se integra ao Claude Code por meio do seu [sistema de hooks](http
46
46
  Se você está desenvolvendo com o [Agents SDK](https://docs.anthropic.com/en/docs/agents-sdk), pode usar o mesmo sistema de hooks de forma programática.
47
47
 
48
48
  <Steps>
49
- <Step title="Instale o failproofai no seu projeto">
49
+ <Step title="Instalar o failproofai no seu projeto">
50
50
  ```bash
51
51
  npm install failproofai
52
52
  ```
53
53
  </Step>
54
- <Step title="Configure os hooks no seu agente">
55
- Passe os comandos de hook ao criar o processo do seu agente. Os hooks são acionados da mesma forma que no Claude Code — via stdin/stdout JSON:
54
+ <Step title="Configurar hooks no seu agente">
55
+ Passe comandos de hook ao criar o processo do seu agente. Os hooks são acionados da mesma forma que no Claude Code — via stdin/stdout JSON:
56
56
 
57
57
  ```bash
58
58
  failproofai --hook PreToolUse # chamado antes de cada ferramenta
59
59
  failproofai --hook PostToolUse # chamado após cada ferramenta
60
60
  ```
61
61
  </Step>
62
- <Step title="Escreva uma política personalizada para seu agente">
62
+ <Step title="Escrever uma política personalizada para seu agente">
63
63
  ```javascript
64
64
  import { customPolicies, allow, deny } from "failproofai";
65
65
 
66
66
  customPolicies.add({
67
67
  name: "limit-to-project-dir",
68
- description: "Keep the agent inside the project directory",
68
+ description: "Mantém o agente dentro do diretório do projeto",
69
69
  match: { events: ["PreToolUse"] },
70
70
  fn: async (ctx) => {
71
71
  const path = String(ctx.toolInput?.file_path ?? "");
@@ -77,7 +77,7 @@ Se você está desenvolvendo com o [Agents SDK](https://docs.anthropic.com/en/do
77
77
  });
78
78
  ```
79
79
  </Step>
80
- <Step title="Instale a política personalizada">
80
+ <Step title="Instalar a política personalizada">
81
81
  ```bash
82
82
  failproofai policies --install --custom ./my-agent-policies.js
83
83
  ```
@@ -123,7 +123,7 @@ import { customPolicies, allow, instruct } from "failproofai";
123
123
 
124
124
  customPolicies.add({
125
125
  name: "slack-on-idle",
126
- description: "Alert Slack when the agent is waiting for input",
126
+ description: "Alerta o Slack quando o agente está aguardando entrada",
127
127
  match: { events: ["Notification"] },
128
128
  fn: async (ctx) => {
129
129
  const webhookUrl = process.env.SLACK_WEBHOOK_URL;
@@ -150,7 +150,7 @@ customPolicies.add({
150
150
  });
151
151
  ```
152
152
 
153
- Instale assim:
153
+ Instale:
154
154
 
155
155
  ```bash
156
156
  SLACK_WEBHOOK_URL=https://hooks.slack.com/... failproofai policies --install --custom ./slack-alerts.js
@@ -167,7 +167,7 @@ import { customPolicies, allow, deny } from "failproofai";
167
167
 
168
168
  customPolicies.add({
169
169
  name: "stay-on-branch",
170
- description: "Prevent the agent from checking out other branches",
170
+ description: "Impede o agente de fazer checkout em outras branches",
171
171
  match: { events: ["PreToolUse"] },
172
172
  fn: async (ctx) => {
173
173
  if (ctx.toolName !== "Bash") return allow();
@@ -184,14 +184,14 @@ customPolicies.add({
184
184
 
185
185
  ## Exigir testes antes de commits
186
186
 
187
- Lembra os agentes de executar os testes antes de fazer commit.
187
+ Lembra os agentes de executar testes antes de fazer commit.
188
188
 
189
189
  ```javascript
190
190
  import { customPolicies, allow, instruct } from "failproofai";
191
191
 
192
192
  customPolicies.add({
193
193
  name: "test-before-commit",
194
- description: "Remind the agent to run tests before committing",
194
+ description: "Lembra o agente de executar testes antes de fazer commit",
195
195
  match: { events: ["PreToolUse"] },
196
196
  fn: async (ctx) => {
197
197
  if (ctx.toolName !== "Bash") return allow();
@@ -206,11 +206,11 @@ customPolicies.add({
206
206
 
207
207
  ---
208
208
 
209
- ## Proteger um repositório de produção
209
+ ## Bloquear um repositório de produção
210
210
 
211
- Faça commit de uma configuração no nível do projeto para que todos os desenvolvedores do seu time usem as mesmas políticas.
211
+ Faça commit de uma configuração no nível do projeto para que todos os desenvolvedores da sua equipe utilizem as mesmas políticas.
212
212
 
213
- Crie o arquivo `.failproofai/policies-config.json` no seu repositório:
213
+ Crie `.failproofai/policies-config.json` no seu repositório:
214
214
 
215
215
  ```json
216
216
  {
@@ -238,7 +238,61 @@ git add .failproofai/policies-config.json
238
238
  git commit -m "Add failproofai team policies"
239
239
  ```
240
240
 
241
- Todos os membros do time que tiverem o failproofai instalado irão automaticamente receber essas regras.
241
+ Todo membro da equipe que tiver o failproofai instalado receberá essas regras automaticamente.
242
+
243
+ ---
244
+
245
+ ## Construir um padrão de qualidade organizacional com políticas de convenção
246
+
247
+ A configuração de maior impacto: faça commit de `.failproofai/policies/` no seu repositório com políticas adaptadas ao seu projeto. Todos os membros da equipe as recebem automaticamente — sem comandos de instalação, sem alterações de configuração.
248
+
249
+ <Steps>
250
+ <Step title="Criar o diretório e adicionar 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
+ // Enforce your team's preferred package manager
260
+ // (or enable the built-in prefer-package-manager policy instead)
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
+ // Remind the agent to run tests before committing
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="Fazer commit no git">
287
+ ```bash
288
+ git add .failproofai/policies/
289
+ git commit -m "Add team quality policies"
290
+ ```
291
+ </Step>
292
+ <Step title="Continue melhorando">
293
+ À medida que sua equipe encontra novos problemas, adicione políticas e faça push. Todos recebem a atualização no próximo `git pull`. Essas políticas se tornam um padrão de qualidade vivo que cresce junto com a sua equipe.
294
+ </Step>
295
+ </Steps>
242
296
 
243
297
  ---
244
298
 
@@ -248,6 +302,6 @@ O diretório [`examples/`](https://github.com/exospherehost/failproofai/tree/mai
248
302
 
249
303
  | Arquivo | O que demonstra |
250
304
  |---------|-----------------|
251
- | `policies-basic.js` | Políticas iniciais — bloqueia escritas em produção, force-push e scripts redirecionados |
305
+ | `policies-basic.js` | Políticas iniciais — bloquear escrita em produção, force-push e scripts redirecionados |
252
306
  | `policies-notification.js` | Alertas no Slack para notificações de inatividade e encerramento de sessão |
253
307
  | `policies-advanced/index.js` | Importações transitivas, hooks assíncronos, limpeza de saída no PostToolUse e tratamento do evento Stop |
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  title: Primeiros passos
3
- description: "Instale o failproofai, ative as políticas e deixe seus agentes rodando com confiabilidade"
3
+ description: "Instale o failproofai, ative as políticas e deixe seus agentes rodarem de forma confiável"
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 necessário apenas para compilar a partir do código-fonte)
10
+ - **Bun** >= 1.3.0 (opcional - necessário apenas para compilar a partir do código-fonte)
11
11
 
12
12
  ---
13
13
 
@@ -31,13 +31,13 @@ bun add -g failproofai
31
31
 
32
32
  <Steps>
33
33
  <Step title="Ativar políticas">
34
- Políticas são regras executadas antes e depois de cada chamada de ferramenta do agente. Elas interceptam comandos destrutivos, vazamento de segredos e outros modos de falha antes que causem danos.
34
+ Políticas são regras que executam antes e depois de cada chamada de ferramenta do agente. Elas interceptam comandos destrutivos, vazamento de segredos e outros modos de falha antes que causem danos.
35
35
 
36
36
  ```bash
37
37
  failproofai policies --install
38
38
  ```
39
39
 
40
- Isso grava entradas de hook no `settings.json` do Claude Code. Você também pode instalar para um único projeto ou escolher políticas específicas:
40
+ Isso insere entradas de hook no `settings.json` do Claude Code. Você também pode instalar para um único projeto ou escolher políticas específicas:
41
41
 
42
42
  ```bash
43
43
  failproofai policies --install --scope project
@@ -59,7 +59,7 @@ bun add -g failproofai
59
59
  Abre um painel local em `http://localhost:8020` onde você pode navegar por sessões, inspecionar chamadas de ferramentas e gerenciar políticas.
60
60
  </Step>
61
61
  <Step title="Executar seu agente">
62
- Inicie o Claude Code normalmente. Se o agente tentar algo arriscado, o failproofai o intercepta automaticamente. Deixe-o rodando sem supervisão e revise o que aconteceu no painel.
62
+ Inicie o Claude Code normalmente. Se o agente tentar algo arriscado, o failproofai intercepta automaticamente. Deixe-o rodando sem supervisão e revise o que aconteceu no painel.
63
63
  </Step>
64
64
  </Steps>
65
65
 
@@ -75,27 +75,79 @@ Claude Code → failproofai --hook PreToolUse → reads stdin JSON
75
75
  writes decision to stdout
76
76
  ```
77
77
 
78
- Cada política retorna uma das três decisões:
78
+ Cada política retorna uma de três decisões:
79
79
 
80
- - **allow** o agente continua normalmente
81
- - **deny** a ação é bloqueada e o agente recebe uma explicação do motivo
82
- - **instruct** contexto adicional é inserido no prompt do agente
80
+ - **allow** - o agente prossegue normalmente
81
+ - **deny** - a ação é bloqueada e o agente é informado do motivo
82
+ - **instruct** - contexto adicional é inserido no prompt do agente
83
83
 
84
84
  <Note>
85
- As políticas são executadas no seu processo local. Nenhuma informação é enviada para um serviço remoto.
85
+ As políticas são executadas no seu processo local. Nada é enviado a um serviço remoto.
86
86
  </Note>
87
87
 
88
88
  ---
89
89
 
90
+ ## Configure políticas de equipe com políticas baseadas em convenção
91
+
92
+ A forma mais rápida de estabelecer padrões de qualidade em toda a sua equipe é a convenção `.failproofai/policies/`. Basta colocar arquivos de política nesse diretório e eles são carregados automaticamente — sem flags, sem alterações de configuração, sem comandos de instalação.
93
+
94
+ <Steps>
95
+ <Step title="Criar o diretório de políticas">
96
+ ```bash
97
+ mkdir -p .failproofai/policies
98
+ ```
99
+ </Step>
100
+ <Step title="Adicionar arquivos de política">
101
+ Copie os exemplos iniciais ou escreva os seus próprios:
102
+
103
+ ```bash
104
+ cp node_modules/failproofai/examples/convention-policies/*.mjs .failproofai/policies/
105
+ ```
106
+
107
+ Ou crie um novo:
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="Enviar para o git">
127
+ ```bash
128
+ git add .failproofai/policies/
129
+ git commit -m "Add team quality policies"
130
+ ```
131
+
132
+ Todo membro da equipe que tiver o failproofai instalado receberá essas políticas automaticamente. Sem necessidade de configuração individual por desenvolvedor.
133
+ </Step>
134
+ </Steps>
135
+
136
+ <Tip>
137
+ Faça commit de `.failproofai/policies/` no seu repositório para que toda a equipe compartilhe os mesmos padrões. À medida que sua equipe descobre novos modos de falha, adicione políticas e faça push — todos recebem a atualização no próximo `git pull`. Com o tempo, essas políticas se tornam um padrão de qualidade vivo que continua melhorando.
138
+ </Tip>
139
+
140
+ ---
141
+
90
142
  ## Armazenamento de dados
91
143
 
92
- Todas as configurações e logs ficam na sua máquina:
144
+ Todas as configurações e logs permanecem na sua máquina:
93
145
 
94
146
  | Caminho | O que armazena |
95
147
  |---------|----------------|
96
148
  | `~/.failproofai/policies-config.json` | Configuração global de políticas |
97
149
  | `~/.failproofai/hook-activity.jsonl` | Histórico de execução de hooks |
98
- | `~/.failproofai/hook.log` | Log de depuração para erros em hooks personalizados |
150
+ | `~/.failproofai/hook.log` | Log de depuração para erros de hooks personalizados |
99
151
  | `.failproofai/policies-config.json` | Configuração por projeto (versionada) |
100
152
  | `.failproofai/policies-config.local.json` | Substituições pessoais (ignoradas pelo git) |
101
153