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: カスタムポリシー
3
- description: "JavaScriptで独自のポリシーを記述する — 規約の適用、ドリフトの防止、障害の検出、外部システムとの連携"
3
+ description: "JavaScriptで独自のポリシーを記述する — 規約の強制、ドリフトの防止、障害の検出、外部システムとの連携"
4
4
  icon: code
5
5
  ---
6
6
 
7
- カスタムポリシーを使用すると、あらゆるエージェントの動作に対してルールを記述できます。プロジェクトの規約を適用する、ドリフトを防止する、破壊的な操作をゲートする、スタックしたエージェントを検出する、あるいはSlackや承認ワークフローと連携するといったことが可能です。組み込みポリシーと同じフックイベントシステムおよび`allow`、`deny`、`instruct`の判定を使用します。
7
+ カスタムポリシーを使用すると、エージェントのあらゆる動作に対してルールを記述できます。プロジェクト規約の強制、ドリフトの防止、破壊的な操作のゲート処理、スタックしたエージェントの検出、Slackや承認ワークフローとの統合などが可能です。組み込みポリシーと同じフックイベントシステムおよび `allow`、`deny`、`instruct` の決定を使用します。
8
8
 
9
9
  ---
10
10
 
@@ -37,30 +37,30 @@ failproofai policies --install --custom ./my-policies.js
37
37
 
38
38
  ---
39
39
 
40
- ## カスタムポリシーの読み込み方法
40
+ ## カスタムポリシーの2つのロード方法
41
41
 
42
42
  ### オプション1: 規約ベース(推奨)
43
43
 
44
- `*policies.{js,mjs,ts}` ファイルを `.failproofai/policies/` に配置するだけで、フラグや設定変更なしに自動的に読み込まれます。Gitフックと同じ仕組みです。ファイルを置けば、そのまま動作します。
44
+ `.failproofai/policies/` に `*policies.{js,mjs,ts}` ファイルを配置するだけで自動的にロードされます フラグや設定変更は不要です。git フックと同じ仕組みです: ファイルを置くだけで動作します。
45
45
 
46
46
  ```
47
- # プロジェクトレベル — gitにコミットされ、チームで共有
47
+ # プロジェクトレベル — gitにコミット、チームで共有
48
48
  .failproofai/policies/security-policies.mjs
49
49
  .failproofai/policies/workflow-policies.mjs
50
50
 
51
- # ユーザーレベル — 個人用、全プロジェクトに適用
51
+ # ユーザーレベル — 個人用、すべてのプロジェクトに適用
52
52
  ~/.failproofai/policies/my-policies.mjs
53
53
  ```
54
54
 
55
- **仕組み:**
56
- - プロジェクトディレクトリとユーザーディレクトリの両方がスキャンされます(ユニオン — 先着スコープ優先ではありません)
57
- - ファイルは各ディレクトリ内でアルファベット順に読み込まれます。順序を制御するには `01-`、`02-` などのプレフィックスを付けてください
58
- - `*policies.{js,mjs,ts}` にマッチするファイルのみ読み込まれ、それ以外は無視されます
59
- - 各ファイルは独立して読み込まれます(ファイル単位でフェイルオープン)
60
- - 明示的な `--custom` および組み込みポリシーと共存できます
55
+ **動作の仕組み:**
56
+ - プロジェクトとユーザーの両方のディレクトリがスキャンされます(最初のスコープ優先ではなく、両方の和集合)
57
+ - 各ディレクトリ内でファイルはアルファベット順にロードされます。順序を制御するには `01-`、`02-` などのプレフィックスを付けてください
58
+ - `*policies.{js,mjs,ts}` に一致するファイルのみロードされ、その他のファイルは無視されます
59
+ - 各ファイルは独立してロードされます(ファイルごとにフェイルオープン)
60
+ - 明示的な `--custom` および組み込みポリシーと併用できます
61
61
 
62
62
  <Tip>
