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: Politiques personnalisées
3
- description: "Écrivez vos propres politiques en JavaScript — appliquez des conventions, prévenez la dérive, détectez les défaillances, intégrez des systèmes externes"
3
+ description: "Rédigez vos propres politiques en JavaScript — appliquez des conventions de projet, évitez la dérive, détectez les échecs, intégrez des systèmes externes"
4
4
  icon: code
5
5
  ---
6
6
 
7
- Les politiques personnalisées vous permettent d'écrire des règles pour n'importe quel comportement d'agent : appliquer des conventions de projet, prévenir la dérive, bloquer les opérations destructives, détecter les agents bloqués, ou s'intégrer avec Slack, des workflows d'approbation, et bien plus. Elles utilisent le même système d'événements de hook et les mêmes décisions `allow`, `deny`, `instruct` que les politiques intégrées.
7
+ Les politiques personnalisées vous permettent d'écrire des règles pour n'importe quel comportement d'agent : appliquer des conventions de projet, prévenir la dérive, contrôler les opérations destructrices, détecter les agents bloqués, ou s'intégrer avec Slack, des workflows d'approbation, et plus encore. Elles utilisent le même système d'événements hook et les mêmes décisions `allow`, `deny`, `instruct` que les politiques intégrées.
8
8
 
9
9
  ---
10
10
 
@@ -29,7 +29,7 @@ customPolicies.add({
29
29
  });
30
30
  ```
31
31
 
32
- Installation :
32
+ Installez-le :
33
33
 
34
34
  ```bash
35
35
  failproofai policies --install --custom ./my-policies.js
@@ -39,12 +39,12 @@ failproofai policies --install --custom ./my-policies.js
39
39
 
40
40
  ## Deux façons de charger des politiques personnalisées
41
41
 
42
- ### Option 1 : Basée sur les conventions (recommandée)
42
+ ### Option 1 : Par convention (recommandé)
43
43
 
44
- Déposez des fichiers `*policies.{js,mjs,ts}` dans `.failproofai/policies/` et ils sont automatiquement chargés aucun indicateur ni modification de configuration nécessaire. Cela fonctionne comme les hooks git : déposez un fichier, et c'est tout.
44
+ Déposez des fichiers `*policies.{js,mjs,ts}` dans `.failproofai/policies/` et ils sont chargés automatiquement — sans indicateurs ni modifications de configuration. Cela fonctionne comme les hooks git : déposez un fichier, ça fonctionne.
45
45
 
46
46
  ```
47
- # Niveau projet — validé dans git, partagé avec l'équipe
47
+ # Niveau projet — commité dans git, partagé avec l'équipe
48
48
  .failproofai/policies/security-policies.mjs
49
49
  .failproofai/policies/workflow-policies.mjs
50
50
 
@@ -52,15 +52,15 @@ Déposez des fichiers `*policies.{js,mjs,ts}` dans `.failproofai/policies/` et i
52
52
  ~/.failproofai/policies/my-policies.mjs
53
53
  ```
54
54
 
55
- **Fonctionnement :**
56
- - Les répertoires du projet et de l'utilisateur sont tous deux analysés (union — pas de priorité au premier scope)
55
+ **Comment ça fonctionne :**
56
+ - Les répertoires projet et utilisateur sont tous deux analysés (union — pas de priorité par périmètre)
57
57
  - Les fichiers sont chargés par ordre alphabétique dans chaque répertoire. Préfixez avec `01-`, `02-` pour contrôler l'ordre
58
58
  - Seuls les fichiers correspondant à `*policies.{js,mjs,ts}` sont chargés ; les autres fichiers sont ignorés
59
59
  - Chaque fichier est chargé indépendamment (fail-open par fichier)
60
- - Fonctionne conjointement avec les politiques `--custom` explicites et les politiques intégrées
60
+ - Fonctionne avec les politiques `--custom` explicites et les politiques intégrées
61
61
 
62
62
  <Tip>
63
- Les politiques par convention sont le moyen le plus simple de partager des politiques au sein d'une équipe. Validez `.failproofai/policies/` dans git et chaque membre de l'équipe les obtient automatiquement.
63
+ Les politiques par convention sont le moyen le plus simple de définir un standard de qualité pour votre organisation. Commitez `.failproofai/policies/` dans git et chaque membre de l'équipe obtient les mêmes règles automatiquement — aucune configuration individuelle requise. Au fil des découvertes de nouveaux modes d'échec, ajoutez une politique et poussez. Ces politiques deviennent avec le temps un standard de qualité vivant qui s'améliore à chaque contribution.
64
64
  </Tip>
65
65
 
66
66
  ### Option 2 : Chemin de fichier explicite
@@ -72,11 +72,11 @@ failproofai policies --install --custom ./my-policies.js
72
72
  # Remplacer le chemin du fichier de politiques
