failproofai 0.0.6-beta.1 → 0.0.6-beta.3

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 (177) hide show
  1. package/.next/standalone/.failproofai/policies/review-policies.mjs +4 -3
  2. package/.next/standalone/.next/BUILD_ID +1 -1
  3. package/.next/standalone/.next/build-manifest.json +3 -3
  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/server-reference-manifest.json +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  11. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  12. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  13. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  14. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  15. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  17. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  20. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  21. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  22. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  23. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
  24. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  25. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  26. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  27. package/.next/standalone/.next/server/app/index.html +1 -1
  28. package/.next/standalone/.next/server/app/index.rsc +15 -15
  29. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  30. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  31. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  32. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +10 -10
  33. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  34. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
  35. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +8 -8
  38. package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
  41. package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
  44. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
  45. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
  48. package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g72weg._.js +1 -1
  51. package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_0z7w.hh._.js +1 -1
  52. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__092s1ta._.js +2 -2
  53. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0~kmh8w._.js → [root-of-the-server]__096k.db._.js} +2 -2
  54. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09icjsf._.js +2 -2
  55. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0g.lg8b._.js +2 -2
  56. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h..k-e._.js +2 -2
  57. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0rh.18_._.js → [root-of-the-server]__0kyh86x._.js} +2 -2
  58. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0okos0k._.js +2 -2
  59. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w6l33k._.js +2 -2
  60. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11pa2ra._.js +2 -2
  61. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12t-wym._.js +2 -2
  62. package/.next/standalone/.next/server/chunks/ssr/_10lm7or._.js +2 -2
  63. package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_0xerkr6._.js +1 -1
  64. package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_0q-m0y-._.js +1 -1
  65. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  66. package/.next/standalone/.next/server/pages/404.html +2 -2
  67. package/.next/standalone/.next/server/pages/500.html +1 -1
  68. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/server-reference-manifest.json +9 -9
  70. package/.next/standalone/.next/static/chunks/{0gbf4cphy8ksq.js → 0-dm_9a6nsc2l.js} +1 -1
  71. package/.next/standalone/.next/static/chunks/{12~yi9oj8av8p.js → 01pmw1-asbek~.js} +2 -2
  72. package/.next/standalone/.next/static/chunks/{0v.yd0kg_ld3r.js → 051m32nx~n5yr.js} +1 -1
  73. package/.next/standalone/.next/static/chunks/{09_k80d~cq2wg.js → 0a-yctdwn368y.js} +1 -1
  74. package/.next/standalone/.next/static/chunks/{0bvhsa6zva2o..js → 0ksdlt_1hucdm.js} +1 -1
  75. package/.next/standalone/.next/static/chunks/{01b~z8f1ws0rk.js → 0l-mu4okl-cj1.js} +1 -1
  76. package/.next/standalone/.next/static/chunks/{08t08igdql9yt.js → 0mazj-p-~2kc6.js} +1 -1
  77. package/.next/standalone/.next/static/chunks/0qakntsrpc~1j.js +6 -0
  78. package/.next/standalone/.next/static/chunks/{03rz6ykw-a2xi.js → 156zca6aewyr-.js} +1 -1
  79. package/.next/standalone/CHANGELOG.md +18 -0
  80. package/.next/standalone/bin/failproofai.mjs +91 -4
  81. package/.next/standalone/dist/cli.mjs +1156 -55
  82. package/.next/standalone/docs/ar/built-in-policies.mdx +140 -103
  83. package/.next/standalone/docs/ar/custom-policies.mdx +72 -72
  84. package/.next/standalone/docs/ar/examples.mdx +86 -33
  85. package/.next/standalone/docs/ar/getting-started.mdx +82 -29
  86. package/.next/standalone/docs/built-in-policies.mdx +3 -3
  87. package/.next/standalone/docs/de/built-in-policies.mdx +97 -60
  88. package/.next/standalone/docs/de/custom-policies.mdx +56 -56
  89. package/.next/standalone/docs/de/examples.mdx +72 -18
  90. package/.next/standalone/docs/de/getting-started.mdx +72 -20
  91. package/.next/standalone/docs/es/built-in-policies.mdx +91 -54
  92. package/.next/standalone/docs/es/custom-policies.mdx +55 -55
  93. package/.next/standalone/docs/es/examples.mdx +73 -19
  94. package/.next/standalone/docs/es/getting-started.mdx +72 -20
  95. package/.next/standalone/docs/fr/built-in-policies.mdx +99 -62
  96. package/.next/standalone/docs/fr/custom-policies.mdx +51 -51
  97. package/.next/standalone/docs/fr/examples.mdx +78 -24
  98. package/.next/standalone/docs/fr/getting-started.mdx +65 -13
  99. package/.next/standalone/docs/he/built-in-policies.mdx +139 -99
  100. package/.next/standalone/docs/he/custom-policies.mdx +75 -75
  101. package/.next/standalone/docs/he/examples.mdx +87 -33
  102. package/.next/standalone/docs/he/getting-started.mdx +84 -33
  103. package/.next/standalone/docs/hi/built-in-policies.mdx +203 -166
  104. package/.next/standalone/docs/hi/custom-policies.mdx +71 -70
  105. package/.next/standalone/docs/hi/examples.mdx +90 -36
  106. package/.next/standalone/docs/hi/getting-started.mdx +80 -27
  107. package/.next/standalone/docs/i18n/README.ar.md +69 -69
  108. package/.next/standalone/docs/i18n/README.de.md +46 -46
  109. package/.next/standalone/docs/i18n/README.es.md +42 -42
  110. package/.next/standalone/docs/i18n/README.fr.md +39 -39
  111. package/.next/standalone/docs/i18n/README.he.md +83 -83
  112. package/.next/standalone/docs/i18n/README.hi.md +69 -69
  113. package/.next/standalone/docs/i18n/README.it.md +72 -72
  114. package/.next/standalone/docs/i18n/README.ja.md +71 -71
  115. package/.next/standalone/docs/i18n/README.ko.md +52 -52
  116. package/.next/standalone/docs/i18n/README.pt-br.md +44 -44
  117. package/.next/standalone/docs/i18n/README.ru.md +66 -66
  118. package/.next/standalone/docs/i18n/README.tr.md +82 -83
  119. package/.next/standalone/docs/i18n/README.vi.md +70 -71
  120. package/.next/standalone/docs/i18n/README.zh.md +51 -51
  121. package/.next/standalone/docs/it/built-in-policies.mdx +115 -78
  122. package/.next/standalone/docs/it/custom-policies.mdx +69 -69
  123. package/.next/standalone/docs/it/examples.mdx +93 -39
  124. package/.next/standalone/docs/it/getting-started.mdx +73 -21
  125. package/.next/standalone/docs/ja/built-in-policies.mdx +155 -118
  126. package/.next/standalone/docs/ja/custom-policies.mdx +71 -71
  127. package/.next/standalone/docs/ja/examples.mdx +76 -22
  128. package/.next/standalone/docs/ja/getting-started.mdx +65 -13
  129. package/.next/standalone/docs/ko/built-in-policies.mdx +103 -66
  130. package/.next/standalone/docs/ko/custom-policies.mdx +67 -67
  131. package/.next/standalone/docs/ko/examples.mdx +87 -33
  132. package/.next/standalone/docs/ko/getting-started.mdx +61 -9
  133. package/.next/standalone/docs/pt-br/built-in-policies.mdx +72 -35
  134. package/.next/standalone/docs/pt-br/custom-policies.mdx +56 -56
  135. package/.next/standalone/docs/pt-br/examples.mdx +78 -24
  136. package/.next/standalone/docs/pt-br/getting-started.mdx +64 -12
  137. package/.next/standalone/docs/ru/built-in-policies.mdx +135 -98
  138. package/.next/standalone/docs/ru/custom-policies.mdx +82 -81
  139. package/.next/standalone/docs/ru/examples.mdx +77 -22
  140. package/.next/standalone/docs/ru/getting-started.mdx +74 -22
  141. package/.next/standalone/docs/tr/built-in-policies.mdx +126 -89
  142. package/.next/standalone/docs/tr/custom-policies.mdx +59 -60
  143. package/.next/standalone/docs/tr/examples.mdx +97 -42
  144. package/.next/standalone/docs/tr/getting-started.mdx +75 -23
  145. package/.next/standalone/docs/vi/built-in-policies.mdx +116 -81
  146. package/.next/standalone/docs/vi/custom-policies.mdx +68 -68
  147. package/.next/standalone/docs/vi/examples.mdx +93 -38
  148. package/.next/standalone/docs/vi/getting-started.mdx +74 -22
  149. package/.next/standalone/docs/zh/built-in-policies.mdx +117 -82
  150. package/.next/standalone/docs/zh/custom-policies.mdx +49 -49
  151. package/.next/standalone/docs/zh/examples.mdx +90 -36
  152. package/.next/standalone/docs/zh/getting-started.mdx +73 -21
  153. package/.next/standalone/package.json +1 -1
  154. package/.next/standalone/server.js +1 -1
  155. package/.next/standalone/src/auth/login.ts +104 -0
  156. package/.next/standalone/src/auth/logout.ts +50 -0
  157. package/.next/standalone/src/auth/token-store.ts +64 -0
  158. package/.next/standalone/src/hooks/builtin-policies.ts +27 -21
  159. package/.next/standalone/src/hooks/handler.ts +35 -15
  160. package/.next/standalone/src/relay/daemon.ts +362 -0
  161. package/.next/standalone/src/relay/pid.ts +76 -0
  162. package/.next/standalone/src/relay/queue.ts +225 -0
  163. package/bin/failproofai.mjs +91 -4
  164. package/dist/cli.mjs +1156 -55
  165. package/package.json +1 -1
  166. package/src/auth/login.ts +104 -0
  167. package/src/auth/logout.ts +50 -0
  168. package/src/auth/token-store.ts +64 -0
  169. package/src/hooks/builtin-policies.ts +27 -21
  170. package/src/hooks/handler.ts +35 -15
  171. package/src/relay/daemon.ts +362 -0
  172. package/src/relay/pid.ts +76 -0
  173. package/src/relay/queue.ts +225 -0
  174. package/.next/standalone/.next/static/chunks/0wlyoif4_kj_t.js +0 -6
  175. /package/.next/standalone/.next/static/{CkmOT-ZvDN-sVULinGVKT → r-wX0MuAfCjbhJm3phQc8}/_buildManifest.js +0 -0
  176. /package/.next/standalone/.next/static/{CkmOT-ZvDN-sVULinGVKT → r-wX0MuAfCjbhJm3phQc8}/_clientMiddlewareManifest.js +0 -0
  177. /package/.next/standalone/.next/static/{CkmOT-ZvDN-sVULinGVKT → r-wX0MuAfCjbhJm3phQc8}/_ssgManifest.js +0 -0
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  title: はじめに
3
- description: "failproofai をインストールし、ポリシーを有効化して、エージェントを安定稼働させましょう"
3
+ description: "failproofaiをインストールし、ポリシーを有効化して、エージェントを安定して動かしましょう"
4
4
  icon: rocket