63
- 規約ポリシーは、チーム全体でポリシーを共有する最も簡単な方法です。`.failproofai/policies/` をgitにコミットすれば、チームメンバー全員が自動的に取得できます。
63
+ 規約ポリシーは、組織の品質基準を構築する最も簡単な方法です。`.failproofai/policies/` を git にコミットすれば、すべてのチームメンバーが自動的に同じルールを取得できます — 開発者ごとのセットアップは不要です。チームが新しい障害パターンを発見するたびにポリシーを追加してプッシュしてください。時間とともに、これらは貢献のたびに改善され続ける生きた品質基準となります。
64
64
  </Tip>
65
65
 
66
66
  ### オプション2: 明示的なファイルパス
@@ -69,22 +69,22 @@ failproofai policies --install --custom ./my-policies.js
69
69
  # カスタムポリシーファイルを指定してインストール
70
70
  failproofai policies --install --custom ./my-policies.js
71
71
 
72
- # ポリシーファイルパスを置き換える
72
+ # ポリシーファイルパスを置き換え
73
73
  failproofai policies --install --custom ./new-policies.js
74
74
 
75
- # カスタムポリシーのパスを設定から削除
75
+ # 設定からカスタムポリシーパスを削除
76
76
  failproofai policies --uninstall --custom
77
77
  ```
78
78
 
79
- 解決された絶対パスは `policies-config.json` `customPoliciesPath` に保存されます。ファイルはフックイベントのたびに新たに読み込まれますイベント間でキャッシュは行われません。
79
+ 解決された絶対パスは `policies-config.json` `customPoliciesPath` として保存されます。ファイルはフックイベントのたびに新たにロードされますイベント間のキャッシュはありません。
80
80
 
81
81
  ### 両方を併用する
82
82
 
83
- 規約ポリシーと明示的な `--custom` ファイルは共存できます。読み込み順序:
83
+ 規約ポリシーと明示的な `--custom` ファイルは共存できます。ロード順序:
84
84
 
85
85
  1. 明示的な `customPoliciesPath` ファイル(設定されている場合)
86
- 2. プロジェクトの規約ファイル(`{cwd}/.failproofai/policies/`、アルファベット順)
87
- 3. ユーザーの規約ファイル(`~/.failproofai/policies/`、アルファベット順)
86
+ 2. プロジェクト規約ファイル(`{cwd}/.failproofai/policies/`、アルファベット順)
87
+ 3. ユーザー規約ファイル(`~/.failproofai/policies/`、アルファベット順)
88
88
 
89
89
  ---
90
90
 
@@ -98,45 +98,45 @@ import { customPolicies, allow, deny, instruct } from "failproofai";
98
98
 
99
99
  ### `customPolicies.add(hook)`
100
100
 
101
- ポリシーを登録します。同じファイル内に複数のポリシーを定義する場合は、必要な回数だけ呼び出してください。
101
+ ポリシーを登録します。同じファイル内で複数のポリシーを登録するために何度でも呼び出せます。
102
102
 
103
103
  ```ts
104
104
  customPolicies.add({
105
105
  name: string; // 必須 - 一意の識別子
106
106
  description?: string; // `failproofai policies` の出力に表示される
107
- match?: { events?: HookEventType[] }; // イベントタイプでフィルタリング。省略すると全てにマッチ
107
+ match?: { events?: HookEventType[] }; // イベントタイプでフィルタリング。省略するとすべてにマッチ
108
108
  fn: (ctx: PolicyContext) => PolicyResult | Promise<PolicyResult>;
109
109
  });