73
73
  failproofai policies --install --custom ./new-policies.js
74
74
 
75
- # Supprimer le chemin de politiques personnalisées de la configuration
75
+ # Supprimer le chemin des politiques personnalisées de la configuration
76
76
  failproofai policies --uninstall --custom
77
77
  ```
78
78
 
79
- Le chemin absolu résolu est stocké dans `policies-config.json` sous `customPoliciesPath`. Le fichier est chargé à nouveau à chaque événement de hook — il n'y a pas de mise en cache entre les événements.
79
+ Le chemin absolu résolu est stocké dans `policies-config.json` sous `customPoliciesPath`. Le fichier est chargé à nouveau à chaque événement hook — il n'y a pas de mise en cache entre les événements.
80
80
 
81
81
  ### Utiliser les deux ensemble
82
82
 
@@ -84,7 +84,7 @@ Les politiques par convention et le fichier `--custom` explicite peuvent coexist
84
84
 
85
85
  1. Fichier `customPoliciesPath` explicite (si configuré)
86
86
  2. Fichiers de convention du projet (`{cwd}/.failproofai/policies/`, alphabétique)
87
- 3. Fichiers de convention de l'utilisateur (`~/.failproofai/policies/`, alphabétique)
87
+ 3. Fichiers de convention utilisateur (`~/.failproofai/policies/`, alphabétique)
88
88
 
89
89
  ---
90
90
 
@@ -102,7 +102,7 @@ Enregistre une politique. Appelez cette fonction autant de fois que nécessaire
102
102
 
103
103
  ```ts