5
5
  ---
6
6
 
7
- ## 必要環境
7
+ ## 必要要件
8
8
 
9
9
  - **Node.js** >= 20.9.0
10
10
  - **Bun** >= 1.3.0(オプション — ソースからビルドする場合のみ必要)
@@ -31,13 +31,13 @@ bun add -g failproofai
31
31
 
32
32
  <Steps>
33
33
  <Step title="ポリシーを有効化する">
34
- ポリシーとは、エージェントのツール呼び出しの前後に実行されるルールです。破壊的なコマンドの実行、シークレットの漏洩、その他の障害パターンを、実害が生じる前に検出します。
34
+ ポリシーは、エージェントのツール呼び出しの前後に実行されるルールです。破壊的なコマンドやシークレットの漏洩、その他の障害パターンを被害が発生する前に検出します。
35
35
 
36
36
  ```bash
37
37
  failproofai policies --install
38
38
  ```
39
39
 
40
- このコマンドは Claude Code の `settings.json` にフックエントリを書き込みます。単一プロジェクト向けにインストールしたり、特定のポリシーだけを選択することも可能です。
40
+ これにより、Claude Code の `settings.json` にフックエントリが書き込まれます。単一プロジェクト向けにインストールしたり、特定のポリシーを選択したりすることもできます。
41
41
 
42
42
  ```bash
43
43
  failproofai policies --install --scope project
@@ -49,17 +49,17 @@ bun add -g failproofai
49
49
  failproofai policies
50
50
  ```
51
51
 
52
- すべてのポリシー、その有効・無効の状態、および設定済みのパラメータを表示します。
52
+ すべてのポリシー、その有効・無効の状態、設定済みのパラメータを表示します。
53
53
  </Step>
54
54
  <Step title="ダッシュボードを起動する">
55
55
  ```bash
56
56
  failproofai
57
57
  ```
58
58
 
59
- `http://localhost:8020` にローカルダッシュボードを開きます。セッションの閲覧、ツール呼び出しの検査、ポリシーの管理が行えます。
59
+ `http://localhost:8020` にローカルダッシュボードを開きます。セッションの閲覧、ツール呼び出しの確認、ポリシーの管理が行えます。
60
60
  </Step>
61
61
  <Step title="エージェントを実行する">