110
110
  ```
111
111
 
112
- ### 判定ヘルパー
112
+ ### 決定ヘルパー
113
113
 
114
- | 関数 | 効果 | 使用場面 |
114
+ | 関数 | 効果 | 使用タイミング |
115
115
  |----------|--------|----------|
116
- | `allow()` | 操作を静かに許可する | アクションが安全で、メッセージが不要な場合 |
117
- | `deny(message)` | 操作をブロックする | エージェントがこのアクションを取るべきでない場合 |
118
- | `instruct(message)` | ブロックせずにコンテキストを追加する | エージェントが正しい方向を維持するための追加コンテキストを提供する場合 |
116
+ | `allow()` | 操作を暗黙的に許可 | アクションが安全で、メッセージが不要な場合 |
117
+ | `deny(message)` | 操作をブロック | エージェントがこのアクションを実行すべきでない場合 |
118
+ | `instruct(message)` | ブロックせずにコンテキストを追加 | エージェントに追加のコンテキストを与えて軌道を保つ場合 |
119
119
 
120
- `deny(message)` — メッセージは `"Blocked by failproofai:"` というプレフィックスを付けてClaudeに表示されます。単一の `deny` が発生すると、以降の全ての評価がショートサーキットされます。
120
+ `deny(message)` — メッセージは `"Blocked by failproofai:"` というプレフィックス付きで Claude に表示されます。1つの `deny` で以降のすべての評価がショートサーキットされます。
121
121
 
122
- `instruct(message)` — メッセージは現在のツールコールのClaudeのコンテキストに追加されます。全ての `instruct` メッセージは蓄積され、まとめて配信されます。
122
+ `instruct(message)` — メッセージは現在のツール呼び出しに対する Claude のコンテキストに追加されます。すべての `instruct` メッセージは蓄積されてまとめて配信されます。
123
123
 
124
124
  <Tip>
125
- `deny` または `instruct` メッセージに追加のガイダンスを付け加えるには、`policyParams` `hint` フィールドを使用します — コードの変更は不要です。これはカスタム(`custom/`)、プロジェクト規約(`.failproofai-project/`)、ユーザー規約(`.failproofai-user/`)ポリシーでも機能します。詳細は[設定 → hint](/ja/configuration#hint-cross-cutting)を参照してください。
125
+ `policyParams` `hint` フィールドを追加することで、コード変更なしに `deny` または `instruct` メッセージに追加のガイダンスを付加できます。これはカスタム(`custom/`)、プロジェクト規約(`.failproofai-project/`)、ユーザー規約(`.failproofai-user/`)ポリシーでも機能します。詳しくは[設定 → hint](/ja/configuration#hint-cross-cutting)をご覧ください。
126
126
  </Tip>
127
127
 
128
128
  ### 情報提供用のallowメッセージ
129
129
 
130
- `allow(message)` は操作を許可し**つつ**、情報提供メッセージをClaudeに返します。メッセージはフックハンドラーのstdoutレスポンスの `additionalContext` として配信されます — `instruct` と同じ仕組みですが、意味的には異なります: これは警告ではなく、状態の更新です。
130
+ `allow(message)` は操作を許可し**かつ**情報メッセージを Claude に送信します。メッセージはフックハンドラーの stdout レスポンスの `additionalContext` として配信されます — `instruct` と同じ仕組みですが、意味的に異なります: 警告ではなくステータス更新です。
131
131
 
132
- | 関数 | 効果 | 使用場面 |
132
+ | 関数 | 効果 | 使用タイミング |
133
133
  |----------|--------|----------|
134
- | `allow(message)` | 許可してClaudeにコンテキストを送信する | チェックが通過したことを確認する、またはチェックがスキップされた理由を説明する |
134
+ | `allow(message)` | 許可してコンテキストを Claude に送信 | チェックが通過したことの確認、またはチェックがスキップされた理由の説明 |
135
135
 
136
136
  ユースケース:
137
- - **状態確認:** `allow("All CI checks passed.")` — Claudeに全てが正常であることを伝える
138
- - **フェイルオープンの説明:** `allow("GitHub CLI not installed, skipping CI check.")` — チェックがスキップされた理由をClaudeに伝え、完全なコンテキストを提供する
139
- - **複数のメッセージの蓄積:** 複数のポリシーがそれぞれ `allow(message)` を返した場合、全てのメッセージが改行で結合されてまとめて配信される
137
+ - **ステータス確認:** `allow("All CI checks passed.")` — Claudeにすべてが正常であることを伝える
138
+ - **フェイルオープンの説明:** `allow("GitHub CLI not installed, skipping CI check.")` — Claudeにチェックがスキップされた理由を伝え、完全なコンテキストを提供する
139
+ - **複数メッセージの蓄積:** 複数のポリシーがそれぞれ `allow(message)` を返す場合、すべてのメッセージが改行で結合されてまとめて配信されます
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
- // ... ブランチの状態を確認 ...
149
+ // ... check branch status ...
150
150
  if (allPushed) {
151
151
  return allow("Branch is up to date with remote.");
152
152
  }
@@ -162,39 +162,39 @@ customPolicies.add({
162
162
  | `eventType` | `string` | `"PreToolUse"`、`"PostToolUse"`、`"Notification"`、`"Stop"` |
163
163
  | `toolName` | `string \| undefined` | 呼び出されるツール(例: `"Bash"`、`"Write"`、`"Read"`) |
164
164
  | `toolInput` | `Record<string, unknown> \| undefined` | ツールの入力パラメータ |
165
- | `payload` | `Record<string, unknown>` | Claude Codeからの完全な生イベントペイロード |
165
+ | `payload` | `Record<string, unknown>` | Claude Code からの完全な生イベントペイロード |
166
166
  | `session` | `SessionMetadata \| undefined` | セッションコンテキスト(下記参照) |
167
167
 
168
168
  ### `SessionMetadata` フィールド
169
169
 
170
170
  | フィールド | 型 | 説明 |
171
171
  |-------|------|-------------|
172
- | `sessionId` | `string` | Claude Codeセッションの識別子 |
173
- | `cwd` | `string` | Claude Codeセッションの作業ディレクトリ |
174
- | `transcriptPath` | `string` | セッションのJSONLトランスクリプトファイルへのパス |
172
+ | `sessionId` | `string` | Claude Code セッション識別子 |
173
+ | `cwd` | `string` | Claude Code セッションの作業ディレクトリ |
174
+ | `transcriptPath` | `string` | セッションの JSONL トランスクリプトファイルへのパス |
175
175
 
176
176
  ### イベントタイプ
177
177
 
178
178
  | イベント | 発火タイミング | `toolInput` の内容 |
179
179
  |-------|--------------|----------------------|
180
- | `PreToolUse` | Claudeがツールを実行する前 | ツールの入力(例: Bashの場合 `{ command: "..." }`) |
180
+ | `PreToolUse` | Claude がツールを実行する前 | ツールの入力(例: Bash の場合 `{ command: "..." }`) |
181
181
  | `PostToolUse` | ツールが完了した後 | ツールの入力 + `tool_result`(出力) |
182
- | `Notification` | Claudeが通知を送信するとき | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` - フックは常に `allow()` を返す必要があり、通知をブロックすることはできません |
183
- | `Stop` | Claudeセッションが終了するとき | 空 |
182
+ | `Notification` | Claude が通知を送信するとき | `{ message: "...", notification_type: "idle" \| "permission_prompt" \| ... }` - フックは常に `allow()` を返す必要があり、通知をブロックすることはできません |
183
+ | `Stop` | Claude セッションが終了するとき | 空 |
184
184
 