104
104
  customPolicies.add({
105
- name: string; // obligatoire - identifiant unique
105
+ name: string; // requis - identifiant unique
106
106
  description?: string; // affiché dans la sortie de `failproofai policies`
107
107
  match?: { events?: HookEventType[] }; // filtrer par type d'événement ; omettre pour tout correspondre
108
108
  fn: (ctx: PolicyContext) => PolicyResult | Promise<PolicyResult>;
@@ -117,26 +117,26 @@ customPolicies.add({
117
117
  | `deny(message)` | Bloque l'opération | L'agent ne doit pas effectuer cette action |
118
118
  | `instruct(message)` | Ajoute du contexte sans bloquer | Donner à l'agent un contexte supplémentaire pour rester sur la bonne voie |
119
119
 
120
- `deny(message)` — le message apparaît à Claude préfixé par `"Blocked by failproofai:"`. Un seul `deny` court-circuite toute évaluation ultérieure.
120
+ `deny(message)` — le message apparaît à Claude préfixé de `"Blocked by failproofai:"`. Un seul `deny` court-circuite toute évaluation ultérieure.
121
121
 
122
- `instruct(message)` — le message est ajouté au contexte de Claude pour l'appel d'outil en cours. Tous les messages `instruct` sont accumulés et délivrés ensemble.
122
+ `instruct(message)` — le message est ajouté au contexte de Claude pour l'appel d'outil en cours. Tous les messages `instruct` sont accumulés et transmis ensemble.
123
123
 
124
124
  <Tip>
125
- Vous pouvez ajouter des indications supplémentaires à n'importe quel message `deny` ou `instruct` en ajoutant un champ `hint` dans `policyParams` — aucune modification de code nécessaire. Cela fonctionne également pour les politiques personnalisées (`custom/`), les politiques de convention de projet (`.failproofai-project/`) et les politiques de convention utilisateur (`.failproofai-user/`). Consultez [Configuration → hint](/fr/configuration#hint-cross-cutting) pour plus de détails.
125
+ Vous pouvez ajouter des instructions supplémentaires à n'importe quel message `deny` ou `instruct` en ajoutant un champ `hint` dans `policyParams` — sans modification de code. Cela fonctionne également pour les politiques personnalisées (`custom/`), par convention de projet (`.failproofai-project/`) et par convention utilisateur (`.failproofai-user/`). Consultez [Configuration → hint](/fr/configuration#hint-cross-cutting) pour plus de détails.
126
126
  </Tip>
127
127
 
128
- ### Messages d'autorisation informatifs
128
+ ### Messages allow informatifs
129
129
 
130
- `allow(message)` autorise l'opération **et** envoie un message informatif à Claude. Le message est délivré en tant que `additionalContext` dans la réponse stdout du gestionnaire de hook — le même mécanisme qu'`instruct`, mais sémantiquement différent : c'est une mise à jour de statut, pas un avertissement.
130
+ `allow(message)` autorise l'opération **et** envoie un message informatif à Claude. Le message est transmis en tant qu'`additionalContext` dans la réponse stdout du gestionnaire de hook — le même mécanisme utilisé par `instruct`, mais sémantiquement différent : c'est une mise à jour de statut, pas un avertissement.
131
131
 
132
132
  | Fonction | Effet | Utiliser quand |
133
133
  |----------|--------|----------|
134
- | `allow(message)` | Autoriser et envoyer du contexte à Claude | Confirmer qu'une vérification a réussi, ou expliquer pourquoi une vérification a été ignorée |
134
+ | `allow(message)` | Autorise et envoie du contexte à Claude | Confirmer qu'une vérification a réussi, ou expliquer pourquoi une vérification a été ignorée |
135
135
 
136
- Cas d'utilisation :
136
+ Cas d'usage :
137
137
  - **Confirmations de statut :** `allow("All CI checks passed.")` — indique à Claude que tout est en ordre
138
138
  - **Explications fail-open :** `allow("GitHub CLI not installed, skipping CI check.")` — indique à Claude pourquoi une vérification a été ignorée afin qu'il dispose du contexte complet
139
- - **Accumulation de plusieurs messages :** si plusieurs politiques retournent chacune `allow(message)`, tous les messages sont joints par des sauts de ligne et délivrés ensemble
139
+ - **Accumulation de plusieurs messages :** si plusieurs politiques retournent chacune `allow(message)`, tous les messages sont joints avec des sauts de ligne et transmis ensemble
140
140
 
141
141
  ```js
142
142
  customPolicies.add({
@@ -162,7 +162,7 @@ customPolicies.add({
162
162
  | `eventType` | `string` | `"PreToolUse"`, `"PostToolUse"`, `"Notification"`, `"Stop"` |
163
163
  | `toolName` | `string \| undefined` | L'outil appelé (ex. `"Bash"`, `"Write"`, `"Read"`) |
164
164
  | `toolInput` | `Record<string, unknown> \| undefined` | Les paramètres d'entrée de l'outil |
165
- | `payload` | `Record<string, unknown>` | Charge utile brute complète de l'événement provenant de Claude Code |
165
+ | `payload` | `Record<string, unknown>` | Charge utile brute complète de l'événement depuis Claude Code |
166
166
  | `session` | `SessionMetadata \| undefined` | Contexte de session (voir ci-dessous) |
167
167
 
168
168
  ### Champs de `SessionMetadata`
@@ -177,8 +177,8 @@ customPolicies.add({
177
177
 
178
178
  | Événement | Quand il se déclenche | Contenu de `toolInput` |
179
179
  |-------|--------------|----------------------|
180
- | `PreToolUse` | Avant que Claude exécute un outil | L'entrée de l'outil (ex. `{ command: "..." }` pour Bash) |
181
- | `PostToolUse` | Après qu'un outil se termine | L'entrée de l'outil + `tool_result` (la sortie) |
180
+ | `PreToolUse` | Avant qu'un outil soit exécuté par Claude | L'entrée de l'outil (ex. `{ command: "..." }` pour Bash) |
181
+ | `PostToolUse` | Après la fin d'un outil | L'entrée de l'outil + `tool_result` (la sortie) |
182
182
  | `Notification` | Quand Claude envoie une notification | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` — les hooks doivent toujours retourner `allow()`, ils ne peuvent pas bloquer les notifications |
183
183
  | `Stop` | Quand la session Claude se termine | Vide |
184
184
 
@@ -189,19 +189,19 @@ customPolicies.add({
189
189
  Les politiques sont évaluées dans cet ordre :
190
190
 
191
191
  1. Politiques intégrées (dans l'ordre de définition)
192
- 2. Politiques personnalisées explicites depuis `customPoliciesPath` (dans l'ordre `.add()`)
192
+ 2. Politiques personnalisées explicites depuis `customPoliciesPath` (dans l'ordre de `.add()`)
193
193
  3. Politiques de convention du projet `.failproofai/policies/` (fichiers alphabétiques, ordre `.add()` à l'intérieur)
194
- 4. Politiques de convention de l'utilisateur `~/.failproofai/policies/` (fichiers alphabétiques, ordre `.add()` à l'intérieur)
194
+ 4. Politiques de convention utilisateur `~/.failproofai/policies/` (fichiers alphabétiques, ordre `.add()` à l'intérieur)
195
195
 
196
196
  <Note>
197
- Le premier `deny` court-circuite toutes les politiques suivantes. Tous les messages `instruct` sont accumulés et délivrés ensemble.
197
+ Le premier `deny` court-circuite toutes les politiques suivantes. Tous les messages `instruct` sont accumulés et transmis ensemble.
198
198
  </Note>
199
199
 
200
200
  ---
201
201
 
202
202
  ## Imports transitifs
203
203
 
204
- Les fichiers de politiques personnalisées peuvent importer des modules locaux en utilisant des chemins relatifs :
204
+ Les fichiers de politiques personnalisées peuvent importer des modules locaux via des chemins relatifs :
205
205
 
206
206
  ```js
207
207
  // my-policies.js
@@ -218,13 +218,13 @@ customPolicies.add({
218
218
  });
219
219
  ```
220
220
 
221
- Tous les imports relatifs accessibles depuis le fichier d'entrée sont résolus. Ceci est implémenté en réécrivant les imports `from "failproofai"` vers le chemin dist réel et en créant des fichiers `.mjs` temporaires pour garantir la compatibilité ESM.
221
+ Tous les imports relatifs accessibles depuis le fichier d'entrée sont résolus. Ceci est implémenté en réécrivant les imports `from "failproofai"` vers le chemin dist réel et en créant des fichiers `.mjs` temporaires pour assurer la compatibilité ESM.
222
222
 
223
223
  ---
224
224
 
225
225
  ## Filtrage par type d'événement
226
226
 
227
- Utilisez `match.events` pour limiter quand une politique se déclenche :
227
+ Utilisez `match.events` pour limiter le déclenchement d'une politique :
228
228
 
229
229
  ```js
230
230
  customPolicies.add({
@@ -238,23 +238,23 @@ customPolicies.add({
238
238
  });
239
239
  ```
240
240
 
241
- Omettez `match` entièrement pour se déclencher à chaque type d'événement.
241
+ Omettez `match` entièrement pour se déclencher sur chaque type d'événement.
242
242
 
243
243
  ---
244
244
 
245
- ## Gestion des erreurs et modes de défaillance
245
+ ## Gestion des erreurs et modes d'échec
246
246
 
247
- Les politiques personnalisées sont **fail-open** : les erreurs ne bloquent jamais les politiques intégrées ni ne font planter le gestionnaire de hook.
247
+ Les politiques personnalisées sont **fail-open** : les erreurs ne bloquent jamais les politiques intégrées et ne font pas planter le gestionnaire de hook.
248
248
 
249
- | Défaillance | Comportement |
249
+ | Échec | Comportement |
250
250
  |---------|----------|
251
- | `customPoliciesPath` non défini | Aucune politique personnalisée explicite ne s'exécute ; les politiques de convention et les politiques intégrées continuent normalement |
251
+ | `customPoliciesPath` non défini | Aucune politique personnalisée explicite n'est exécutée ; les politiques par convention et intégrées continuent normalement |
252
252
  | Fichier introuvable | Avertissement consigné dans `~/.failproofai/hook.log` ; les politiques intégrées continuent |
253
- | Erreur de syntaxe/import (explicite) | Erreur consignée dans `~/.failproofai/hook.log` ; les politiques personnalisées explicites sont ignorées |
254
- | Erreur de syntaxe/import (convention) | Erreur consignée ; ce fichier est ignoré, les autres fichiers de convention se chargent quand même |
253
+ | Erreur de syntaxe/import (explicite) | Erreur consignée dans `~/.failproofai/hook.log` ; politiques personnalisées explicites ignorées |
254
+ | Erreur de syntaxe/import (convention) | Erreur consignée ; ce fichier est ignoré, les autres fichiers de convention sont toujours chargés |
255
255
  | `fn` lève une exception à l'exécution | Erreur consignée ; ce hook est traité comme `allow` ; les autres hooks continuent |
256
- | `fn` prend plus de 10 s | Délai consigné ; traité comme `allow` |
257
- | Répertoire de convention manquant | Aucune politique de convention ne s'exécute ; aucune erreur |
256
+ | `fn` prend plus de 10 secondes | Timeout consigné ; traité comme `allow` |
257
+ | Répertoire de convention manquant | Aucune politique de convention n'est exécutée ; aucune erreur |
258
258
 
259
259
  <Tip>
260
260
  Pour déboguer les erreurs de politiques personnalisées, surveillez le fichier de 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
- // Prevent agent from writing to secrets/ directory
275
+ // Empêche l'agent d'écrire dans le répertoire secrets/
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
- // Keep the agent on track: verify tests before committing
288
+ // Maintient l'agent sur la bonne voie : vérifier les tests avant de commiter
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
- // Prevent unplanned dependency changes during freeze
303
+ // Empêche les modifications de dépendances non planifiées pendant le gel
304
304
  customPolicies.add({
305
305
  name: "dependency-freeze",
306
306
  description: "Prevent unplanned dependency changes during freeze period",
@@ -327,10 +327,10 @@ Le répertoire `examples/` contient des fichiers de politiques prêts à l'emplo
327
327
 
328
328
  | Fichier | Contenu |
329
329
  |------|----------|
330
- | `examples/policies-basic.js` | Cinq politiques de démarrage couvrant les modes de défaillance courants des agents |
331
- | `examples/policies-advanced/index.js` | Modèles avancés : imports transitifs, appels asynchrones, nettoyage des sorties et hooks de fin de session |
332
- | `examples/convention-policies/security-policies.mjs` | Politiques de sécurité basées sur les conventions (bloquer les écritures .env, empêcher la réécriture de l'historique git) |
333
- | `examples/convention-policies/workflow-policies.mjs` | Politiques de workflow basées sur les conventions (rappels de tests, audit des écritures de fichiers) |
330
+ | `examples/policies-basic.js` | Cinq politiques de démarrage couvrant les modes d'échec courants des agents |
331
+ | `examples/policies-advanced/index.js` | Modèles avancés : imports transitifs, appels asynchrones, nettoyage de sortie et hooks de fin de session |
332
+ | `examples/convention-policies/security-policies.mjs` | Politiques de sécurité par convention (bloquer les écritures .env, empêcher la réécriture de l'historique git) |
333
+ | `examples/convention-policies/workflow-policies.mjs` | Politiques de workflow par convention (rappels de tests, audit des écritures de fichiers) |
334
334
 
335
335
  ### Utiliser les exemples de fichiers explicites
336
336
 
@@ -338,16 +338,16 @@ Le répertoire `examples/` contient des fichiers de politiques prêts à l'emplo
338
338
  failproofai policies --install --custom ./examples/policies-basic.js
339
339
  ```
340
340
 
341
- ### Utiliser les exemples basés sur les conventions
341
+ ### Utiliser les exemples par convention
342
342
 
343
343
  ```bash
344
- # Copier au niveau du projet
344
+ # Copier au niveau projet
345
345
  mkdir -p .failproofai/policies
346
346
  cp examples/convention-policies/*.mjs .failproofai/policies/
347
347
 
348
- # Ou copier au niveau de l'utilisateur
348
+ # Ou copier au niveau utilisateur
349
349
  mkdir -p ~/.failproofai/policies
350
350
  cp examples/convention-policies/*.mjs ~/.failproofai/policies/
351
351
  ```
352
352
 
353
- Aucune commande d'installation nécessaire — les fichiers sont récupérés automatiquement au prochain événement de hook.
353
+ Aucune commande d'installation n'est nécessaire — les fichiers sont automatiquement détectés au prochain événement hook.
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  title: Exemples
3
- description: "Comment configurer des hooks pour Claude Code et le Agents SDK"
3
+ description: "Comment configurer des hooks pour Claude Code et l'Agents SDK"
4
4
  icon: book-open
5
5
  ---
6
6
 
7
- Des exemples prêts à l'emploi pour les scénarios courants. Chacun montre comment installer et ce que vous pouvez attendre.
7
+ Des exemples prêts à l'emploi pour les scénarios courants. Chacun montre comment l'installer et ce à quoi s'attendre.
8
8
 
9
9
  ---
10
10
 
@@ -35,15 +35,15 @@ Failproof AI s'intègre à Claude Code via son [système de hooks](https://docs.
35
35
  claude
36
36
  ```
37
37
 
38
- Les politiques s'exécutent désormais automatiquement à chaque appel d'outil. Essayez de demander à Claude d'exécuter `sudo rm -rf /` — cela sera bloqué.
38
+ Les politiques s'exécutent désormais automatiquement à chaque appel d'outil. Essayez de demander à Claude d'exécuter `sudo rm -rf /` — la commande sera bloquée.
39
39
  </Step>
40
40
  </Steps>
41
41
 
42
42
  ---
43
43
 
44
- ## Configurer des hooks pour le Agents SDK
44
+ ## Configurer des hooks pour l'Agents SDK
45
45
 
46
- Si vous développez avec le [Agents SDK](https://docs.anthropic.com/en/docs/agents-sdk), vous pouvez utiliser le même système de hooks par programmation.
46
+ Si vous développez avec l'[Agents SDK](https://docs.anthropic.com/en/docs/agents-sdk), vous pouvez utiliser le même système de hooks de manière programmatique.
47
47
 
48
48
  <Steps>
49
49
  <Step title="Installer failproofai dans votre projet">
@@ -52,7 +52,7 @@ Si vous développez avec le [Agents SDK](https://docs.anthropic.com/en/docs/agen
52
52
  ```
53
53
  </Step>
54
54
  <Step title="Configurer les hooks dans votre agent">
55
- Passez des commandes de hooks lors de la création de votre processus agent. Les hooks se déclenchent de la même manière que dans Claude Code — via stdin/stdout JSON :
55
+ Transmettez des commandes de hooks lors de la création de votre processus agent. Les hooks se déclenchent de la même manière que dans Claude Code — via JSON en stdin/stdout :
56
56
 
57
57
  ```bash
58
58
  failproofai --hook PreToolUse # appelé avant chaque outil
@@ -65,7 +65,7 @@ Si vous développez avec le [Agents SDK](https://docs.anthropic.com/en/docs/agen
65
65
 
66
66
  customPolicies.add({
67
67
  name: "limit-to-project-dir",
68
- description: "Keep the agent inside the project directory",
68
+ description: "Maintenir l'agent dans le répertoire du projet",
69
69
  match: { events: ["PreToolUse"] },
70
70
  fn: async (ctx) => {
71
71
  const path = String(ctx.toolInput?.file_path ?? "");
@@ -86,7 +86,7 @@ Si vous développez avec le [Agents SDK](https://docs.anthropic.com/en/docs/agen
86
86
 
87
87
  ---
88
88
 
89
- ## Bloquer les commandes destructives
89
+ ## Bloquer les commandes destructrices
90
90
 
91
91
  La configuration la plus courante — empêcher les agents de causer des dommages irréversibles.
92
92
 
@@ -94,36 +94,36 @@ La configuration la plus courante — empêcher les agents de causer des dommage
94
94
  failproofai policies --install block-sudo block-rm-rf block-force-push block-curl-pipe-sh
95
95
  ```
96
96
 
97
- Ce que ça fait :
97
+ Ce que cela fait :
98
98
  - `block-sudo` — bloque toutes les commandes `sudo`
99
99
  - `block-rm-rf` — bloque la suppression récursive de fichiers
100
- - `block-force-push` — bloque les `git push --force`
101
- - `block-curl-pipe-sh` — bloque le piping de scripts distants vers le shell
100
+ - `block-force-push` — bloque `git push --force`
101
+ - `block-curl-pipe-sh` — bloque l'exécution de scripts distants via un pipe vers le shell
102
102
 
103
103
  ---
104
104
 
105
105
  ## Prévenir les fuites de secrets
106
106
 
107
- Empêchez les agents de voir ou de divulguer des identifiants dans la sortie des outils.
107
+ Empêcher les agents de voir ou de divulguer des identifiants dans la sortie des outils.
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
- Ces politiques se déclenchent sur `PostToolUse` — après l'exécution d'un outil, elles nettoient la sortie avant que l'agent ne la voie.
113
+ Ces politiques se déclenchent sur `PostToolUse` — après l'exécution d'un outil, elles nettoient la sortie avant que l'agent ne la reçoive.
114
114
 
115
115
  ---
116
116
 
117
117
  ## Recevoir des alertes Slack quand les agents ont besoin d'attention
118
118
 
119
- Utilisez le hook de notification pour transmettre les alertes d'inactivité vers Slack.
119
+ Utilisez le hook de notification pour transférer les alertes d'inactivité vers Slack.
120
120
 
121
121
  ```javascript
122
122
  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: "Alerter Slack quand l'agent attend une entrée",
127
127
  match: { events: ["Notification"] },
128
128
  fn: async (ctx) => {
129
129
  const webhookUrl = process.env.SLACK_WEBHOOK_URL;
@@ -160,14 +160,14 @@ SLACK_WEBHOOK_URL=https://hooks.slack.com/... failproofai policies --install --c
160
160
 
161
161
  ## Maintenir les agents sur une branche
162
162
 
163
- Empêchez les agents de changer de branche ou de pousser vers des branches protégées.
163
+ Empêcher les agents de changer de branche ou de pousser vers des branches protégées.
164
164
 
165
165
  ```javascript
166
166
  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: "Empêcher l'agent de basculer sur d'autres 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
  ## Exiger des tests avant les commits
186
186
 
187
- Rappelez aux agents d'exécuter les tests avant de committer.
187
+ Rappeler aux agents d'exécuter les tests avant de committer.
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: "Rappeler à l'agent d'exécuter les tests avant de committer",
195
195
  match: { events: ["PreToolUse"] },
196
196
  fn: async (ctx) => {
197
197
  if (ctx.toolName !== "Bash") return allow();
@@ -206,9 +206,9 @@ customPolicies.add({
206
206
 
207
207
  ---
208
208
 
209
- ## Verrouiller un dépôt de production
209
+ ## Sécuriser un dépôt de production
210
210
 
211
- Commitez une configuration au niveau du projet pour que tous les développeurs de votre équipe bénéficient des mêmes politiques.
211
+ Committez une configuration au niveau du projet afin que tous les développeurs de votre équipe bénéficient des mêmes politiques.
212
212
 
213
213
  Créez `.failproofai/policies-config.json` dans votre dépôt :
214
214
 
@@ -231,7 +231,7 @@ Créez `.failproofai/policies-config.json` dans votre dépôt :
231
231
  }
232
232
  ```
233
233
 
234
- Puis commitez-le :
234
+ Puis committez-le :
235
235
 
236
236
  ```bash
237
237
  git add .failproofai/policies-config.json
@@ -242,12 +242,66 @@ Chaque membre de l'équipe ayant failproofai installé récupérera automatiquem
242
242
 
243
243
  ---
244
244
 
245
+ ## Établir un standard qualité à l'échelle de l'organisation avec des politiques de convention
246
+
247
+ La configuration la plus impactante : committez `.failproofai/policies/` dans votre dépôt avec des politiques adaptées à votre projet. Tous les membres de l'équipe les récupèrent automatiquement — sans commandes d'installation ni modifications de configuration.
248
+
249
+ <Steps>
250
+ <Step title="Créer le répertoire et ajouter des politiques">
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
+ // Imposer le gestionnaire de paquets préféré de votre équipe
260
+ // (ou activez plutôt la politique intégrée prefer-package-manager)
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
+ // Rappeler à l'agent d'exécuter les tests avant de committer
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="Committer dans git">
287
+ ```bash
288
+ git add .failproofai/policies/
289
+ git commit -m "Add team quality policies"
290
+ ```
291
+ </Step>
292
+ <Step title="Continuer à améliorer">
293
+ Au fur et à mesure que votre équipe rencontre de nouveaux types d'échecs, ajoutez des politiques et poussez-les. Tout le monde reçoit la mise à jour au prochain `git pull`. Ces politiques deviennent un standard qualité vivant qui évolue avec votre équipe.
294
+ </Step>
295
+ </Steps>
296
+
297
+ ---
298
+
245
299
  ## Plus d'exemples
246
300
 
247
301
  Le répertoire [`examples/`](https://github.com/exospherehost/failproofai/tree/main/examples) du dépôt contient :
248
302
 
249
303
  | Fichier | Ce qu'il illustre |
250
304
  |---------|-------------------|
251
- | `policies-basic.js` | Politiques de démarrage — bloquer les écritures en production, les force-push et les scripts pipés |
305
+ | `policies-basic.js` | Politiques de base — bloquer les écritures en production, les force-push, les scripts pipés |
252
306
  | `policies-notification.js` | Alertes Slack pour les notifications d'inactivité et la fin de session |
253
- | `policies-advanced/index.js` | Imports transitifs, hooks asynchrones, nettoyage de la sortie `PostToolUse`, gestion de l'événement `Stop` |
307
+ | `policies-advanced/index.js` | Imports transitifs, hooks asynchrones, nettoyage de la sortie PostToolUse, gestion de l'événement Stop |
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  title: Démarrage rapide
3
- description: "Installez failproofai, activez les politiques et laissez vos agents s'exécuter de manière fiable"
3
+ description: "Installez failproofai, activez les politiques et laissez vos agents fonctionner de manière fiable"
4
4
  icon: rocket
5
5
  ---
6
6
 
7
7
  ## Prérequis
8
8
 
9
9
  - **Node.js** >= 20.9.0
10
- - **Bun** >= 1.3.0 (optionnel - uniquement nécessaire pour compiler depuis les sources)
10
+ - **Bun** >= 1.3.0 (optionnel - nécessaire uniquement pour compiler depuis les sources)
11
11
 
12
12
  ---
13
13
 
@@ -31,13 +31,13 @@ bun add -g failproofai
31
31
 
32
32
  <Steps>
33
33
  <Step title="Activer les politiques">
34
- Les politiques sont des règles qui s'exécutent avant et après chaque appel d'outil de l'agent. Elles interceptent les commandes destructrices, les fuites de secrets et autres modes de défaillance avant qu'ils ne causent des dommages.
34
+ Les politiques sont des règles qui s'exécutent avant et après chaque appel d'outil de l'agent. Elles interceptent les commandes destructrices, les fuites de secrets et d'autres modes de défaillance avant qu'ils ne causent des dommages.
35
35
 
36
36
  ```bash
37
37
  failproofai policies --install
38
38
  ```
39
39
 
40
- Cela écrit des entrées de hook dans le fichier `settings.json` de Claude Code. Vous pouvez également installer pour un seul projet ou choisir des politiques spécifiques :
40
+ Cette commande inscrit les entrées de hook dans le fichier `settings.json` de Claude Code. Vous pouvez également installer pour un seul projet ou choisir des politiques spécifiques :
41
41
 
42
42
  ```bash
43
43
  failproofai policies --install --scope project
@@ -65,7 +65,7 @@ bun add -g failproofai
65
65
 
66
66
  ---
67
67
 
68
- ## Comment fonctionnent les politiques
68
+ ## Fonctionnement des politiques
69
69
 
70
70
  Chaque fois qu'un agent exécute un outil, Claude Code appelle failproofai en tant que sous-processus :
71
71
 
@@ -79,14 +79,66 @@ Chaque politique retourne l'une des trois décisions suivantes :
79
79
 
80
80
  - **allow** - l'agent continue normalement
81
81
  - **deny** - l'action est bloquée, l'agent est informé de la raison
82
- - **instruct** - du contexte supplémentaire est ajouté au prompt de l'agent
82
+ - **instruct** - du contexte supplémentaire est ajouté à l'invite de l'agent
83
83
 
84
84
  <Note>
85
- Les politiques s'exécutent dans votre processus local. Aucune donnée n'est envoyée à un service distant.
85
+ Les politiques s'exécutent dans votre processus local. Rien n'est envoyé à un service distant.
86
86
  </Note>
87
87
 
88
88
  ---
89
89
 
90
+ ## Configurer des politiques d'équipe avec les politiques par convention
91
+
92
+ La façon la plus rapide d'établir des standards de qualité au sein de votre équipe est la convention `.failproofai/policies/`. Déposez des fichiers de politiques dans ce répertoire et ils sont chargés automatiquement — sans options, sans modification de configuration, sans commandes d'installation.
93
+
94
+ <Steps>
95
+ <Step title="Créer le répertoire des politiques">
96
+ ```bash
97
+ mkdir -p .failproofai/policies
98
+ ```
99
+ </Step>
100
+ <Step title="Ajouter des fichiers de politiques">
101
+ Copiez les exemples de démarrage ou créez les vôtres :
102
+
103
+ ```bash
104
+ cp node_modules/failproofai/examples/convention-policies/*.mjs .failproofai/policies/
105
+ ```
106
+
107
+ Ou créez-en un nouveau :
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="Valider dans git">
127
+ ```bash
128
+ git add .failproofai/policies/
129
+ git commit -m "Add team quality policies"
130
+ ```
131
+
132
+ Chaque membre de l'équipe ayant failproofai installé récupère ces politiques automatiquement. Aucune configuration individuelle n'est nécessaire.
133
+ </Step>
134
+ </Steps>
135
+
136
+ <Tip>
137
+ Commitez `.failproofai/policies/` dans votre dépôt afin que toute l'équipe partage les mêmes standards. Au fur et à mesure que votre équipe découvre de nouveaux modes de défaillance, ajoutez des politiques et poussez-les — tout le monde reçoit la mise à jour au prochain `git pull`. Au fil du temps, ces politiques deviennent un standard de qualité vivant qui ne cesse de s'améliorer.
138
+ </Tip>
139
+
140
+ ---
141
+
90
142
  ## Stockage des données
91
143
 
92
144
  Toute la configuration et les journaux restent sur votre machine :
@@ -96,8 +148,8 @@ Toute la configuration et les journaux restent sur votre machine :
96
148
  | `~/.failproofai/policies-config.json` | Configuration globale des politiques |
97
149
  | `~/.failproofai/hook-activity.jsonl` | Historique d'exécution des hooks |
98
150
  | `~/.failproofai/hook.log` | Journal de débogage pour les erreurs de hooks personnalisés |
99
- | `.failproofai/policies-config.json` | Configuration par projet (validée dans le dépôt) |
100
- | `.failproofai/policies-config.local.json` | Remplacements personnels (ignorés par git) |
151
+ | `.failproofai/policies-config.json` | Configuration par projet (versionnée) |
152
+ | `.failproofai/policies-config.local.json` | Substitutions personnelles (ignorées par git) |
101
153
 
102
154
  ---
103
155
 
@@ -111,12 +163,12 @@ Supprime les entrées de hook du fichier `~/.claude/settings.json`. Les fichiers
111
163
 
112
164
  ---
113
165
 
114
- ## Étapes suivantes
166
+ ## Prochaines étapes
115
167
 
116
168
  <CardGroup cols={2}>
117
169
 
118
170
  <Card title="Configuration" icon="gear" href="/fr/configuration">
119
- Périmètres et format des fichiers de configuration
171
+ Portées et format des fichiers de configuration
120
172
  </Card>
121
173
 
122
174
  <Card title="Politiques intégrées" icon="shield" href="/fr/built-in-policies">
@@ -127,8 +179,8 @@ Supprime les entrées de hook du fichier `~/.claude/settings.json`. Les fichiers
127
179
  Écrivez vos propres politiques en JavaScript
128
180
  </Card>
129
181
 
130
- <Card title="Moniteur d'agents" icon="chart-line" href="/fr/dashboard">
131
- Surveillez les sessions et consultez l'activité des politiques
182
+ <Card title="Moniteur d'agent" icon="chart-line" href="/fr/dashboard">
183
+ Surveillez les sessions et examinez l'activité des politiques
132
184
  </Card>
133
185
 
134
186
  </CardGroup>