62
- 通常通り Claude Code を起動してください。エージェントが危険な操作を試みた場合、failproofai が自動的に介入します。エージェントを無人で稼働させておき、何が起きたかをダッシュボードで後から確認できます。
62
+ 通常通り Claude Code を起動してください。エージェントが危険な操作を試みた場合、failproofai が自動的に介入します。無人で実行したまま放置し、ダッシュボードで何が起きたかを後から確認できます。
63
63
  </Step>
64
64
  </Steps>
65
65
 
@@ -75,18 +75,70 @@ Claude Code → failproofai --hook PreToolUse → reads stdin JSON
75
75
  writes decision to stdout
76
76
  ```
77
77
 
78
- 各ポリシーは次の3つのいずれかの判定を返します。
78
+ 各ポリシーは以下の3つの決定のいずれかを返します。
79
79
 
80
80
  - **allow** — エージェントは通常通り処理を続行する
81
81
  - **deny** — アクションがブロックされ、エージェントにその理由が通知される
82
- - **instruct** — エージェントのプロンプトに追加のコンテキストが付加される
82
+ - **instruct** — エージェントのプロンプトに追加のコンテキストが付与される
83
83
 
84
84
  <Note>
85
- ポリシーはローカルプロセス上で実行されます。リモートサービスへのデータ送信は一切行われません。
85
+ ポリシーはローカルプロセス内で実行されます。リモートサービスには何も送信されません。
86
86
  </Note>
87
87
 
88
88
  ---
89
89
 
90
+ ## 規約ベースのポリシーでチームポリシーを設定する
91
+
92
+ チーム全体で品質基準を素早く確立するには、`.failproofai/policies/` の規約を活用するのが最速です。このディレクトリにポリシーファイルを配置するだけで自動的に読み込まれます — フラグも設定変更もインストールコマンドも不要です。
93
+
94
+ <Steps>
95
+ <Step title="ポリシーディレクトリを作成する">
96
+ ```bash
97
+ mkdir -p .failproofai/policies
98
+ ```
99
+ </Step>
100
+ <Step title="ポリシーファイルを追加する">
101
+ サンプルのスターターファイルをコピーするか、独自に作成してください。
102
+
103
+ ```bash
104
+ cp node_modules/failproofai/examples/convention-policies/*.mjs .failproofai/policies/
105
+ ```
106
+
107
+ または新しいファイルを作成する場合:
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="gitにコミットする">
127
+ ```bash
128
+ git add .failproofai/policies/
129
+ git commit -m "Add team quality policies"
130
+ ```
131
+
132
+ failproofai をインストールしているすべてのチームメンバーが、これらのポリシーを自動的に受け取ります。開発者ごとのセットアップは不要です。
133
+ </Step>
134
+ </Steps>
135
+
136
+ <Tip>
137
+ `.failproofai/policies/` をリポジトリにコミットすることで、チーム全体が同じ基準を共有できます。チームが新たな障害パターンを発見したらポリシーを追加してプッシュするだけで、全員が次の `git pull` 時に更新を受け取れます。時間をかけてこれらのポリシーを積み重ねることで、継続的に改善される生きた品質基準が生まれます。
138
+ </Tip>
139
+
140
+ ---
141
+
90
142
  ## データの保存場所
91
143
 
92
144
  すべての設定とログはお使いのマシン上に保存されます。
@@ -97,7 +149,7 @@ Claude Code → failproofai --hook PreToolUse → reads stdin JSON
97
149
  | `~/.failproofai/hook-activity.jsonl` | フック実行履歴 |
98
150
  | `~/.failproofai/hook.log` | カスタムフックエラーのデバッグログ |
99
151
  | `.failproofai/policies-config.json` | プロジェクト別設定(コミット対象) |
100
- | `.failproofai/policies-config.local.json` | 個人用オーバーライド(gitignore 対象) |
152
+ | `.failproofai/policies-config.local.json` | 個人用上書き設定(gitignore対象) |
101
153
 
102
154
  ---
103
155
 
@@ -120,11 +172,11 @@ failproofai policies --uninstall
120
172
  </Card>
121
173
 
122
174
  <Card title="組み込みポリシー" icon="shield" href="/ja/built-in-policies">
123
- パラメータ付き全 26 ポリシーの一覧
175
+ パラメータ付きの全26ポリシー
124
176
  </Card>
125
177
 
126
178
  <Card title="カスタムポリシー" icon="code" href="/ja/custom-policies">
127
- JavaScript で独自のポリシーを作成する
179
+ JavaScriptで独自のポリシーを作成する
128
180
  </Card>
129
181
 
130
182
  <Card title="エージェントモニター" icon="chart-line" href="/ja/dashboard">
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  title: 내장 정책
3
- description: "일반적인 에이전트 실패 유형을 감지하는 30개의 내장 정책 전체 목록"
3
+ description: "일반적인 에이전트 오류 패턴을 감지하는 30가지 내장 정책"
4
4
  icon: shield
5
5
  ---
6
6
 
7
- failproofai 일반적인 에이전트 실패 유형을 감지하는 30개의 내장 정책을 제공합니다. 각 정책은 특정 훅 이벤트 유형과 이름에 따라 실행됩니다. 9개의 정책은 코드를 작성하지 않고도 동작을 조정할 수 있는 파라미터를 허용합니다. 4개의 워크플로우 정책은 Claude가 종료되기 전에 커밋 → 푸시 → PR → CI 파이프라인을 강제합니다.
7
+ failproofai에는 일반적인 에이전트 오류 패턴을 감지하는 30가지 내장 정책이 포함되어 있습니다. 각 정책은 특정 훅 이벤트 유형 도구 이름에 따라 실행됩니다. 9가지 정책은 코드를 작성하지 않고도 동작을 조정할 수 있는 파라미터를 제공합니다. 4가지 워크플로우 정책은 Claude가 중단하기 전에 커밋 → 푸시 → PR → CI 파이프라인을 완료하도록 강제합니다.
8
8
 
9
9
  ---
10
10
 
11
11
  ## 개요
12
12
 
13
- 정책은 카테고리별로 분류됩니다:
13
+ 정책은 다음과 같은 카테고리로 분류됩니다:
14
14
 
15
15
  | 카테고리 | 정책 | 훅 유형 |
16
16
  |----------|----------|-----------|
@@ -21,37 +21,38 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
21
21
  | [Git](#git) | block-push-master, block-work-on-main, block-force-push, warn-git-amend, warn-git-stash-drop, warn-all-files-staged | PreToolUse |
22
22
  | [데이터베이스](#database) | warn-destructive-sql, warn-schema-alteration | PreToolUse |
23
23
  | [경고](#warnings) | warn-large-file-write, warn-package-publish, warn-background-process, warn-global-package-install | PreToolUse |
24
+ | [패키지 매니저](#package-managers) | prefer-package-manager | PreToolUse |
24
25
  | [워크플로우](#workflow) | require-commit-before-stop, require-push-before-stop, require-pr-before-stop, require-ci-green-before-stop | Stop |
25
26
 
26
- - **`block-`** — 에이전트 진행을 차단합니다.
27
- - **`warn-`** — 에이전트가 스스로 수정할 수 있도록 추가 컨텍스트를 제공합니다.
28
- - **`sanitize-`** — 에이전트에게 전달되기 전에 출력에서 민감한 데이터를 제거합니다.
27
+ - **`block-`** — 에이전트가 계속 진행하지 못하도록 차단합니다.
28
+ - **`warn-`** — 에이전트가 스스로 수정할 수 있도록 추가 맥락 정보를 제공합니다.
29
+ - **`sanitize-`** — 에이전트가 도구 출력을 받기 전에 민감한 데이터를 제거합니다.
29
30
  - **`require-`** — 조건이 충족될 때까지 Stop 이벤트를 차단합니다.
30
31
 
31
32
  ---
32
33
 
33
34
  <Tip>
34
- 모든 정책은 `policyParams`에서 선택적 `hint` 필드를 지원합니다. hint는 Claude가 보는 deny 또는 instruct 메시지에 추가되어, 정책 코드를 수정하지 않고도 실행 가능한 안내를 제공합니다. 내장, 커스텀, 컨벤션 정책 모두에서 동작합니다. 자세한 내용은 [구성 → hint](/ko/configuration#hint-cross-cutting)를 참조하세요.
35
+ 모든 정책은 `policyParams`에서 선택적 `hint` 필드를 지원합니다. hint는 Claude가 보는 deny 또는 instruct 메시지에 추가되어, 정책 코드를 수정하지 않고도 실행 가능한 안내를 제공합니다. 내장 정책, 커스텀 정책, 컨벤션 정책 모두에서 사용할 수 있습니다. 자세한 내용은 [설정 → hint](/ko/configuration#hint-cross-cutting)를 참고하세요.
35
36
  </Tip>
36
37
 
37
38
  ---
38
39
 
39
40
  ## 위험한 명령어
40
41
 
41
- 에이전트가 되돌리기 어렵거나 호스트 시스템에 손상을 줄 수 있는 작업을 실행하는 것을 방지합니다.
42
+ 에이전트가 실행하기 어렵거나 호스트 시스템에 손상을 줄 수 있는 작업을 실행하지 못하도록 방지합니다.
42
43
 
43
44
  ### `block-sudo`
44
45
 
45
46
  **이벤트:** PreToolUse (Bash)
46
- **기본 동작:** `sudo` 키워드가 포함된 모든 명령어를 차단합니다.
47
+ **기본값:** `sudo` 명령어가 포함된 모든 명령을 차단합니다.
47
48
 
48
- `sudo` 키워드가 포함된 호출을 차단합니다. 패턴 매칭은 원시 문자열이 아닌 파싱된 명령어 토큰을 기준으로 수행되어, 셸 연산자 인젝션을 통한 우회를 방지합니다.
49
+ `sudo` 키워드가 포함된 명령 실행을 차단합니다. 패턴 매칭은 원시 문자열이 아닌 파싱된 명령 토큰을 기준으로 수행되므로, 셸 연산자 삽입을 통한 우회를 방지합니다.
49
50
 
50
51
  **파라미터:**
51
52
 
52
53
  | 파라미터 | 타입 | 기본값 | 설명 |
53
54
  |-------|------|---------|-------------|
54
- | `allowPatterns` | `string[]` | `[]` | 허용되는 정확한 명령어 프리픽스. 각 항목은 파싱된 argv 토큰과 대조하여 매칭됩니다. |
55
+ | `allowPatterns` | `string[]` | `[]` | 허용되는 정확한 명령 접두사. 각 항목은 파싱된 argv 토큰과 대조됩니다. |
55
56
 
56
57
  **예시:**
57
58
 
@@ -65,10 +66,10 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
65
66
  }
66
67
  ```
67
68
 
68
- 설정을 사용하면 `sudo systemctl status nginx`는 허용되지만, `sudo rm /etc/hosts`는 차단됩니다.
69
+ 설정에서 `sudo systemctl status nginx`는 허용되지만, `sudo rm /etc/hosts`는 차단됩니다.
69
70
 
70
71
  <Note>
71
- 패턴은 원시 명령어 문자열이 아닌 파싱된 토큰과 대조하여 매칭됩니다. 이를 통해 셸 연산자 추가를 통한 우회를 방지합니다 (예: `sudo systemctl status x; rm -rf /`는 `sudo systemctl status *`와 매칭되지 않습니다).
72
+ 패턴은 원시 명령 문자열이 아닌 파싱된 토큰과 대조됩니다. 이를 통해 셸 연산자 추가를 통한 우회를 방지합니다 (예: `sudo systemctl status x; rm -rf /`는 `sudo systemctl status *`와 매칭되지 않습니다).
72
73
  </Note>
73
74
 
74
75
  ---
@@ -76,13 +77,13 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
76
77
  ### `block-rm-rf`
77
78
 
78
79
  **이벤트:** PreToolUse (Bash)
79
- **기본 동작:** `rm -rf`, `rm -fr` 및 유사한 재귀 삭제 형태를 차단합니다.
80
+ **기본값:** `rm -rf`, `rm -fr` 및 유사한 재귀적 삭제 형식을 차단합니다.
80
81
 
81
82
  **파라미터:**
82
83
 
83
84
  | 파라미터 | 타입 | 기본값 | 설명 |
84
85
  |-------|------|---------|-------------|
85
- | `allowPaths` | `string[]` | `[]` | 재귀 삭제가 허용되는 경로 (예: `/tmp`). |
86
+ | `allowPaths` | `string[]` | `[]` | 재귀적 삭제가 허용되는 경로 (예: `/tmp`). |
86
87
 
87
88
  **예시:**
88
89
 
@@ -101,7 +102,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
101
102
  ### `block-curl-pipe-sh`
102
103
 
103
104
  **이벤트:** PreToolUse (Bash)
104
- **기본 동작:** `curl <url> | bash`, `curl <url> | sh`, `wget <url> | bash` 및 유사한 패턴을 차단합니다.
105
+ **기본값:** `curl <url> | bash`, `curl <url> | sh`, `wget <url> | bash` 및 유사한 패턴을 차단합니다.
105
106
 
106
107
  파라미터 없음.
107
108
 
@@ -110,7 +111,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
110
111
  ### `block-failproofai-commands`
111
112
 
112
113
  **이벤트:** PreToolUse (Bash)
113
- **기본 동작:** failproofai 자체를 제거하거나 비활성화하려는 명령어를 차단합니다 (예: `npm uninstall failproofai`, `failproofai policies --uninstall`).
114
+ **기본값:** failproofai 자체를 제거하거나 비활성화하는 명령(예: `npm uninstall failproofai`, `failproofai policies --uninstall`)을 차단합니다.
114
115
 
115
116
  파라미터 없음.
116
117
 
@@ -118,12 +119,12 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
118
119
 
119
120
  ## 시크릿 (새니타이저)
120
121
 
121
- 에이전트가 자격 증명을 컨텍스트나 출력에 노출시키는 것을 방지합니다. 새니타이저 정책은 **PostToolUse** 이벤트에서 실행됩니다. Claude가 Bash 명령어를 실행하거나, 파일을 읽거나, 어떤 툴을 호출할 때, 정책들은 출력이 Claude에게 반환되기 전에 검사합니다. 시크릿 패턴이 감지되면, 정책은 출력이 다시 전달되는 것을 막는 deny 결정을 반환합니다.
122
+ 에이전트가 자격 증명을 컨텍스트나 출력에 노출하지 못하도록 방지합니다. 새니타이저 정책은 **PostToolUse** 이벤트에서 실행됩니다. Claude가 Bash 명령을 실행하거나, 파일을 읽거나, 도구를 호출하면정책들이 출력값을 Claude 반환하기 전에 검사합니다. 시크릿 패턴이 감지되면 해당 정책은 출력이 다시 전달되지 않도록 deny 결정을 반환합니다.
122
123
 
123
124
  ### `sanitize-jwt`
124
125
 
125
- **이벤트:** PostToolUse (모든 )
126
- **기본 동작:** JWT 토큰 (`.`으로 구분된 세 개의 base64url 세그먼트)을 마스킹합니다.
126
+ **이벤트:** PostToolUse (모든 도구)
127
+ **기본값:** JWT 토큰(`.`으로 구분된 세 개의 base64url 세그먼트)을 마스킹합니다.
127
128
 
128
129
  파라미터 없음.
129
130
 
@@ -131,8 +132,8 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
131
132
 
132
133
  ### `sanitize-api-keys`
133
134
 
134
- **이벤트:** PostToolUse (모든 )
135
- **기본 동작:** 일반적인 API 키 형식을 마스킹합니다: Anthropic (`sk-ant-`), OpenAI (`sk-`), GitHub PAT (`ghp_`), AWS 액세스 키 (`AKIA`), Stripe 키 (`sk_live_`, `sk_test_`), Google API 키 (`AIza`).
135
+ **이벤트:** PostToolUse (모든 도구)
136
+ **기본값:** 일반적인 API 키 형식을 마스킹합니다: Anthropic (`sk-ant-`), OpenAI (`sk-`), GitHub PAT (`ghp_`), AWS 액세스 키 (`AKIA`), Stripe 키 (`sk_live_`, `sk_test_`), Google API 키 (`AIza`).
136
137
 
137
138
  **파라미터:**
138
139
 
@@ -159,8 +160,8 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
159
160
 
160
161
  ### `sanitize-connection-strings`
161
162
 
162
- **이벤트:** PostToolUse (모든 )
163
- **기본 동작:** 자격 증명이 포함된 데이터베이스 연결 문자열을 마스킹합니다 (예: `postgresql://user:password@host/db`).
163
+ **이벤트:** PostToolUse (모든 도구)
164
+ **기본값:** 자격 증명이 포함된 데이터베이스 연결 문자열(예: `postgresql://user:password@host/db`)을 마스킹합니다.
164
165
 
165
166
  파라미터 없음.
166
167
 
@@ -168,8 +169,8 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
168
169
 
169
170
  ### `sanitize-private-key-content`
170
171
 
171
- **이벤트:** PostToolUse (모든 )
172
- **기본 동작:** PEM 블록(`-----BEGIN PRIVATE KEY-----`, `-----BEGIN RSA PRIVATE KEY-----` 등)을 마스킹합니다.
172
+ **이벤트:** PostToolUse (모든 도구)
173
+ **기본값:** PEM 블록(`-----BEGIN PRIVATE KEY-----`, `-----BEGIN RSA PRIVATE KEY-----` 등)을 마스킹합니다.
173
174
 
174
175
  파라미터 없음.
175
176
 
@@ -177,8 +178,8 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
177
178
 
178
179
  ### `sanitize-bearer-tokens`
179
180
 
180
- **이벤트:** PostToolUse (모든 )
181
- **기본 동작:** 토큰이 20자 이상인 `Authorization: Bearer <token>` 헤더를 마스킹합니다.
181
+ **이벤트:** PostToolUse (모든 도구)
182
+ **기본값:** 토큰이 20자 이상인 `Authorization: Bearer <token>` 헤더를 마스킹합니다.
182
183
 
183
184
  파라미터 없음.
184
185
 
@@ -186,14 +187,14 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
186
187
 
187
188
  ## 환경
188
189
 
189
- 에이전트가 민감한 환경 구성을 읽거나 노출시키는 것을 보호합니다.
190
+ 에이전트가 민감한 환경 설정을 읽거나 노출하지 못하도록 보호합니다.
190
191
 
191
192
  ### `block-env-files`
192
193
 
193
194
  **이벤트:** PreToolUse (Bash, Read)
194
- **기본 동작:** `cat .env`, `.env`를 파일 경로로 사용하는 `Read` 호출 등을 통한 `.env` 파일 읽기를 차단합니다.
195
+ **기본값:** `cat .env`, 파일 경로가 `.env`인 `Read` 도구 호출 `.env` 파일을 읽는 것을 차단합니다.
195
196
 
196
- `.envrc`나 다른 환경 관련 파일은 차단하지 않으며, 정확히 `.env`라는 이름의 파일만 차단합니다.
197
+ `.envrc`나 다른 환경 관련 파일은 차단하지 않으며, 정확히 `.env`로 명명된 파일만 차단합니다.
197
198
 
198
199
  파라미터 없음.
199
200
 
@@ -202,7 +203,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
202
203
  ### `protect-env-vars`
203
204
 
204
205
  **이벤트:** PreToolUse (Bash)
205
- **기본 동작:** 환경 변수를 출력하는 명령어를 차단합니다: `printenv`, `env`, `echo $VAR`.
206
+ **기본값:** 환경 변수를 출력하는 명령(`printenv`, `env`, `echo $VAR`)을 차단합니다.
206
207
 
207
208
  파라미터 없음.
208
209
 
@@ -210,18 +211,18 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
210
211
 
211
212
  ## 파일 접근
212
213
 
213
- 에이전트가 프로젝트 경계 내에서만 작업하고 민감한 파일에 접근하지 못하도록 합니다.
214
+ 에이전트가 프로젝트 경계 내에서만 작업하고 민감한 파일에 접근하지 못하도록 유지합니다.
214
215
 
215
216
  ### `block-read-outside-cwd`
216
217
 
217
218
  **이벤트:** PreToolUse (Read, Bash)
218
- **기본 동작:** 현재 작업 디렉토리(프로젝트 루트) 외부의 파일 읽기를 차단합니다.
219
+ **기본값:** 현재 작업 디렉터리(프로젝트 루트) 외부의 파일을 읽는 것을 차단합니다.
219
220
 
220
221
  **파라미터:**
221
222
 
222
223
  | 파라미터 | 타입 | 기본값 | 설명 |
223
224
  |-------|------|---------|-------------|
224
- | `allowPaths` | `string[]` | `[]` | cwd 외부에 있더라도 허용되는 절대 경로 프리픽스. |
225
+ | `allowPaths` | `string[]` | `[]` | cwd 외부에 있더라도 허용되는 절대 경로 접두사. |
225
226
 
226
227
  **예시:**
227
228
 
@@ -240,13 +241,13 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
240
241
  ### `block-secrets-write`
241
242
 
242
243
  **이벤트:** PreToolUse (Write, Edit)
243
- **기본 동작:** 개인 키 및 인증서에 일반적으로 사용되는 파일에 대한 쓰기를 차단합니다: `id_rsa`, `id_ed25519`, `*.key`, `*.pem`, `*.p12`, `*.pfx`.
244
+ **기본값:** 개인 키 및 인증서에 일반적으로 사용되는 파일(`id_rsa`, `id_ed25519`, `*.key`, `*.pem`, `*.p12`, `*.pfx`)에 대한 쓰기를 차단합니다.
244
245
 
245
246
  **파라미터:**
246
247
 
247
248
  | 파라미터 | 타입 | 기본값 | 설명 |
248
249
  |-------|------|---------|-------------|
249
- | `additionalPatterns` | `string[]` | `[]` | 차단할 추가 파일명 패턴 (글로브 스타일). |
250
+ | `additionalPatterns` | `string[]` | `[]` | 차단할 추가 파일명 패턴 (글로브 방식). |
250
251
 
251
252
  **예시:**
252
253
 
@@ -269,7 +270,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
269
270
  ### `block-push-master`
270
271
 
271
272
  **이벤트:** PreToolUse (Bash)
272
- **기본 동작:** `git push origin main`과 `git push origin master`를 차단합니다.
273
+ **기본값:** `git push origin main` `git push origin master`를 차단합니다.
273
274
 
274
275
  **파라미터:**
275
276
 
@@ -290,7 +291,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
290
291
  ```
291
292
 
292
293
  <Tip>
293
- `enabledPolicies`에서 정책을 제거하지 않고 모든 브랜치로의 푸시를 허용하려면 (사실상 정책 비활성화), `protectedBranches: []`로 설정하세요.
294
+ `enabledPolicies`에서 제거하지 않고 정책을 사실상 비활성화하려면(모든 브랜치에 푸시 허용), `protectedBranches: []`로 설정하세요.
294
295
  </Tip>
295
296
 
296
297
  ---
@@ -298,7 +299,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
298
299
  ### `block-work-on-main`
299
300
 
300
301
  **이벤트:** PreToolUse (Bash)
301
- **기본 동작:** `main` 또는 `master` 브랜치를 직접 체크아웃하는 것을 차단합니다.
302
+ **기본값:** `main` 또는 `master` 브랜치를 직접 체크아웃하는 것을 차단합니다.
302
303
 
303
304
  **파라미터:**
304
305
 
@@ -311,9 +312,9 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
311
312
  ### `block-force-push`
312
313
 
313
314
  **이벤트:** PreToolUse (Bash)
314
- **기본 동작:** `git push --force`와 `git push -f`를 차단합니다.
315
+ **기본값:** `git push --force` `git push -f`를 차단합니다.
315
316
 
316
- 정책별 파라미터 없음. 크로스커팅 [`hint`](/ko/configuration#hint-cross-cutting)를 사용하여 대안을 제안할 수 있습니다:
317
+ 정책별 파라미터는 없습니다. 공통 [`hint`](/ko/configuration#hint-cross-cutting)를 사용하여 대안을 제안할 수 있습니다:
317
318
 
318
319
  ```json
319
320
  {
@@ -330,7 +331,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
330
331
  ### `warn-git-amend`
331
332
 
332
333
  **이벤트:** PreToolUse (Bash)
333
- **기본 동작:** `git commit --amend` 실행 시 Claude에게 신중하게 진행하도록 안내합니다. 명령어 자체를 차단하지는 않습니다.
334
+ **기본값:** `git commit --amend` 실행 시 Claude에게 주의하여 진행하도록 안내합니다. 명령을 차단하지는 않습니다.
334
335
 
335
336
  파라미터 없음.
336
337
 
@@ -339,7 +340,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
339
340
  ### `warn-git-stash-drop`
340
341
 
341
342
  **이벤트:** PreToolUse (Bash)
342
- **기본 동작:** `git stash drop` 실행 전에 Claude에게 확인하도록 안내합니다. 명령어 자체를 차단하지는 않습니다.
343
+ **기본값:** `git stash drop` 실행 Claude에게 확인하도록 안내합니다. 명령을 차단하지는 않습니다.
343
344
 
344
345
  파라미터 없음.
345
346
 
@@ -348,7 +349,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
348
349
  ### `warn-all-files-staged`
349
350
 
350
351
  **이벤트:** PreToolUse (Bash)
351
- **기본 동작:** `git add -A` 또는 `git add .` 실행 시 Claude에게 스테이징할 내용을 검토하도록 안내합니다. 명령어 자체를 차단하지는 않습니다.
352
+ **기본값:** `git add -A` 또는 `git add .` 실행 시 Claude에게 스테이징할 내용을 검토하도록 안내합니다. 명령을 차단하지는 않습니다.
352
353
 
353
354
  파라미터 없음.
354
355
 
@@ -361,7 +362,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
361
362
  ### `warn-destructive-sql`
362
363
 
363
364
  **이벤트:** PreToolUse (Bash)
364
- **기본 동작:** `DROP TABLE`, `DROP DATABASE`, 또는 `WHERE` 없는 `DELETE`가 포함된 SQL 실행 전에 Claude에게 확인하도록 안내합니다.
365
+ **기본값:** `DROP TABLE`, `DROP DATABASE`, 또는 `WHERE` 절이 없는 `DELETE`가 포함된 SQL 실행 Claude에게 확인하도록 안내합니다.
365
366
 
366
367
  파라미터 없음.
367
368
 
@@ -370,7 +371,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
370
371
  ### `warn-schema-alteration`
371
372
 
372
373
  **이벤트:** PreToolUse (Bash)
373
- **기본 동작:** `ALTER TABLE` 구문 실행 전에 Claude에게 확인하도록 안내합니다.
374
+ **기본값:** `ALTER TABLE` 구문 실행 Claude에게 확인하도록 안내합니다.
374
375
 
375
376
  파라미터 없음.
376
377
 
@@ -378,12 +379,12 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
378
379
 
379
380
  ## 경고
380
381
 
381
- 파괴적이지는 않지만 잠재적으로 위험한 작업 전에 에이전트에게 추가 컨텍스트를 제공합니다.
382
+ 잠재적으로 위험하지만 파괴적이지 않은 작업 전에 에이전트에게 추가 맥락을 제공합니다.
382
383
 
383
384
  ### `warn-large-file-write`
384
385
 
385
386
  **이벤트:** PreToolUse (Write)
386
- **기본 동작:** 1024 KB보다 큰 파일을 쓰기 전에 Claude에게 확인하도록 안내합니다.
387
+ **기본값:** 1024 KB보다 큰 파일을 쓰기 전에 Claude에게 확인하도록 안내합니다.
387
388
 
388
389
  **파라미터:**
389
390
 
@@ -412,7 +413,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
412
413
  ### `warn-package-publish`
413
414
 
414
415
  **이벤트:** PreToolUse (Bash)
415
- **기본 동작:** `npm publish` 실행 전에 Claude에게 확인하도록 안내합니다.
416
+ **기본값:** `npm publish` 실행 Claude에게 확인하도록 안내합니다.
416
417
 
417
418
  파라미터 없음.
418
419
 
@@ -421,7 +422,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
421
422
  ### `warn-background-process`
422
423
 
423
424
  **이벤트:** PreToolUse (Bash)
424
- **기본 동작:** `nohup`, `&`, `disown`, 또는 `screen`을 통해 백그라운드 프로세스를 시작할 때 Claude에게 주의하도록 안내합니다.
425
+ **기본값:** `nohup`, `&`, `disown`, `screen`을 통해 백그라운드 프로세스를 시작할 때 Claude에게 주의하도록 안내합니다.
425
426
 
426
427
  파라미터 없음.
427
428
 
@@ -430,20 +431,56 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
430
431
  ### `warn-global-package-install`
431
432
 
432
433
  **이벤트:** PreToolUse (Bash)
433
- **기본 동작:** `npm install -g`, `yarn global add`, 또는 가상 환경 없이 `pip install` 실행 전에 Claude에게 확인하도록 안내합니다.
434
+ **기본값:** `npm install -g`, `yarn global add`, 또는 가상 환경 없이 `pip install` 실행 Claude에게 확인하도록 안내합니다.
434
435
 
435
436
  파라미터 없음.
436
437
 
437
438
  ---
438
439
 
440
+ ## 패키지 매니저
441
+
442
+ 에이전트가 사용할 수 있는 패키지 매니저를 제한합니다.
443
+
444
+ ### `prefer-package-manager`
445
+
446
+ **이벤트:** PreToolUse (Bash)
447
+ **기본값:** 비활성화됨. 활성화 시, `allowed` 목록에 없는 패키지 매니저 명령을 차단하고 허용된 매니저를 사용하도록 Claude에게 명령을 재작성하도록 안내합니다.
448
+
449
+ 감지 대상: pip, pip3, python -m pip, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo.
450
+
451
+ | 파라미터 | 타입 | 기본값 | 설명 |
452
+ |-----------|------|---------|-------------|
453
+ | `allowed` | string[] | `[]` | 허용되는 패키지 매니저 이름. 이 목록에 없는 감지된 매니저는 차단됩니다. 비어 있으면 정책이 동작하지 않습니다. |
454
+ | `blocked` | string[] | `[]` | 내장 목록 외에 추가로 차단할 매니저 이름 (예: `['pdm', 'pipx']`). |
455
+
456
+ 내장 차단 목록에는 pip, pip3, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo가 포함됩니다. `blocked`를 사용하여 이 목록에 없는 매니저를 추가할 수 있습니다.
457
+
458
+ **예시 설정:**
459
+
460
+ ```json
461
+ {
462
+ "enabledPolicies": ["prefer-package-manager"],
463
+ "policyParams": {
464
+ "prefer-package-manager": {
465
+ "allowed": ["uv", "bun"],
466
+ "blocked": ["pdm", "pipx"]
467
+ }
468
+ }
469
+ }
470
+ ```
471
+
472
+ 이 설정에서 `pip install flask`와 `pdm install flask`는 모두 차단되며, `uv` 또는 `bun`을 사용하도록 안내하는 메시지가 표시됩니다. `uv pip install flask`와 같은 명령은 `uv`가 허용 목록에 있고 우선적으로 확인되므로 허용됩니다.
473
+
474
+ ---
475
+
439
476
  ## AI 동작
440
477
 
441
- 에이전트가 멈추거나 예기치 않게 동작하는 경우를 감지합니다.
478
+ 에이전트가 루프에 빠지거나 예상치 못한 동작을 보일 때 감지합니다.
442
479
 
443
480
  ### `warn-repeated-tool-calls`
444
481
 
445
- **이벤트:** PreToolUse (모든 )
446
- **기본 동작:** 동일한 툴이 동일한 파라미터로 3회 이상 호출될 때 Claude에게 재고하도록 안내합니다 이는 에이전트가 루프에 빠진 일반적인 신호입니다.
482
+ **이벤트:** PreToolUse (모든 도구)
483
+ **기본값:** 동일한 도구가 동일한 파라미터로 3회 이상 호출될 때 Claude에게 재고하도록 안내합니다. 이는 에이전트가 루프에 빠졌다는 일반적인 신호입니다.
447
484
 
448
485
  파라미터 없음.
449
486
 
@@ -451,14 +488,14 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
451
488
 
452
489
  ## 워크플로우
453
490
 
454
- 세션 종료 시 체계적인 워크플로우를 강제합니다. 이 정책들은 **Stop** 이벤트에서 실행되며, 각 조건이 충족될 때까지 Claude의 종료를 차단합니다. 커밋 → 푸시 → PR → CI의 자연스러운 의존성 체인을 따릅니다. 정책이 deny를 반환하면, 체인의 이후 정책은 건너뜁니다 (deny 단락 평가).
491
+ 세션 종료 시 규율 있는 워크플로우를 강제합니다. 이 정책들은 **Stop** 이벤트에서 실행되며, 각 조건이 충족될 때까지 Claude의 중단을 차단합니다. 커밋 → 푸시 → PR → CI의 자연스러운 의존성 체인을 따릅니다. 정책이 deny를 반환하면 이후 정책들은 건너뜁니다 (deny 단락 평가).
455
492
 
456
- 모든 워크플로우 정책은 **fail-open** 방식입니다: 필요한 툴을 사용할 수 없는 경우 (예: `gh`가 설치되지 않음, git 원격 없음), 정책은 검사를 건너뛴 이유를 설명하는 안내 메시지와 함께 허용합니다.
493
+ 모든 워크플로우 정책은 **fail-open** 방식입니다: 필요한 도구를 사용할 수 없는 경우(예: `gh` 미설치, git 원격 없음), 정책은 검사가 건너뛰어진 이유를 설명하는 안내 메시지와 함께 허용합니다.
457
494
 
458
495
  ### `require-commit-before-stop`
459
496
 
460
497
  **이벤트:** Stop
461
- **기본 동작:** 커밋되지 않은 변경 사항(수정됨, 스테이징됨, 추적되지 않는 파일)이 있을 때 종료를 차단합니다. 작업 디렉토리가 깨끗할 때는 안내 메시지를 반환합니다.
498
+ **기본값:** 커밋되지 않은 변경사항(수정됨, 스테이징됨, 추적되지 않은 파일)이 있을 때 중단을 차단합니다. 작업 디렉터리가 깨끗한 경우 안내 메시지를 반환합니다.
462
499
 
463
500
  파라미터 없음.
464
501
 
@@ -467,7 +504,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
467
504
  ### `require-push-before-stop`
468
505
 
469
506
  **이벤트:** Stop
470
- **기본 동작:** 푸시되지 않은 커밋이 있거나 현재 브랜치에 원격 추적 브랜치가 없을 때 종료를 차단합니다. 필요한 경우 추적 브랜치 생성을 위해 `git push -u`를 제안합니다. 원격이 구성되지 않은 경우 fail-open 처리됩니다.
507
+ **기본값:** 푸시되지 않은 커밋이 있거나 현재 브랜치에 원격 추적 브랜치가 없을 때 중단을 차단합니다. 필요한 경우 추적 브랜치를 생성하도록 `git push -u`를 제안합니다. 원격이 설정되지 않은 경우 fail-open 방식으로 동작합니다.
471
508
 
472
509
  **파라미터:**
473
510
 
@@ -492,13 +529,13 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
492
529
  ### `require-pr-before-stop`
493
530
 
494
531
  **이벤트:** Stop
495
- **기본 동작:** 현재 브랜치에 대한 풀 리퀘스트가 없거나, 기존 PR이 닫혔거나 머지된 경우 종료를 차단합니다. `gh pr create`로 PR을 생성하도록 Claude에게 안내합니다.
532
+ **기본값:** 현재 브랜치에 풀 리퀘스트가 없거나 기존 PR이 closed/merged 상태일 중단을 차단합니다. `gh pr create`로 PR을 생성하도록 Claude에게 안내합니다.
496
533
 
497
534
  파라미터 없음.
498
535
 
499
536
  <Note>
500
- 정책은 [GitHub CLI](https://cli.github.com/) (`gh`)가 설치되고 인증되어 있어야 합니다.
501
- 리퀘스트에 대한 읽기 접근을 위해 `repo` 스코프를 가진 개인 액세스 토큰으로 `gh auth login`을 실행하세요. `gh`가 설치되지 않거나 인증되지 않은 경우, 정책은 fail-open 처리되고 Claude에게 이유를 보고합니다.
537
+ 정책을 사용하려면 [GitHub CLI](https://cli.github.com/) (`gh`)가 설치되어 있고 인증되어 있어야 합니다.
538
+ 리퀘스트 읽기 권한을 위해 `repo` 스코프를 가진 개인 액세스 토큰으로 `gh auth login`을 실행하세요. `gh`가 설치되어 있지 않거나 인증되지 않은 경우, 정책은 fail-open 방식으로 동작하며 그 이유를 Claude에게 보고합니다.
502
539
  </Note>
503
540
 
504
541
  ---
@@ -506,13 +543,13 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
506
543
  ### `require-ci-green-before-stop`
507
544
 
508
545
  **이벤트:** Stop
509
- **기본 동작:** 현재 브랜치에서 CI 검사가 실패 중이거나 아직 실행 중일 때 종료를 차단합니다. GitHub Actions 워크플로우 실행과 서드파티 봇 검사(예: CodeRabbit, SonarCloud, Codecov) 모두 확인합니다. `skipped` 결론은 성공으로 처리합니다. 모든 검사가 통과하면 안내 메시지를 반환합니다.
546
+ **기본값:** 현재 브랜치의 CI 검사가 실패하거나 아직 실행 중일 때 중단을 차단합니다. GitHub Actions 워크플로우 실행과 서드파티 봇 검사(예: CodeRabbit, SonarCloud, Codecov) 모두를 확인합니다. `skipped` `cancelled` 결과는 성공으로 처리합니다. 모든 검사가 통과되면 안내 메시지를 반환합니다.
510
547
 
511
548
  파라미터 없음.
512
549
 
513
550
  <Note>
514
- 정책은 [GitHub CLI](https://cli.github.com/) (`gh`)가 설치되고 인증되어 있어야 합니다.
515
- Actions 워크플로우 실행 및 Checks API에 대한 읽기 접근을 위해 `repo` 스코프를 가진 개인 액세스 토큰으로 `gh auth login`을 실행하세요. `gh`가 설치되지 않거나 인증되지 않은 경우, 정책은 fail-open 처리되고 Claude에게 이유를 보고합니다.
551
+ 정책을 사용하려면 [GitHub CLI](https://cli.github.com/) (`gh`)가 설치되어 있고 인증되어 있어야 합니다.
552
+ Actions 워크플로우 실행 및 Checks API에 대한 읽기 권한을 위해 `repo` 스코프를 가진 개인 액세스 토큰으로 `gh auth login`을 실행하세요. `gh`가 설치되어 있지 않거나 인증되지 않은 경우, 정책은 fail-open 방식으로 동작하며 그 이유를 Claude에게 보고합니다.
516
553
  </Note>
517
554
 
518
555
  ---
@@ -521,7 +558,7 @@ Actions 워크플로우 실행 및 Checks API에 대한 읽기 접근을 위해
521
558
 
522
559
  ## 개별 정책 비활성화
523
560
 
524
- 설정 파일의 `enabledPolicies`에서 특정 정책을 제거하거나, 대시보드의 Policies 탭에서 토글로 끄세요.
561
+ 설정 파일의 `enabledPolicies`에서 특정 정책을 제거하거나, 대시보드의 Policies 탭에서 해제합니다.
525
562
 
526
563
  ```json
527
564
  {