185
185
  ---
186
186
 
187
187
  ## 評価順序
188
188
 
189
- ポリシーは以下の順序で評価されます:
189
+ ポリシーは次の順序で評価されます:
190
190
 
191
191
  1. 組み込みポリシー(定義順)
192
- 2. `customPoliciesPath` からの明示的なカスタムポリシー(`.add()` の順序)
193
- 3. プロジェクトの `.failproofai/policies/` からの規約ポリシー(ファイルはアルファベット順、ファイル内は `.add()` の順序)
194
- 4. ユーザーの `~/.failproofai/policies/` からの規約ポリシー(ファイルはアルファベット順、ファイル内は `.add()` の順序)
192
+ 2. `customPoliciesPath` からの明示的なカスタムポリシー(`.add()` 順)
193
+ 3. プロジェクト `.failproofai/policies/` からの規約ポリシー(ファイルはアルファベット順、内部では `.add()` 順)
194
+ 4. ユーザー `~/.failproofai/policies/` からの規約ポリシー(ファイルはアルファベット順、内部では `.add()` 順)
195
195
 
196
196
  <Note>
197
- 最初の `deny` が全ての後続ポリシーをショートサーキットします。全ての `instruct` メッセージは蓄積され、まとめて配信されます。
197
+ 最初の `deny` で以降のすべてのポリシーがショートサーキットされます。すべての `instruct` メッセージは蓄積されてまとめて配信されます。
198
198
  </Note>
