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,57 +1,58 @@
1
1
  ---
2
- title: 내장 정책
3
- description: "일반적인 에이전트 실패 유형을 감지하는 30개의 내장 정책 전체 목록"
2
+ title: 기본 제공 정책
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
  |----------|----------|-----------|
17
- | [위험한 명령어](#dangerous-commands) | block-sudo, block-rm-rf, block-curl-pipe-sh, block-failproofai-commands | PreToolUse |
17
+ | [위험 명령어](#dangerous-commands) | block-sudo, block-rm-rf, block-curl-pipe-sh, block-failproofai-commands | PreToolUse |
18
18
  | [시크릿 (새니타이저)](#secrets-sanitizers) | sanitize-jwt, sanitize-api-keys, sanitize-connection-strings, sanitize-private-key-content, sanitize-bearer-tokens | PostToolUse |
19
19
  | [환경](#environment) | block-env-files, protect-env-vars | PreToolUse |
20
20
  | [파일 접근](#file-access) | block-read-outside-cwd, block-secrets-write | PreToolUse |
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
- | [워크플로우](#workflow) | require-commit-before-stop, require-push-before-stop, require-pr-before-stop, require-ci-green-before-stop | Stop |
24
+ | [패키지 매니저](#package-managers) | prefer-package-manager | PreToolUse |
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
+ - **`block-`** — 에이전트의 진행을 차단합니다.
27
28
  - **`warn-`** — 에이전트가 스스로 수정할 수 있도록 추가 컨텍스트를 제공합니다.
28
- - **`sanitize-`** — 에이전트에게 전달되기 전에 출력에서 민감한 데이터를 제거합니다.
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` 필드를 지원합니다. 힌트는 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
  ---
@@ -78,11 +79,11 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
78
79
  **이벤트:** PreToolUse (Bash)
79
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
 
@@ -103,40 +104,40 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
103
104
  **이벤트:** PreToolUse (Bash)
104
105
  **기본 동작:** `curl <url> | bash`, `curl <url> | sh`, `wget <url> | bash` 및 유사한 패턴을 차단합니다.
105
106
 
106
- 파라미터 없음.
107
+ 매개변수 없음.
107
108
 
108
109
  ---
109
110
 
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
 
117
118
  ---
118
119
 
119
120
  ## 시크릿 (새니타이저)
120
121
 
121
- 에이전트가 자격 증명을 컨텍스트나 출력에 노출시키는 것을 방지합니다. 새니타이저 정책은 **PostToolUse** 이벤트에서 실행됩니다. Claude가 Bash 명령어를 실행하거나, 파일을 읽거나, 어떤 툴을 호출할 때, 이 정책들은 출력이 Claude에게 반환되기 전에 검사합니다. 시크릿 패턴이 감지되면, 정책은 출력이 다시 전달되는 것을 막는 deny 결정을 반환합니다.
122
+ 에이전트가 자격 증명을 컨텍스트나 출력에 노출하지 못하도록 방지합니다. 새니타이저 정책은 **PostToolUse** 이벤트에서 실행됩니다. Claude가 Bash 명령어를 실행하거나, 파일을 읽거나, 도구를 호출할 이 정책들은 출력이 Claude에게 반환되기 전에 검사합니다. 시크릿 패턴이 감지되면, 정책은 출력이 전달되지 않도록 차단 결정을 반환합니다.
122
123
 
123
124
  ### `sanitize-jwt`
124
125
 
125
- **이벤트:** PostToolUse (모든 )
126
- **기본 동작:** JWT 토큰 (`.`으로 구분된 개의 base64url 세그먼트)을 마스킹합니다.
126
+ **이벤트:** PostToolUse (모든 도구)
127
+ **기본 동작:** JWT 토큰(`.`으로 구분된 3개의 base64url 세그먼트)을 마스킹합니다.
127
128
 
128
- 파라미터 없음.
129
+ 매개변수 없음.
129
130
 
130
131
  ---
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
 
139
- | 파라미터 | 타입 | 기본값 | 설명 |
140
+ | 매개변수 | 타입 | 기본값 | 설명 |
140
141
  |-------|------|---------|-------------|
141
142
  | `additionalPatterns` | `{ regex: string; label: string }[]` | `[]` | 시크릿으로 처리할 추가 정규식 패턴. |
142
143
 
@@ -159,43 +160,43 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
159
160
 
160
161
  ### `sanitize-connection-strings`
161
162
 
162
- **이벤트:** PostToolUse (모든 )
163
+ **이벤트:** PostToolUse (모든 도구)
163
164
  **기본 동작:** 자격 증명이 포함된 데이터베이스 연결 문자열을 마스킹합니다 (예: `postgresql://user:password@host/db`).
164
165
 
165
- 파라미터 없음.
166
+ 매개변수 없음.
166
167
 
167
168
  ---
168
169
 
169
170
  ### `sanitize-private-key-content`
170
171
 
171
- **이벤트:** PostToolUse (모든 )
172
+ **이벤트:** PostToolUse (모든 도구)
172
173
  **기본 동작:** PEM 블록(`-----BEGIN PRIVATE KEY-----`, `-----BEGIN RSA PRIVATE KEY-----` 등)을 마스킹합니다.
173
174
 
174
- 파라미터 없음.
175
+ 매개변수 없음.
175
176
 
176
177
  ---
177
178
 
178
179
  ### `sanitize-bearer-tokens`
179
180
 
180
- **이벤트:** PostToolUse (모든 )
181
+ **이벤트:** PostToolUse (모든 도구)
181
182
  **기본 동작:** 토큰이 20자 이상인 `Authorization: Bearer <token>` 헤더를 마스킹합니다.
182
183
 
183
- 파라미터 없음.
184
+ 매개변수 없음.
184
185
 
185
186
  ---
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
197
  `.envrc`나 다른 환경 관련 파일은 차단하지 않으며, 정확히 `.env`라는 이름의 파일만 차단합니다.
197
198
 
198
- 파라미터 없음.
199
+ 매개변수 없음.
199
200
 
200
201
  ---
201
202
 
@@ -204,7 +205,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
204
205
  **이벤트:** PreToolUse (Bash)
205
206
  **기본 동작:** 환경 변수를 출력하는 명령어를 차단합니다: `printenv`, `env`, `echo $VAR`.
206
207
 
207
- 파라미터 없음.
208
+ 매개변수 없음.
208
209
 
209
210
  ---
210
211
 
@@ -215,13 +216,13 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
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
 
@@ -242,11 +243,11 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
242
243
  **이벤트:** PreToolUse (Write, Edit)
243
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[]` | `[]` | 차단할 추가 파일명 패턴 (glob 형식). |
250
251
 
251
252
  **예시:**
252
253
 
@@ -269,11 +270,11 @@ 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
 
276
- | 파라미터 | 타입 | 기본값 | 설명 |
277
+ | 매개변수 | 타입 | 기본값 | 설명 |
277
278
  |-------|------|---------|-------------|
278
279
  | `protectedBranches` | `string[]` | `["main", "master"]` | 직접 푸시할 수 없는 브랜치 이름. |
279
280
 
@@ -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,11 +299,11 @@ 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
 
305
- | 파라미터 | 타입 | 기본값 | 설명 |
306
+ | 매개변수 | 타입 | 기본값 | 설명 |
306
307
  |-------|------|---------|-------------|
307
308
  | `protectedBranches` | `string[]` | `["main", "master"]` | 직접 체크아웃할 수 없는 브랜치 이름. |
308
309
 
@@ -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,64 +331,64 @@ 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
 
337
338
  ---
338
339
 
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
 
346
347
  ---
347
348
 
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
 
355
356
  ---
356
357
 
357
358
  ## 데이터베이스
358
359
 
359
- 데이터베이스에 실행되기 전에 파괴적인 SQL 작업을 감지합니다.
360
+ 데이터베이스에 대해 실행되기 전에 파괴적인 SQL 작업을 감지합니다.
360
361
 
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
 
368
369
  ---
369
370
 
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
 
377
378
  ---
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
 
390
- | 파라미터 | 타입 | 기본값 | 설명 |
391
+ | 매개변수 | 타입 | 기본값 | 설명 |
391
392
  |-------|------|---------|-------------|
392
393
  | `thresholdKb` | `number` | `1024` | 경고가 발생하는 파일 크기 임계값 (킬로바이트). |
393
394
 
@@ -404,7 +405,7 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
404
405
  ```
405
406
 
406
407
  <Note>
407
- 훅 핸들러는 페이로드에 대해 1 MB stdin 제한을 적용합니다. 소용량 콘텐츠로 이 정책을 테스트하려면 `thresholdKb`를 1024보다 훨씬 낮은 값으로 설정하세요.
408
+ 훅 핸들러는 페이로드에 대해 1 MB stdin 제한을 적용합니다. 작은 콘텐츠로 이 정책을 테스트하려면 `thresholdKb`를 1024보다 훨씬 낮은 값으로 설정하세요.
408
409
  </Note>
409
410
 
410
411
  ---
@@ -412,27 +413,63 @@ 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
 
419
420
  ---
420
421
 
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
 
428
429
  ---
429
430
 
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
+ 매개변수 없음.
437
+
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` 모두 차단되며, Claude에게 `uv` 또는 `bun`을 사용하라는 메시지가 표시됩니다. `uv pip install flask`와 같은 명령어는 `uv`가 허용 목록에 있고 먼저 확인되므로 허용됩니다.
436
473
 
437
474
  ---
438
475
 
@@ -442,36 +479,36 @@ failproofai는 일반적인 에이전트 실패 유형을 감지하는 30개의
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
 
450
487
  ---
451
488
 
452
- ## 워크플로우
489
+ ## 워크플로
453
490
 
454
- 세션 종료 시 체계적인 워크플로우를 강제합니다. 이 정책들은 **Stop** 이벤트에서 실행되며, 각 조건이 충족될 때까지 Claude의 종료를 차단합니다. 커밋 → 푸시 → PR → CI의 자연스러운 의존성 체인을 따릅니다. 정책이 deny를 반환하면, 체인의 이후 정책은 건너뜁니다 (deny 단락 평가).
491
+ 세션 종료 시 규율 있는 워크플로를 강제합니다. 이 정책들은 **Stop** 이벤트에서 실행되며, 각 조건이 충족될 때까지 Claude의 종료를 차단합니다. 커밋 → 푸시 → PR → CI의 자연스러운 의존성 체인을 따릅니다. 정책이 차단되면 체인의 이후 정책은 건너뜁니다 (차단 단락).
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
 
465
502
  ---
466
503
 
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
 
474
- | 파라미터 | 타입 | 기본값 | 설명 |
511
+ | 매개변수 | 타입 | 기본값 | 설명 |
475
512
  |-------|------|---------|-------------|
476
513
  | `remote` | `string` | `"origin"` | 푸시할 원격 이름. |
477
514
 
@@ -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이 닫혔거나 병합된 경우 종료를 차단합니다. `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` 결론은 성공으로 처리합니다. 모든 검사가 통과되면 안내 메시지를 반환합니다.
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
  {