199
199
 
200
200
  ---
@@ -218,11 +218,11 @@ customPolicies.add({
218
218
  });
219
219
  ```
220
220
 
221
- エントリファイルから到達可能な全ての相対インポートが解決されます。これは `from "failproofai"` インポートを実際のdistパスに書き換え、ESMの互換性を確保するために一時的な `.mjs` ファイルを作成することで実装されています。
221
+ エントリーファイルから到達可能なすべての相対インポートが解決されます。これは `from "failproofai"` インポートを実際の dist パスに書き換え、ESM 互換性を確保するために一時的な `.mjs` ファイルを作成することで実装されています。
222
222
 
223
223
  ---
224
224
 
225
- ## イベントタイプのフィルタリング
225
+ ## イベントタイプフィルタリング
226
226
 
227
227
  `match.events` を使用して、ポリシーが発火するタイミングを制限します:
228
228
 
@@ -231,30 +231,30 @@ customPolicies.add({
231
231
  name: "require-summary-on-stop",
232
232
  match: { events: ["Stop"] },
233
233
  fn: async (ctx) => {
234
- // セッション終了時のみ発火
235
- // ctx.session.transcriptPath にセッションの完全なログが含まれる
234
+ // セッション終了時にのみ発火
235
+ // ctx.session.transcriptPath には完全なセッションログが含まれる
236
236
  return allow();
237
237
  },
238
238
  });
239
239
  ```
240
240
 
241
- `match` を完全に省略すると、全てのイベントタイプで発火します。
241
+ `match` を完全に省略すると、すべてのイベントタイプで発火します。
242
242
 
243
243
  ---
244
244
 
245
- ## エラー処理と障害モード
245
+ ## エラーハンドリングと障害モード
246
246
 
247
247
  カスタムポリシーは**フェイルオープン**です: エラーが発生しても組み込みポリシーをブロックしたり、フックハンドラーをクラッシュさせたりすることはありません。
248
248
 
249
249
  | 障害 | 動作 |
250
250
  |---------|----------|
251
- | `customPoliciesPath` が未設定 | 明示的なカスタムポリシーは実行されない。規約ポリシーと組み込みポリシーは正常に継続 |
252
- | ファイルが見つからない | `~/.failproofai/hook.log` に警告をログ記録。組み込みポリシーは継続 |
253
- | 構文/インポートエラー(明示的) | `~/.failproofai/hook.log` にエラーをログ記録。明示的なカスタムポリシーはスキップ |
254
- | 構文/インポートエラー(規約) | エラーをログ記録。該当ファイルはスキップ。他の規約ファイルは引き続き読み込まれる |
255
- | `fn` が実行時に例外をスロー | エラーをログ記録。該当フックは `allow` として扱われる。他のフックは継続 |
256
- | `fn` が10秒以上かかる | タイムアウトをログ記録。`allow` として扱われる |
257
- | 規約ディレクトリが存在しない | 規約ポリシーは実行されない。エラーなし |
251
+ | `customPoliciesPath` が未設定 | 明示的なカスタムポリシーは実行されない。規約ポリシーと組み込みは通常通り継続 |
252
+ | ファイルが見つからない | `~/.failproofai/hook.log` に警告が記録される。組み込みは継続 |
253
+ | 構文/インポートエラー(明示的) | `~/.failproofai/hook.log` にエラーが記録される。明示的なカスタムポリシーはスキップ |
254
+ | 構文/インポートエラー(規約) | エラーが記録される。そのファイルはスキップされ、他の規約ファイルは引き続きロード |
255
+ | 実行時に `fn` が例外をスロー | エラーが記録される。そのフックは `allow` として扱われ、他のフックは継続 |
256
+ | `fn` が10秒以上かかる | タイムアウトが記録される。`allow` として扱われる |
257
+ | 規約ディレクトリが存在しない | 規約ポリシーは実行されない。エラーは発生しない |
258
258
 
259
259
  <Tip>
260
260
  カスタムポリシーのエラーをデバッグするには、ログファイルを監視してください:
@@ -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
- // エージェントがsecretsディレクトリに書き込むことを防止
275
+ // エージェントが 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
- // エージェントを正しい方向に維持: コミット前にテストを確認
288
+ // エージェントを軌道に乗せる: コミット前にテストを確認
289
289
  customPolicies.add({
290
290
  name: "remind-test-before-commit",
291
291
  description: "Keep the agent on track: verify tests pass before committing",
@@ -300,7 +300,7 @@ customPolicies.add({
300
300
  },
301
301
  });
302
302
 
303
- // フリーズ期間中の予定外の依存関係変更を防止
303
+ // フリーズ期間中の予定外の依存関係変更を防ぐ
304
304
  customPolicies.add({
305
305
  name: "dependency-freeze",
306
306
  description: "Prevent unplanned dependency changes during freeze period",
@@ -323,22 +323,22 @@ export { customPolicies };
323
323
 
324
324
  ## サンプル
325
325
 
326
- `examples/` ディレクトリには、すぐに実行できるポリシーファイルが含まれています:
326
+ `examples/` ディレクトリにはすぐに実行できるポリシーファイルが含まれています:
327
327
 
328
328
  | ファイル | 内容 |
329
329
  |------|----------|
330
- | `examples/policies-basic.js` | 一般的なエージェントの障害モードをカバーする5つのスターターポリシー |
330
+ | `examples/policies-basic.js` | よくあるエージェント障害モードをカバーする5つのスタータポリシー |
331
331
  | `examples/policies-advanced/index.js` | 高度なパターン: 推移的インポート、非同期呼び出し、出力のスクラビング、セッション終了フック |
332
- | `examples/convention-policies/security-policies.mjs` | 規約ベースのセキュリティポリシー(.envファイルへの書き込みのブロック、gitの履歴書き換えの防止) |
333
- | `examples/convention-policies/workflow-policies.mjs` | 規約ベースのワークフローポリシー(テストのリマインダー、ファイル書き込みの監査) |
332
+ | `examples/convention-policies/security-policies.mjs` | 規約ベースのセキュリティポリシー(.env ファイルへの書き込みのブロック、git履歴の書き換え防止) |
333
+ | `examples/convention-policies/workflow-policies.mjs` | 規約ベースのワークフローポリシー(テストリマインダー、監査ファイル書き込み) |
334
334
 
335
- ### 明示的なファイルサンプルの使用
335
+ ### 明示的なファイルの例を使用する
336
336
 
337
337
  ```bash
338
338
  failproofai policies --install --custom ./examples/policies-basic.js
339
339
  ```
340
340
 
341
- ### 規約ベースのサンプルの使用
341
+ ### 規約ベースの例を使用する
342
342
 
343
343
  ```bash
344
344
  # プロジェクトレベルにコピー
@@ -350,4 +350,4 @@ mkdir -p ~/.failproofai/policies
350
350
  cp examples/convention-policies/*.mjs ~/.failproofai/policies/
351
351
  ```
352
352
 
353
- インストールコマンドは不要です — 次のフックイベント時に自動的にファイルが読み込まれます。
353
+ インストールコマンドは不要です — 次のフックイベント時にファイルが自動的に検出されます。
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  title: 使用例
3
- description: "Claude Code と Agents SDK 向けフックの設定方法"
3
+ description: "Claude Code と Agents SDK にフックを設定する方法"
4
4
  icon: book-open
5
5
  ---
6
6
 
7
- よくあるシナリオですぐに使える例を紹介します。各例では、インストール方法と期待される動作を説明します。
7
+ よく使われるシナリオのすぐに使えるサンプル集です。インストール方法と期待される動作をそれぞれ示します。
8
8
 
9
9
  ---
10
10
 
11
11
  ## Claude Code 向けフックの設定
12
12
 
13
- Failproof AI は Claude Code の[フックシステム](https://docs.anthropic.com/en/docs/claude-code/hooks)を通じて統合されます。`failproofai policies --install` を実行すると、Claude Code の `settings.json` にフックコマンドが登録され、すべてのツール呼び出し時に実行されます。
13
+ Failproof AI は Claude Code の[フックシステム](https://docs.anthropic.com/en/docs/claude-code/hooks)を通じて連携します。`failproofai policies --install` を実行すると、Claude Code の `settings.json` にフックコマンドが登録され、すべてのツール呼び出し時に発火します。
14
14
 
15
15
  <Steps>
16
16
  <Step title="failproofai をインストールする">
@@ -18,7 +18,7 @@ Failproof AI は Claude Code の[フックシステム](https://docs.anthropic.c
18
18
  npm install -g failproofai
19
19
  ```
20
20
  </Step>
21
- <Step title="組み込みポリシーをすべて有効にする">
21
+ <Step title="すべての組み込みポリシーを有効にする">
22
22
  ```bash
23
23
  failproofai policies --install
24
24
  ```
@@ -28,14 +28,14 @@ Failproof AI は Claude Code の[フックシステム](https://docs.anthropic.c
28
28
  cat ~/.claude/settings.json | grep failproofai
29
29
  ```
30
30
 
31
- `PreToolUse`、`PostToolUse`、`Notification`、`Stop` イベントのフックエントリが表示されるはずです。
31
+ `PreToolUse`、`PostToolUse`、`Notification`、`Stop` イベントのフックエントリーが表示されるはずです。
32
32
  </Step>
33
33
  <Step title="Claude Code を起動する">
34
34
  ```bash
35
35
  claude
36
36
  ```
37
37
 
38
- これで、すべてのツール呼び出しに対してポリシーが自動的に実行されます。試しに Claude に `sudo rm -rf /` を実行するよう指示してみてください — ブロックされます。
38
+ ポリシーがすべてのツール呼び出しで自動的に実行されるようになります。Claude に `sudo rm -rf /` を実行するよう依頼してみてください — ブロックされます。
39
39
  </Step>
40
40
  </Steps>
41
41
 
@@ -52,11 +52,11 @@ Failproof AI は Claude Code の[フックシステム](https://docs.anthropic.c
52
52
  ```
53
53
  </Step>
54
54
  <Step title="エージェントにフックを設定する">
55
- エージェントプロセスの作成時にフックコマンドを渡します。フックは Claude Code と同じように、stdin/stdout の JSON を介して起動されます。
55
+ エージェントプロセスの作成時にフックコマンドを渡します。フックは Claude Code と同様に stdin/stdout の JSON 形式で発火します。
56
56
 
57
57
  ```bash
58
- failproofai --hook PreToolUse # 各ツールの実行前に呼び出される
59
- failproofai --hook PostToolUse # 各ツールの実行後に呼び出される
58
+ failproofai --hook PreToolUse # 各ツールの前に呼び出される
59
+ failproofai --hook PostToolUse # 各ツールの後に呼び出される
60
60
  ```
61
61
  </Step>
62
62
  <Step title="エージェント用のカスタムポリシーを作成する">
@@ -88,7 +88,7 @@ Failproof AI は Claude Code の[フックシステム](https://docs.anthropic.c
88
88
 
89
89
  ## 破壊的なコマンドをブロックする
90
90
 
91
- 最もよく使われる設定エージェントが取り消し不可能な操作を行うのを防ぎます。
91
+ 最も一般的なセットアップエージェントが取り返しのつかない操作を行わないようにします。
92
92
 
93
93
  ```bash
94
94
  failproofai policies --install block-sudo block-rm-rf block-force-push block-curl-pipe-sh
@@ -98,23 +98,23 @@ failproofai policies --install block-sudo block-rm-rf block-force-push block-cur
98
98
  - `block-sudo` — すべての `sudo` コマンドをブロック
99
99
  - `block-rm-rf` — 再帰的なファイル削除をブロック
100
100
  - `block-force-push` — `git push --force` をブロック
101
- - `block-curl-pipe-sh` — リモートスクリプトのシェルへのパイプをブロック
101
+ - `block-curl-pipe-sh` — リモートスクリプトをシェルにパイプする操作をブロック
102
102
 
103
103
  ---
104
104
 
105
105
  ## シークレットの漏洩を防ぐ
106
106
 
107
- ツールの出力に含まれる認証情報をエージェントが参照・漏洩するのを防ぎます。
107
+ ツールの出力に含まれる認証情報をエージェントが参照・漏洩しないようにします。
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
- これらは `PostToolUse` で実行されます。ツールの実行後、エージェントが出力を受け取る前にスクラブ処理が行われます。
113
+ これらは `PostToolUse` で発火します — ツールの実行後、エージェントが出力を受け取る前にスクラブ処理が行われます。
114
114
 
115
115
  ---
116
116
 
117
- ## エージェントの待機時に Slack へアラートを送信する
117
+ ## エージェントの待機時に Slack へアラートを送る
118
118
 
119
119
  通知フックを使って、アイドル状態のアラートを Slack に転送します。
120
120
 
@@ -158,9 +158,9 @@ SLACK_WEBHOOK_URL=https://hooks.slack.com/... failproofai policies --install --c
158
158
 
159
159
  ---
160
160
 
161
- ## エージェントをブランチに固定する
161
+ ## エージェントを特定のブランチに留める
162
162
 
163
- エージェントが他のブランチに切り替えたり、保護されたブランチにプッシュしたりするのを防ぎます。
163
+ エージェントが他のブランチに切り替えたり、保護されたブランチにプッシュしたりできないようにします。
164
164
 
165
165
  ```javascript
166
166
  import { customPolicies, allow, deny } from "failproofai";
@@ -182,9 +182,9 @@ customPolicies.add({
182
182
 
183
183
  ---
184
184
 
185
- ## コミット前にテストを要求する
185
+ ## コミット前にテストを必須にする
186
186
 
187
- コミット前にテストを実行するようエージェントに促します。
187
+ コミットの前にテストを実行するようエージェントに促します。
188
188
 
189
189
  ```javascript
190
190
  import { customPolicies, allow, instruct } from "failproofai";
@@ -238,16 +238,70 @@ git add .failproofai/policies-config.json
238
238
  git commit -m "Add failproofai team policies"
239
239
  ```
240
240
 
241
- failproofai をインストール済みのすべてのチームメンバーに、これらのルールが自動的に適用されます。
241
+ failproofai をインストールしているすべてのチームメンバーが、これらのルールを自動的に取得します。
242
242
 
243
243
  ---
244
244
 
245
- ## その他の使用例
245
+ ## コンベンションポリシーでチーム全体の品質基準を構築する
246
+
247
+ 最も効果的なセットアップ: プロジェクトに合わせたポリシーを `.failproofai/policies/` にコミットします。チーム全員がインストールコマンドや設定変更なしに自動で適用されます。
248
+
249
+ <Steps>
250
+ <Step title="ディレクトリを作成してポリシーを追加する">
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
+ // チームが使用するパッケージマネージャーを強制する
260
+ // (組み込みの 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
+ // コミット前にテストを実行するようエージェントに促す
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="git にコミットする">
287
+ ```bash
288
+ git add .failproofai/policies/
289
+ git commit -m "Add team quality policies"
290
+ ```
291
+ </Step>
292
+ <Step title="継続的に改善する">
293
+ チームが新たな問題に直面するたびにポリシーを追加してプッシュしてください。全員が次の `git pull` 時にアップデートを受け取ります。これらのポリシーはチームとともに成長する、生きた品質基準になります。
294
+ </Step>
295
+ </Steps>
296
+
297
+ ---
298
+
299
+ ## その他のサンプル
246
300
 
247
301
  リポジトリの [`examples/`](https://github.com/exospherehost/failproofai/tree/main/examples) ディレクトリには以下が含まれています:
248
302
 
249
303
  | ファイル | 内容 |
250
304
  |------|---------------|
251
- | `policies-basic.js` | 基本ポリシー — 本番環境への書き込み、force-push、パイプスクリプトのブロック |
305
+ | `policies-basic.js` | スターターポリシー — 本番環境への書き込み、force-push、パイプスクリプトのブロック |
252
306
  | `policies-notification.js` | アイドル通知とセッション終了時の Slack アラート |
253
- | `policies-advanced/index.js` | トランジティブインポート、非同期フック、PostToolUse の出力スクラブ、Stop イベントの処理 |
307
+ | `policies-advanced/index.js` | トランジティブインポート、非同期フック、PostToolUse 出力のスクラブ、Stop イベント処理 |