cc-safe-setup 29.7.0 → 30.0.4

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 (1022) hide show
  1. package/.claude-plugin/marketplace.json +72 -19
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CONTRIBUTING.md +7 -2
  4. package/COOKBOOK.md +50 -46
  5. package/LICENSE +21 -0
  6. package/MIGRATION.md +8 -8
  7. package/README.md +419 -512
  8. package/SAFETY_CHECKLIST.md +15 -7
  9. package/SERVICES.md +194 -0
  10. package/SETTINGS_REFERENCE.md +236 -17
  11. package/SKILL.md +5 -5
  12. package/TROUBLESHOOTING.md +35 -14
  13. package/action.yml +12 -4
  14. package/audit/README.md +84 -0
  15. package/audit/audit-checklist.md +152 -0
  16. package/audit/boundary-selftest.sh +85 -0
  17. package/audit/boundary.sh +123 -0
  18. package/audit/count-hooks.py +42 -0
  19. package/audit/find-dead-hooks.sh +82 -0
  20. package/audit/find-unfirable-rules.sh +142 -0
  21. package/audit/fire.sh +97 -0
  22. package/audit/selftest.sh +42 -0
  23. package/audit/unfirable-selftest.sh +81 -0
  24. package/audit-web/index.html +9 -9
  25. package/examples/README.md +54 -17
  26. package/examples/account-billing-log.sh +98 -0
  27. package/examples/account-routing-preflight.sh +123 -0
  28. package/examples/agent-sdk-credit-pool-monitor.sh +145 -0
  29. package/examples/agent-view-quota-decrement.sh +32 -0
  30. package/examples/agent-view-quota-warn.sh +94 -0
  31. package/examples/agents-md-edit-drift-warner.sh +223 -0
  32. package/examples/agents-md-loader.sh +160 -0
  33. package/examples/agents-md-sync-checker.sh +102 -0
  34. package/examples/ai-slop-punctuation-arrest.sh +210 -0
  35. package/examples/allowlist.sh +70 -10
  36. package/examples/always-allow-pattern-suggester.sh +125 -0
  37. package/examples/ansible-vault-guard.sh +2 -1
  38. package/examples/anthropic-base-url-guard.sh +76 -0
  39. package/examples/api-busyloop-guard.sh +123 -0
  40. package/examples/api-endpoint-guard.sh +12 -0
  41. package/examples/api-key-in-url-guard.sh +17 -1
  42. package/examples/api-rate-limit-guard.sh +36 -1
  43. package/examples/api-rate-limit-tracker.sh +12 -0
  44. package/examples/articulated-scope-capture.sh +101 -0
  45. package/examples/askuserquestion-autonomy-gate.sh +102 -0
  46. package/examples/attachment-traversal-guard.sh +118 -0
  47. package/examples/aup-block-pattern-logger.sh +161 -0
  48. package/examples/aup-false-positive-helper.sh +124 -0
  49. package/examples/aup-large-tool-output-warner.sh +282 -0
  50. package/examples/aup-retry-loop-guard.sh +229 -0
  51. package/examples/auth-expiry-reminder.sh +157 -0
  52. package/examples/auth-macos-sleep-detector.sh +185 -0
  53. package/examples/auth-path-detector.sh +171 -0
  54. package/examples/auth-status-checker.sh +157 -0
  55. package/examples/authorized-reconfirmation-detector.sh +195 -0
  56. package/examples/auto-approve-build.sh +39 -0
  57. package/examples/auto-approve-cargo.sh +31 -1
  58. package/examples/auto-approve-docker.sh +35 -0
  59. package/examples/auto-approve-git-read.sh +37 -14
  60. package/examples/auto-approve-go.sh +30 -1
  61. package/examples/auto-approve-gradle.sh +29 -1
  62. package/examples/auto-approve-make.sh +29 -1
  63. package/examples/auto-approve-maven.sh +29 -1
  64. package/examples/auto-approve-python.sh +41 -1
  65. package/examples/auto-approve-readonly-tools.sh +1 -0
  66. package/examples/auto-approve-readonly.sh +110 -33
  67. package/examples/auto-approve-ssh.sh +30 -1
  68. package/examples/auto-approve-test.sh +44 -0
  69. package/examples/auto-checkpoint.sh +1 -1
  70. package/examples/auto-compact-prep.sh +0 -0
  71. package/examples/auto-git-checkpoint.sh +0 -0
  72. package/examples/auto-mode-safe-commands.sh +53 -1
  73. package/examples/auto-mode-safety-enforcer.sh +151 -4
  74. package/examples/auto-push-session-branch.sh +22 -0
  75. package/examples/aws-production-guard.sh +13 -1
  76. package/examples/aws-region-guard.sh +1 -1
  77. package/examples/background-cost-launch-guard.sh +82 -0
  78. package/examples/background-task-guard.sh +12 -0
  79. package/examples/backup-before-refactor.sh +0 -0
  80. package/examples/banned-command-guard.sh +12 -0
  81. package/examples/bash-allowlist-secondary-check.sh +157 -0
  82. package/examples/bash-domain-allowlist.sh +12 -0
  83. package/examples/bash-fanout-bounded-rewriter.sh +191 -0
  84. package/examples/bash-heuristic-approver.sh +112 -10
  85. package/examples/bash-project-fence.sh +194 -0
  86. package/examples/bash-safety-auto-deny.sh +12 -0
  87. package/examples/bash-secret-output-detector.sh +44 -3
  88. package/examples/bash-trace-guard.sh +12 -0
  89. package/examples/bashrc-safety-check.sh +0 -0
  90. package/examples/bg-permission-prompt-warner.sh +182 -0
  91. package/examples/bg-task-cooldown-guard.sh +12 -0
  92. package/examples/binary-read-detector.sh +135 -0
  93. package/examples/binary-upload-guard.sh +12 -0
  94. package/examples/block-database-wipe.sh +35 -10
  95. package/examples/branch-name-check.sh +8 -3
  96. package/examples/branch-naming-convention.sh +0 -0
  97. package/examples/broad-find-guard.sh +12 -0
  98. package/examples/broad-prefix-session-trap-warner.sh +106 -0
  99. package/examples/bulk-file-delete-guard.sh +45 -0
  100. package/examples/bypass-mode-effective-verifier.sh +203 -0
  101. package/examples/cache-creation-drift-detector.sh +120 -0
  102. package/examples/cache-residue-detector.sh +195 -0
  103. package/examples/cache-tier-logger.sh +70 -0
  104. package/examples/cache-ttl-eviction-detector.sh +149 -0
  105. package/examples/cargo-publish-guard.sh +14 -1
  106. package/examples/case-insensitive-path-guard.sh +21 -2
  107. package/examples/case-sensitive-guard.sh +23 -2
  108. package/examples/cch-cache-guard.sh +0 -0
  109. package/examples/cch-sentinel-precommit-guard.sh +47 -0
  110. package/examples/check-abort-controller.sh +1 -1
  111. package/examples/check-accessibility.sh +0 -0
  112. package/examples/check-aria-labels.sh +0 -0
  113. package/examples/check-before-act-enforcer.sh +12 -0
  114. package/examples/check-charset-meta.sh +0 -0
  115. package/examples/check-cookie-flags.sh +0 -0
  116. package/examples/check-cors-config.sh +0 -0
  117. package/examples/check-csp-headers.sh +0 -0
  118. package/examples/check-csrf-protection.sh +0 -0
  119. package/examples/check-debounce.sh +1 -1
  120. package/examples/check-dependency-age.sh +0 -0
  121. package/examples/check-dependency-license.sh +0 -0
  122. package/examples/check-dockerfile-best-practice.sh +0 -0
  123. package/examples/check-error-boundaries.sh +0 -0
  124. package/examples/check-error-class.sh +1 -1
  125. package/examples/check-error-handling.sh +0 -0
  126. package/examples/check-error-logging.sh +1 -1
  127. package/examples/check-error-message.sh +0 -0
  128. package/examples/check-error-stack.sh +0 -0
  129. package/examples/check-favicon.sh +0 -0
  130. package/examples/check-git-hooks-compat.sh +0 -0
  131. package/examples/check-gitattributes.sh +0 -0
  132. package/examples/check-https-redirect.sh +0 -0
  133. package/examples/check-input-validation.sh +0 -0
  134. package/examples/check-lang-attribute.sh +0 -0
  135. package/examples/check-npm-scripts-exist.sh +0 -0
  136. package/examples/check-package-size.sh +0 -0
  137. package/examples/check-port-availability.sh +0 -0
  138. package/examples/check-promise-all.sh +1 -1
  139. package/examples/check-rate-limiting.sh +0 -0
  140. package/examples/check-return-types.sh +0 -0
  141. package/examples/check-semantic-versioning.sh +0 -0
  142. package/examples/check-suspense-fallback.sh +1 -1
  143. package/examples/check-test-exists.sh +0 -0
  144. package/examples/check-test-naming.sh +0 -0
  145. package/examples/check-timeout-cleanup.sh +1 -1
  146. package/examples/check-tls-version.sh +0 -0
  147. package/examples/check-unsubscribe.sh +1 -1
  148. package/examples/check-viewport-meta.sh +0 -0
  149. package/examples/check-worker-terminate.sh +1 -1
  150. package/examples/checkpoint-tamper-guard.sh +12 -0
  151. package/examples/chmod-guard.sh +12 -0
  152. package/examples/chown-guard.sh +24 -0
  153. package/examples/ci-workflow-guard.sh +6 -1
  154. package/examples/claim-verify-detector.sh +109 -0
  155. package/examples/claim-vs-caveat-checker.sh +77 -0
  156. package/examples/classifier-fallback-allow.sh +114 -40
  157. package/examples/claude-cache-gc.sh +1 -0
  158. package/examples/claude-code-version-pin-advisor.sh +183 -0
  159. package/examples/claude-md-reinjector.sh +129 -0
  160. package/examples/claude-md-size-monitor.sh +66 -0
  161. package/examples/claude-update-budget-guard.sh +123 -0
  162. package/examples/claude-update-smart.sh +113 -0
  163. package/examples/claudeignore-enforce-guard.sh +12 -0
  164. package/examples/claudemd-enforcer.sh +0 -0
  165. package/examples/claudemd-tool-prohibition.sh +128 -0
  166. package/examples/clear-command-confirm-guard.sh +32 -15
  167. package/examples/cli-config-pinning-detector.sh +162 -0
  168. package/examples/cliff-countdown-advisor.sh +96 -0
  169. package/examples/clipboard-secret-guard.sh +12 -0
  170. package/examples/closure-word-verify-gate.sh +150 -0
  171. package/examples/cloud-cli-guard.sh +39 -2
  172. package/examples/commit-all-scope-guard.sh +44 -0
  173. package/examples/commit-message-check.sh +1 -1
  174. package/examples/commit-message-quality.sh +6 -1
  175. package/examples/commitment-carry-forward-arrest.sh +361 -0
  176. package/examples/compact-alert-notification.sh +0 -0
  177. package/examples/compact-circuit-breaker.sh +72 -0
  178. package/examples/compact-dispatch-watchdog.sh +149 -0
  179. package/examples/completion-claim-without-verification-detector.sh +207 -0
  180. package/examples/composer-guard.sh +12 -0
  181. package/examples/compound-bash-permission-resolver.sh +156 -0
  182. package/examples/compound-command-allow.sh +1 -1
  183. package/examples/compound-command-deny-enforcer.sh +183 -0
  184. package/examples/compound-inject-guard.sh +12 -0
  185. package/examples/concurrent-edit-lock.sh +12 -0
  186. package/examples/conflict-marker-guard.sh +12 -0
  187. package/examples/consecutive-error-breaker.sh +0 -0
  188. package/examples/console-log-count.sh +1 -0
  189. package/examples/context-compact-advisor.sh +29 -2
  190. package/examples/context-length-budget.sh +69 -0
  191. package/examples/context-threshold-alert.sh +12 -0
  192. package/examples/context-usage-drift-alert.sh +41 -13
  193. package/examples/conversation-history-guard.sh +12 -0
  194. package/examples/core-file-protect-guard.sh +12 -0
  195. package/examples/cors-star-warn.sh +0 -0
  196. package/examples/cost-incident-self-audit.sh +162 -0
  197. package/examples/cowork-claude-md-load-checker.sh +100 -0
  198. package/examples/cowork-fuse-staleness-watcher.sh +140 -0
  199. package/examples/cowork-hook-absence-warner.sh +167 -0
  200. package/examples/cowork-model-picker-advisor.sh +115 -0
  201. package/examples/credential-exfil-guard.sh +65 -4
  202. package/examples/credential-file-cat-guard.sh +17 -1
  203. package/examples/cron-create-receipt.sh +112 -0
  204. package/examples/cron-modification-guard.sh +12 -0
  205. package/examples/cross-product-mcp-spawn-detector.sh +178 -0
  206. package/examples/cwd-project-boundary-guard.sh +0 -0
  207. package/examples/daemon-zombie-worker-surfacer.sh +118 -0
  208. package/examples/daily-cost-guard.sh +164 -0
  209. package/examples/daily-usage-tracker.sh +0 -0
  210. package/examples/dangerous-pip-flag-guard.sh +12 -0
  211. package/examples/db-connect-guard.sh +13 -1
  212. package/examples/denied-action-retry-guard.sh +12 -0
  213. package/examples/deny-bypass-detector.sh +12 -0
  214. package/examples/deny-rule-integrity-verifier.sh +181 -0
  215. package/examples/dependency-install-guard.sh +12 -0
  216. package/examples/deploy-guard.sh +14 -2
  217. package/examples/deploy-path-verify-guard.sh +12 -0
  218. package/examples/deployment-readback-gate.sh +135 -0
  219. package/examples/deployment-readback-gh-adapter.sh +247 -0
  220. package/examples/deployment-verify-guard.sh +25 -2
  221. package/examples/destructive-db-script-write-guard.sh +166 -0
  222. package/examples/destructive-migration-write-guard.sh +163 -0
  223. package/examples/diff-size-guard.sh +12 -0
  224. package/examples/disabled-feature-toggle-advisor.sh +88 -0
  225. package/examples/disk-partition-guard.sh +12 -0
  226. package/examples/dispatch-allowlist-preflight.sh +301 -0
  227. package/examples/dispatch-liveness-watchdog.sh +216 -0
  228. package/examples/dispatch-receipt.sh +174 -0
  229. package/examples/django-migrate-guard.sh +12 -0
  230. package/examples/dns-config-guard.sh +12 -0
  231. package/examples/docker-dangerous-guard.sh +12 -0
  232. package/examples/docker-volume-guard.sh +0 -0
  233. package/examples/dockerfile-latest-guard.sh +1 -0
  234. package/examples/dotenv-anthropic-key-billing-guard.sh +99 -0
  235. package/examples/dotenv-commit-guard.sh +12 -0
  236. package/examples/dotenv-read-guard.sh +12 -0
  237. package/examples/dotfile-protection-guard.sh +12 -0
  238. package/examples/dotnet-build-on-edit.sh +1 -1
  239. package/examples/drizzle-migrate-guard.sh +27 -2
  240. package/examples/echo-probe-spam-detector.sh +176 -0
  241. package/examples/edit-counter-test-gate.sh +12 -0
  242. package/examples/edit-error-counter.sh +1 -1
  243. package/examples/edit-guard.sh +12 -0
  244. package/examples/edit-old-string-validator.sh +12 -0
  245. package/examples/edit-quote-ambiguity-guard.sh +97 -0
  246. package/examples/edit-retry-loop-guard.sh +0 -0
  247. package/examples/edit-verify.sh +0 -0
  248. package/examples/env-inline-secret-guard.sh +14 -2
  249. package/examples/env-naming-convention.sh +0 -0
  250. package/examples/env-prod-guard.sh +0 -0
  251. package/examples/env-required-check.sh +0 -0
  252. package/examples/env-source-guard.sh +12 -0
  253. package/examples/env-var-check.sh +24 -1
  254. package/examples/ephemeral-container-detector.sh +147 -0
  255. package/examples/error-memory-guard.sh +12 -0
  256. package/examples/evidence-claim-gate.sh +187 -0
  257. package/examples/exploration-budget-guard.sh +89 -0
  258. package/examples/expo-eject-guard.sh +13 -0
  259. package/examples/extended-thinking-loop-guard.sh +139 -0
  260. package/examples/extended-thinking-resume-warning.sh +119 -0
  261. package/examples/extended-thinking-tool-use-mismatch-detector.sh +212 -0
  262. package/examples/fabricated-command-detector.sh +145 -0
  263. package/examples/false-disk-full-guard.sh +63 -0
  264. package/examples/feature-deprecation-detector.sh +109 -0
  265. package/examples/file-change-tracker.sh +1 -1
  266. package/examples/file-change-undo-tracker.sh +0 -0
  267. package/examples/file-edit-backup.sh +63 -14
  268. package/examples/file-reference-check.sh +0 -0
  269. package/examples/file-size-limit.sh +12 -0
  270. package/examples/financial-operation-guard.sh +12 -0
  271. package/examples/firewall-guard.sh +12 -0
  272. package/examples/fish-shell-wrapper.sh +125 -7
  273. package/examples/five-hundred-milestone.sh +1 -0
  274. package/examples/flask-static-route-guard.sh +89 -0
  275. package/examples/forbidden-response-phrase-detector.sh +161 -0
  276. package/examples/gem-push-guard.sh +13 -0
  277. package/examples/gh-cli-destructive-guard.sh +13 -1
  278. package/examples/git-checkout-safety-guard.sh +12 -0
  279. package/examples/git-checkout-uncommitted-guard.sh +12 -0
  280. package/examples/git-config-guard.sh +12 -0
  281. package/examples/git-crypt-worktree-guard.sh +12 -0
  282. package/examples/git-filter-repo-guard.sh +56 -0
  283. package/examples/git-history-rewrite-guard.sh +12 -0
  284. package/examples/git-hook-bypass-guard.sh +0 -0
  285. package/examples/git-maintenance-guard.sh +83 -0
  286. package/examples/git-merge-conflict-prevent.sh +0 -0
  287. package/examples/git-message-length-check.sh +0 -0
  288. package/examples/git-message-length.sh +0 -0
  289. package/examples/git-operations-require-approval.sh +68 -14
  290. package/examples/git-pack-temp-cleanup-guard.sh +102 -0
  291. package/examples/git-push-blast-radius-guard.sh +218 -0
  292. package/examples/git-remote-guard.sh +24 -3
  293. package/examples/git-rm-orphan-wipe-guard.sh +85 -0
  294. package/examples/git-stash-before-checkout.sh +12 -0
  295. package/examples/git-stash-before-danger.sh +0 -0
  296. package/examples/git-submodule-guard.sh +69 -2
  297. package/examples/git-tag-guard.sh +12 -0
  298. package/examples/github-actions-secret-guard.sh +0 -0
  299. package/examples/gitignore-check.sh +0 -0
  300. package/examples/gitops-drift-guard.sh +12 -0
  301. package/examples/go-mod-tidy-warn.sh +1 -0
  302. package/examples/go-vet-after-edit.sh +12 -0
  303. package/examples/goal-iteration-limit-warner.sh +152 -0
  304. package/examples/grep-nul-false-negative-guard.sh +30 -0
  305. package/examples/growthbook-flag-monitor.sh +257 -0
  306. package/examples/hallucination-url-check.sh +1 -1
  307. package/examples/halt-signal-detector.sh +135 -0
  308. package/examples/handoff-on-clear.sh +65 -0
  309. package/examples/hardcoded-ip-guard.sh +1 -0
  310. package/examples/headless-empty-result-guard.sh +0 -0
  311. package/examples/headless-stop-guard.sh +0 -0
  312. package/examples/helm-install-guard.sh +2 -1
  313. package/examples/home-critical-bash-guard.sh +17 -1
  314. package/examples/hook-debug-wrapper.sh +6 -2
  315. package/examples/hook-permission-fixer.sh +0 -0
  316. package/examples/hook-self-disable-detector.sh +99 -0
  317. package/examples/hook-stdout-sanitizer.sh +6 -2
  318. package/examples/hook-tamper-guard.sh +12 -0
  319. package/examples/idle-session-cost-alert.sh +0 -0
  320. package/examples/image-dimension-guard.sh +109 -0
  321. package/examples/image-file-validator.sh +0 -0
  322. package/examples/iteration-quality-degradation-detector.sh +170 -0
  323. package/examples/java-compile-on-edit.sh +1 -1
  324. package/examples/json-syntax-check.sh +0 -0
  325. package/examples/k8s-production-guard.sh +13 -1
  326. package/examples/kill-process-guard.sh +12 -0
  327. package/examples/kubernetes-guard.sh +13 -1
  328. package/examples/laravel-artisan-guard.sh +13 -0
  329. package/examples/large-file-guard.sh +1 -1
  330. package/examples/log-level-guard.sh +0 -0
  331. package/examples/log-truncation-guard.sh +12 -0
  332. package/examples/long-session-malformed-tool-call-detector.sh +183 -0
  333. package/examples/loop-detector.sh +12 -0
  334. package/examples/magic-number-warn.sh +1 -0
  335. package/examples/main-branch-warn.sh +12 -0
  336. package/examples/markdown-link-check.sh +0 -0
  337. package/examples/max-concurrent-agents.sh +12 -0
  338. package/examples/max-edit-size-guard.sh +13 -0
  339. package/examples/max-file-count-guard.sh +0 -0
  340. package/examples/max-file-delete-count.sh +0 -0
  341. package/examples/max-function-length.sh +1 -0
  342. package/examples/max-import-count.sh +0 -0
  343. package/examples/max-subagent-count.sh +0 -0
  344. package/examples/mcp-config-freeze.sh +12 -0
  345. package/examples/mcp-config-poisoning-audit.sh +150 -0
  346. package/examples/mcp-data-boundary.sh +1 -1
  347. package/examples/mcp-misdiagnosis-arrest.sh +209 -0
  348. package/examples/mcp-orphan-leak-warner.sh +49 -0
  349. package/examples/mcp-permissions-ask-warner.sh +151 -0
  350. package/examples/mcp-routine-approval-detector.sh +154 -0
  351. package/examples/mcp-server-allowlist.sh +12 -0
  352. package/examples/mcp-server-guard.sh +12 -0
  353. package/examples/mcp-startup-bloat-detector.sh +87 -0
  354. package/examples/mcp-stdio-compatibility-test.sh +153 -0
  355. package/examples/mcp-tool-audit-log.sh +0 -0
  356. package/examples/mcp-tool-guard.sh +101 -1
  357. package/examples/mcp-warmup-wait.sh +0 -0
  358. package/examples/memory-chain-audit.sh +56 -0
  359. package/examples/memory-orphan-detector.sh +188 -0
  360. package/examples/memory-write-guard.sh +99 -17
  361. package/examples/migration-verify-guard.sh +12 -0
  362. package/examples/model-swap-suggester.sh +177 -0
  363. package/examples/model-version-alert.sh +5 -1
  364. package/examples/model-version-lock.sh +63 -0
  365. package/examples/move-delete-sequence-guard.sh +33 -2
  366. package/examples/multi-file-plan-routing-gate.sh +192 -0
  367. package/examples/multi-vendor-concurrent-warner.sh +108 -0
  368. package/examples/multi-window-auth-drift-detector.sh +183 -0
  369. package/examples/multiline-command-approver.sh +161 -23
  370. package/examples/nested-background-agent-guard.sh +109 -0
  371. package/examples/nested-spawn-inflight-guard.sh +178 -0
  372. package/examples/network-exfil-guard.sh +12 -0
  373. package/examples/network-guard.sh +12 -0
  374. package/examples/network-interface-guard.sh +12 -0
  375. package/examples/nextjs-env-guard.sh +1 -1
  376. package/examples/no-absolute-import.sh +0 -0
  377. package/examples/no-alert-confirm-prompt.sh +0 -0
  378. package/examples/no-anonymous-default-export.sh +0 -0
  379. package/examples/no-any-type.sh +0 -0
  380. package/examples/no-any-typescript.sh +1 -0
  381. package/examples/no-ask-human.sh +12 -0
  382. package/examples/no-assignment-in-condition.sh +0 -0
  383. package/examples/no-base64-exfil.sh +12 -0
  384. package/examples/no-callback-hell.sh +0 -0
  385. package/examples/no-circular-dependency.sh +0 -0
  386. package/examples/no-cleartext-storage.sh +0 -0
  387. package/examples/no-commented-code.sh +0 -0
  388. package/examples/no-commit-fixup.sh +0 -0
  389. package/examples/no-console-assert.sh +0 -0
  390. package/examples/no-console-error-swallow.sh +0 -0
  391. package/examples/no-console-in-prod.sh +0 -0
  392. package/examples/no-console-log-commit.sh +12 -0
  393. package/examples/no-console-log.sh +0 -0
  394. package/examples/no-console-time.sh +0 -0
  395. package/examples/no-cors-wildcard.sh +4 -1
  396. package/examples/no-curl-upload.sh +0 -0
  397. package/examples/no-dangerouslySetInnerHTML.sh +0 -0
  398. package/examples/no-dangling-await.sh +1 -0
  399. package/examples/no-debug-commit.sh +12 -0
  400. package/examples/no-debug-in-commit.sh +0 -0
  401. package/examples/no-deep-nesting.sh +0 -0
  402. package/examples/no-deep-relative-import.sh +1 -0
  403. package/examples/no-default-credentials.sh +0 -0
  404. package/examples/no-deploy-friday.sh +13 -1
  405. package/examples/no-disabled-test.sh +0 -0
  406. package/examples/no-document-write.sh +0 -0
  407. package/examples/no-empty-function.sh +0 -0
  408. package/examples/no-eval-in-template.sh +0 -0
  409. package/examples/no-eval-template.sh +3 -1
  410. package/examples/no-eval.sh +0 -0
  411. package/examples/no-exec-user-input.sh +0 -0
  412. package/examples/no-fixme-ship.sh +12 -0
  413. package/examples/no-floating-promises.sh +0 -0
  414. package/examples/no-force-flag.sh +22 -5
  415. package/examples/no-force-install.sh +0 -0
  416. package/examples/no-git-amend.sh +12 -0
  417. package/examples/no-git-rebase-public.sh +0 -0
  418. package/examples/no-global-install.sh +12 -0
  419. package/examples/no-global-state.sh +0 -0
  420. package/examples/no-hardcoded-port.sh +1 -0
  421. package/examples/no-hardcoded-url.sh +0 -0
  422. package/examples/no-helmet-missing.sh +0 -0
  423. package/examples/no-http-url.sh +1 -0
  424. package/examples/no-http-without-https.sh +0 -0
  425. package/examples/no-inline-style.sh +0 -0
  426. package/examples/no-inline-styles.sh +1 -0
  427. package/examples/no-innerhtml.sh +0 -0
  428. package/examples/no-install-global.sh +12 -0
  429. package/examples/no-jwt-in-url.sh +0 -0
  430. package/examples/no-large-commit.sh +0 -0
  431. package/examples/no-localhost-expose.sh +0 -0
  432. package/examples/no-magic-number.sh +0 -0
  433. package/examples/no-md5-sha1.sh +0 -0
  434. package/examples/no-mixed-line-endings.sh +8 -1
  435. package/examples/no-mutation-in-reducer.sh +0 -0
  436. package/examples/no-nested-ternary.sh +0 -0
  437. package/examples/no-network-exfil.sh +0 -0
  438. package/examples/no-open-redirect.sh +0 -0
  439. package/examples/no-output-truncation.sh +12 -0
  440. package/examples/no-package-downgrade.sh +0 -0
  441. package/examples/no-package-lock-edit.sh +12 -0
  442. package/examples/no-path-join-user-input.sh +0 -0
  443. package/examples/no-port-bind.sh +0 -0
  444. package/examples/no-process-exit.sh +0 -0
  445. package/examples/no-prototype-pollution.sh +0 -0
  446. package/examples/no-push-without-ci.sh +0 -0
  447. package/examples/no-push-without-tests.sh +12 -0
  448. package/examples/no-raw-password-in-url.sh +0 -0
  449. package/examples/no-root-user-docker.sh +1 -0
  450. package/examples/no-root-write.sh +12 -0
  451. package/examples/no-secrets-in-args.sh +4 -1
  452. package/examples/no-secrets-in-logs.sh +0 -0
  453. package/examples/no-sensitive-log.sh +0 -0
  454. package/examples/no-sleep-in-hooks.sh +0 -0
  455. package/examples/no-star-import-python.sh +1 -0
  456. package/examples/no-string-concat-sql.sh +0 -0
  457. package/examples/no-sudo-guard.sh +12 -0
  458. package/examples/no-sync-fs.sh +0 -0
  459. package/examples/no-todo-in-merge.sh +0 -0
  460. package/examples/no-todo-in-production.sh +1 -0
  461. package/examples/no-todo-without-issue.sh +0 -0
  462. package/examples/no-unused-import.sh +0 -0
  463. package/examples/no-var-keyword.sh +0 -0
  464. package/examples/no-verify-blocker.sh +12 -0
  465. package/examples/no-wget-piped-bash.sh +12 -0
  466. package/examples/no-wildcard-cors.sh +0 -0
  467. package/examples/no-wildcard-delete.sh +0 -0
  468. package/examples/no-wildcard-import.sh +0 -0
  469. package/examples/no-with-statement.sh +0 -0
  470. package/examples/no-write-outside-src.sh +0 -0
  471. package/examples/no-xml-external-entity.sh +0 -0
  472. package/examples/non-english-quality-warner.sh +156 -0
  473. package/examples/notify-waiting.sh +1 -1
  474. package/examples/npm-audit-warn.sh +0 -0
  475. package/examples/npm-global-install-guard.sh +12 -0
  476. package/examples/npm-publish-guard.sh +12 -0
  477. package/examples/npm-script-injection.sh +0 -0
  478. package/examples/npm-supply-chain-guard.sh +0 -0
  479. package/examples/nuxt-config-guard.sh +1 -0
  480. package/examples/oauth-refresh-monitor.sh +210 -0
  481. package/examples/opus-degradation-tracker.sh +187 -0
  482. package/examples/opus48-routine-task-warning.sh +196 -0
  483. package/examples/opus48-thinking-wedge-advisor.sh +143 -0
  484. package/examples/output-credential-scan.sh +1 -1
  485. package/examples/output-secret-mask.sh +31 -9
  486. package/examples/output-token-spike-detector.sh +145 -0
  487. package/examples/package-json-guard.sh +12 -0
  488. package/examples/package-lock-frozen.sh +12 -0
  489. package/examples/parallel-batch-size-limiter.sh +121 -0
  490. package/examples/parallel-cascade-detector.sh +116 -0
  491. package/examples/partial-view-claim-arrest.sh +174 -0
  492. package/examples/path-deny-bash-guard.sh +12 -0
  493. package/examples/path-traversal-guard.sh +12 -0
  494. package/examples/per-prompt-token-cap.sh +124 -0
  495. package/examples/permission-audit-log.sh +1 -1
  496. package/examples/permission-denial-enforcer.sh +12 -0
  497. package/examples/permission-entry-validator.sh +0 -0
  498. package/examples/persisted-1m-model-advisor.sh +88 -0
  499. package/examples/php-lint-on-edit.sh +1 -1
  500. package/examples/pii-upload-guard.sh +12 -0
  501. package/examples/pip-publish-guard.sh +13 -0
  502. package/examples/pip-requirements-guard.sh +12 -0
  503. package/examples/pip-venv-required.sh +12 -0
  504. package/examples/plan-mode-edit-guard.sh +12 -0
  505. package/examples/plan-mode-enforcer.sh +12 -0
  506. package/examples/plan-mode-strict-guard.sh +12 -0
  507. package/examples/plugin-hooks-json-bloat-detector.sh +169 -0
  508. package/examples/plugin-process-cleanup.sh +0 -0
  509. package/examples/polyglot-rm-guard.sh +12 -0
  510. package/examples/post-compact-safety.sh +12 -0
  511. package/examples/post-edit-disk-verify.sh +152 -0
  512. package/examples/powershell-remove-item-guard.sh +85 -0
  513. package/examples/pr-description-check.sh +0 -0
  514. package/examples/pr-duplicate-guard.sh +13 -0
  515. package/examples/pre-bash-sed-line-ending-windows.sh +87 -0
  516. package/examples/pre-compact-knowledge-save.sh +0 -0
  517. package/examples/pre-compact-transcript-backup.sh +0 -0
  518. package/examples/pre-execution-claim-detector.sh +179 -0
  519. package/examples/prefer-builtin-tools.sh +10 -1
  520. package/examples/prefer-const.sh +0 -0
  521. package/examples/prefer-dedicated-tools.sh +12 -0
  522. package/examples/prefer-optional-chaining.sh +0 -0
  523. package/examples/prisma-migrate-guard.sh +24 -7
  524. package/examples/production-port-kill-guard.sh +12 -0
  525. package/examples/prompt-injection-guard.sh +2 -1
  526. package/examples/prompt-usage-logger.sh +0 -0
  527. package/examples/protect-claudemd.sh +12 -0
  528. package/examples/protect-dotfiles.sh +12 -0
  529. package/examples/proxy-capture-suggester.sh +159 -0
  530. package/examples/public-artefact-socratic-narrowing.sh +232 -0
  531. package/examples/public-repo-push-guard.sh +12 -0
  532. package/examples/push-requires-test-pass-record.sh +0 -0
  533. package/examples/push-requires-test-pass.sh +12 -0
  534. package/examples/quota-anomaly-detector.sh +173 -0
  535. package/examples/quota-reset-audit.sh +58 -0
  536. package/examples/quoted-flag-approver.sh +99 -10
  537. package/examples/rails-migration-guard.sh +12 -0
  538. package/examples/rate-limit-guard.sh +0 -0
  539. package/examples/read-all-files-enforcer.sh +0 -0
  540. package/examples/read-budget-guard.sh +12 -0
  541. package/examples/read-loop-detector.sh +59 -0
  542. package/examples/read-once-guard.sh +96 -0
  543. package/examples/read-only-mode.sh +12 -0
  544. package/examples/readme-exists-check.sh +0 -0
  545. package/examples/record-read-coverage.sh +73 -0
  546. package/examples/redirect-fragment-warner.sh +149 -0
  547. package/examples/redis-flushall-guard.sh +13 -0
  548. package/examples/redundant-read-blocker.sh +132 -0
  549. package/examples/refusal-arrest-gate.sh +248 -0
  550. package/examples/registry-publish-guard.sh +13 -1
  551. package/examples/remote-control-billing-classifier.sh +135 -0
  552. package/examples/replace-all-guard.sh +12 -0
  553. package/examples/repo-visibility-guard.sh +12 -0
  554. package/examples/reroute-after-block-guard.sh +150 -0
  555. package/examples/response-budget-guard.sh +0 -0
  556. package/examples/resume-drift-watcher.sh +57 -0
  557. package/examples/rg-replace-flag-detector.sh +125 -0
  558. package/examples/rhetorical-verification-prompt-detector.sh +102 -0
  559. package/examples/ripgrep-permission-fix.sh +0 -0
  560. package/examples/rm-safety-net.sh +151 -8
  561. package/examples/role-tool-guard.sh +12 -0
  562. package/examples/route-handler-emptiness-gate.sh +324 -0
  563. package/examples/ruby-lint-on-edit.sh +1 -1
  564. package/examples/runtime-binary-change-detector.sh +102 -0
  565. package/examples/same-command-repeat-detector.sh +196 -0
  566. package/examples/same-correction-arrest.sh +169 -0
  567. package/examples/sandbox-denywrite-enforcer.sh +78 -0
  568. package/examples/sandbox-relative-path-audit.sh +83 -25
  569. package/examples/sandbox-write-verify.sh +12 -0
  570. package/examples/schema-migration-guard.sh +0 -0
  571. package/examples/scope-expansion-receipt.sh +178 -0
  572. package/examples/scope-guard.sh +88 -9
  573. package/examples/secret-file-read-guard.sh +12 -0
  574. package/examples/secret-file-write-guard.sh +150 -0
  575. package/examples/self-modify-bypass-guard.sh +0 -0
  576. package/examples/sensitive-file-read-guard.sh +23 -3
  577. package/examples/sensitive-log-guard.sh +1 -0
  578. package/examples/server-side-prompt-injection-detector.sh +69 -0
  579. package/examples/session-agent-cost-limiter.sh +12 -0
  580. package/examples/session-backup-on-start.sh +1 -1
  581. package/examples/session-cost-alert.sh +12 -0
  582. package/examples/session-drift-guard.sh +12 -0
  583. package/examples/session-duration-guard.sh +25 -2
  584. package/examples/session-end-logger.sh +0 -0
  585. package/examples/session-health-monitor.sh +0 -0
  586. package/examples/session-index-repair.sh +1 -1
  587. package/examples/session-memory-watchdog.sh +1 -0
  588. package/examples/session-permission-reset-guard.sh +12 -0
  589. package/examples/session-persistence-verifier.sh +93 -0
  590. package/examples/session-plugin-pin-watch.sh +68 -0
  591. package/examples/session-rate-monitor.sh +176 -0
  592. package/examples/session-resume-env-fix.sh +0 -0
  593. package/examples/session-start-quota-status.sh +193 -0
  594. package/examples/session-start-safety-check.sh +55 -3
  595. package/examples/session-state-saver.sh +0 -0
  596. package/examples/session-summary-stop.sh +1 -1
  597. package/examples/session-summary.sh +0 -0
  598. package/examples/session-token-counter.sh +1 -1
  599. package/examples/settings-hooks-key-restorer.sh +99 -0
  600. package/examples/settings-json-health-check.sh +57 -0
  601. package/examples/settings-json-model-guard.sh +0 -0
  602. package/examples/settings-regression-tester.sh +188 -0
  603. package/examples/shell-config-truncation-guard.sh +12 -0
  604. package/examples/shell-wrapper-guard.sh +12 -0
  605. package/examples/skill-cumulative-size-detector.sh +104 -0
  606. package/examples/skill-description-drop-detector.sh +148 -0
  607. package/examples/skill-gate.sh +0 -0
  608. package/examples/skill-truncation-detector.sh +154 -0
  609. package/examples/skills-context-recorder.sh +167 -0
  610. package/examples/skills-load-verifier.sh +96 -0
  611. package/examples/skills-settings-validator.sh +139 -0
  612. package/examples/sonnet-45-deprecation-helper.sh +85 -0
  613. package/examples/spec-file-scope-guard.sh +12 -0
  614. package/examples/spring-profile-guard.sh +1 -0
  615. package/examples/spurious-malformed-notice-detector.sh +247 -0
  616. package/examples/sql-bulk-delete-warn.sh +88 -0
  617. package/examples/sql-injection-detect.sh +0 -0
  618. package/examples/ssh-key-protect.sh +12 -0
  619. package/examples/staged-secret-scan.sh +22 -1
  620. package/examples/stale-temp-settings-detector.sh +86 -0
  621. package/examples/standing-rule-session-surfacer.sh +137 -0
  622. package/examples/stop-hook-sigterm-wrapper.sh +182 -0
  623. package/examples/stop-transcript-write-health.sh +64 -0
  624. package/examples/strict-allowlist.sh +57 -15
  625. package/examples/strip-coauthored-by.sh +50 -10
  626. package/examples/subagent-blast-radius-guard.sh +184 -0
  627. package/examples/subagent-boundary-precheck.sh +126 -0
  628. package/examples/subagent-budget-guard.sh +12 -0
  629. package/examples/subagent-claudemd-inject.sh +0 -0
  630. package/examples/subagent-closure-verify-gate.sh +164 -0
  631. package/examples/subagent-destructive-git-guard.sh +120 -0
  632. package/examples/subagent-error-detector.sh +0 -0
  633. package/examples/subagent-forged-system-reminder-guard.sh +156 -0
  634. package/examples/subagent-identity-leak-guard.sh +102 -0
  635. package/examples/subagent-identity-reassertion.sh +51 -0
  636. package/examples/subagent-inheritance-tester.sh +179 -0
  637. package/examples/subagent-permission-mode-guard.sh +110 -0
  638. package/examples/subagent-scope-guard.sh +12 -0
  639. package/examples/subagent-spawn-verification-enforcer.sh +102 -0
  640. package/examples/subagent-tool-allowlist-enforcer.sh +101 -0
  641. package/examples/subagent-tool-call-limiter.sh +87 -15
  642. package/examples/subcommand-chain-guard.sh +12 -0
  643. package/examples/subscription-api-billing-warner.sh +160 -0
  644. package/examples/subscription-bypass-detector.sh +152 -0
  645. package/examples/svelte-lint-on-edit.sh +1 -0
  646. package/examples/swift-build-on-edit.sh +1 -1
  647. package/examples/symlink-guard.sh +27 -2
  648. package/examples/symlink-protect.sh +1 -0
  649. package/examples/system-dir-protection-guard.sh +73 -8
  650. package/examples/system-message-workaround.sh +38 -13
  651. package/examples/system-package-guard.sh +12 -0
  652. package/examples/systemd-service-guard.sh +12 -0
  653. package/examples/task-integrity-guard.sh +12 -0
  654. package/examples/temp-file-cleanup.sh +1 -1
  655. package/examples/temporal-suggestion-detector.sh +135 -0
  656. package/examples/terraform-guard.sh +27 -6
  657. package/examples/test-after-edit.sh +1 -1
  658. package/examples/test-before-push.sh +12 -0
  659. package/examples/test-coverage-reminder.sh +24 -1
  660. package/examples/thinking-budget-effort-mismatch-detector.sh +149 -0
  661. package/examples/thinking-stall-detector.sh +61 -0
  662. package/examples/timezone-guard.sh +0 -0
  663. package/examples/tmp-output-size-guard.sh +0 -0
  664. package/examples/todo-check.sh +1 -1
  665. package/examples/token-budget-guard.sh +12 -0
  666. package/examples/token-budget-per-task.sh +12 -0
  667. package/examples/token-usage-tracker.sh +7 -1
  668. package/examples/tokenizer-ratio-alert-corpus.sh +90 -0
  669. package/examples/tokenizer-ratio-alert.sh +104 -0
  670. package/examples/tool-call-rate-limiter.sh +0 -0
  671. package/examples/tool-result-correlation-checker.sh +167 -0
  672. package/examples/tool-result-size-guard.sh +132 -0
  673. package/examples/tool-retry-budget-guard.sh +12 -0
  674. package/examples/transcript-contamination-detector.sh +138 -0
  675. package/examples/trustfall-mcp-injection-guard.sh +103 -0
  676. package/examples/ultrareview-large-diff-advisor.sh +184 -0
  677. package/examples/unbounded-output-guard.sh +94 -0
  678. package/examples/uncommitted-changes-stop.sh +1 -0
  679. package/examples/uncommitted-discard-guard.sh +23 -5
  680. package/examples/uncommitted-work-guard.sh +12 -0
  681. package/examples/usage-warn.sh +0 -0
  682. package/examples/user-account-guard.sh +12 -0
  683. package/examples/userprompt-submit-receipt.sh +123 -0
  684. package/examples/variable-expansion-guard.sh +12 -0
  685. package/examples/verify-after-publish-reminder.sh +93 -0
  686. package/examples/verify-before-commit.sh +12 -0
  687. package/examples/version-bump-detector.sh +156 -0
  688. package/examples/version-regression-warner.sh +144 -0
  689. package/examples/vue-lint-on-edit.sh +1 -0
  690. package/examples/warn-cron-cost-trap.sh +173 -0
  691. package/examples/webfetch-runaway-guard.sh +89 -0
  692. package/examples/wellness-break-reminder.sh +118 -0
  693. package/examples/windows-destructive-command-guard.sh +177 -0
  694. package/examples/windows-path-guard.sh +12 -0
  695. package/examples/windows-python-stub-detector.sh +63 -0
  696. package/examples/work-hours-guard.sh +12 -0
  697. package/examples/working-directory-fence.sh +12 -0
  698. package/examples/workspace-lease-guard.sh +205 -0
  699. package/examples/worktree-create-log.sh +1 -0
  700. package/examples/worktree-delete-guard.sh +12 -0
  701. package/examples/worktree-edit-boundary-guard.sh +127 -0
  702. package/examples/worktree-escape-write-guard.sh +114 -0
  703. package/examples/worktree-hook-linker.sh +0 -0
  704. package/examples/worktree-hooks-path-fix.sh +111 -0
  705. package/examples/worktree-parent-write-guard.sh +43 -0
  706. package/examples/worktree-project-unify.sh +2 -1
  707. package/examples/worktree-remove-uncommitted-guard.sh +13 -0
  708. package/examples/worktree-unmerged-guard.sh +7 -1
  709. package/examples/write-byte-integrity-verifier.sh +190 -0
  710. package/examples/write-empty-content-guard.sh +67 -0
  711. package/examples/write-nul-corruption-detector.sh +61 -0
  712. package/examples/write-overwrite-confirm.sh +160 -14
  713. package/examples/write-secret-guard.sh +27 -5
  714. package/examples/write-shrink-guard.sh +12 -0
  715. package/examples/write-test-ratio.sh +0 -0
  716. package/examples/wsl-host-disk-space-guard.sh +97 -0
  717. package/examples/xml-format-leak-detector.sh +266 -0
  718. package/examples/yaml-syntax-check.sh +12 -0
  719. package/hooks/hooks.json +6 -6
  720. package/index.mjs +1699 -183
  721. package/mission.md +2 -0
  722. package/package.json +4 -4
  723. package/plugins/credential-guard/.claude-plugin/plugin.json +9 -7
  724. package/plugins/git-protection/.claude-plugin/plugin.json +10 -8
  725. package/plugins/safety-essentials/.claude-plugin/plugin.json +9 -7
  726. package/plugins/token-guard/.claude-plugin/plugin.json +10 -8
  727. package/scripts/agents-md-sync-setup.sh +156 -0
  728. package/scripts/autonomy-blocked-summary.sh +148 -0
  729. package/scripts/build-search-index.py +43 -0
  730. package/scripts/build-sitemap.py +119 -0
  731. package/scripts/cc-doctor.sh +192 -0
  732. package/scripts/check-hook-event-names.py +127 -0
  733. package/scripts/check-misfire-instrument.sh +64 -0
  734. package/scripts/claim-verify-audit.sh +467 -0
  735. package/scripts/cowork-claudemd-helper.sh +136 -0
  736. package/scripts/june-15-deprecated-model-scan.sh +111 -0
  737. package/scripts/measure-heredoc-shapes.sh +67 -0
  738. package/scripts/measure-literal-match-misfire.sh +110 -0
  739. package/scripts/probe-scope-guard-branches.sh +48 -0
  740. package/scripts/probe-skip-line-both-ways.sh +65 -0
  741. package/scripts/receipts-aggregate.py +199 -0
  742. package/scripts/session-forensic-audit.py +360 -0
  743. package/scripts.json +9 -9
  744. package/scripts.json.bak-2026-07-27-find +13 -0
  745. package/skills/safety-setup/SKILL.md +5 -5
  746. package/tests/approve-side-remaining-two.test.sh +129 -0
  747. package/tests/approver-list-granularity.test.sh +145 -0
  748. package/tests/askuserquestion-autonomy-gate.test.sh +181 -0
  749. package/tests/audit-ci-gate.test.sh +87 -0
  750. package/tests/audit-cross-layer-claudemd.test.sh +170 -0
  751. package/tests/audit-fail-open-parse.test.sh +100 -0
  752. package/tests/auto-approve-compound-tail.test.sh +194 -0
  753. package/tests/auto-mode-path-invoked-commands.test.sh +89 -0
  754. package/tests/auto-mode-quoted-targets.test.sh +127 -0
  755. package/tests/auto-mode-unquoted-targets.test.sh +112 -0
  756. package/tests/bash-secret-output-detector-detects.test.sh +102 -0
  757. package/tests/blindspots-cross-layer.test.sh +177 -0
  758. package/tests/block-database-wipe.test.sh +64 -0
  759. package/tests/bundled-short-flags-bypass.test.sh +85 -0
  760. package/tests/cd-git-allow-compound-tail.test.sh +67 -0
  761. package/tests/chown-guard-filesystem-root.test.sh +64 -0
  762. package/tests/ci-workflow-guard-skip-rule.test.sh +115 -0
  763. package/tests/compound-deny-safe-rm-targets.test.sh +105 -0
  764. package/tests/core-scripts-parser-fallback.test.sh +140 -0
  765. package/tests/destructive-guard-bare-glob.test.sh +74 -0
  766. package/tests/destructive-guard-every-operand.test.sh +100 -0
  767. package/tests/destructive-guard-find-deletion.test.sh +114 -0
  768. package/tests/destructive-guard-flag-order.test.sh +106 -0
  769. package/tests/destructive-guard-mentions-vs-invocations.test.sh +107 -0
  770. package/tests/destructive-guard-quoted-target.test.sh +89 -0
  771. package/tests/destructive-guard-separators.test.sh +105 -0
  772. package/tests/destructive-guard-variable-target.test.sh +98 -0
  773. package/tests/destructive-guard-wrapped-command.test.sh +91 -0
  774. package/tests/doctor-hook-disabling-env.test.sh +92 -0
  775. package/tests/doctor-misspelled-settings-keys.test.sh +106 -0
  776. package/tests/example-guards-wrapped-command.test.sh +169 -0
  777. package/tests/file-edit-backup.test.sh +93 -0
  778. package/tests/git-filter-repo-guard.test.sh +60 -0
  779. package/tests/git-global-options-bypass.test.sh +141 -0
  780. package/tests/git-invocation-prefixes-all-guards.test.sh +114 -0
  781. package/tests/git-maintenance-guard.test.sh +83 -0
  782. package/tests/git-pack-temp-cleanup-guard.test.sh +133 -0
  783. package/tests/git-rm-orphan-wipe-guard.test.sh +66 -0
  784. package/tests/git-submodule-guard.test.sh +50 -0
  785. package/tests/grep-pcre-portability.test.sh +155 -0
  786. package/tests/hook-registration-matches-input.test.sh +73 -0
  787. package/tests/hook-trigger-matches-envelope.test.sh +178 -0
  788. package/tests/install-does-not-claim-protection.test.sh +110 -0
  789. package/tests/install-example-standalone-tools.test.sh +139 -0
  790. package/tests/line-continuation-bypass.test.sh +114 -0
  791. package/tests/mcp-config-poisoning-audit.test.sh +106 -0
  792. package/tests/nested-background-agent-guard.test.sh +58 -0
  793. package/tests/no-unqualified-safety-claims.test.sh +114 -0
  794. package/tests/option-eating-grep-patterns.test.sh +130 -0
  795. package/tests/outdated-core-guards.test.sh +134 -0
  796. package/tests/outdated-report.test.sh +155 -0
  797. package/tests/output-secret-mask-warns.test.sh +73 -0
  798. package/tests/plugin-hooks-fail-open-under-sh.test.sh +165 -0
  799. package/tests/plugins-word-order.test.sh +126 -0
  800. package/tests/powershell-remove-item-guard.test.sh +85 -0
  801. package/tests/project-dir-naming.test.sh +103 -0
  802. package/tests/quoted-safe-targets-and-mentions.test.sh +190 -0
  803. package/tests/reroute-after-block-guard.test.sh +104 -0
  804. package/tests/secret-guard-documented-promises.test.sh +97 -0
  805. package/tests/session-plugin-pin-watch.test.sh +45 -0
  806. package/tests/settings-unreadable-refuses-to-write.test.sh +95 -0
  807. package/tests/shield-no-silent-adoption.test.py +110 -0
  808. package/tests/shield-no-silent-adoption.test.sh +46 -0
  809. package/tests/stop-transcript-write-health.test.sh +46 -0
  810. package/tests/system-dir-guard-root-erased.test.sh +66 -0
  811. package/tests/test-account-billing-log.sh +100 -0
  812. package/tests/test-account-routing-preflight.sh +77 -0
  813. package/tests/test-agent-sdk-credit-pool-monitor.sh +157 -0
  814. package/tests/test-agent-view-quota-warn.sh +184 -0
  815. package/tests/test-agents-md-edit-drift-warner.sh +176 -0
  816. package/tests/test-agents-md-loader.sh +204 -0
  817. package/tests/test-agents-md-sync-checker.sh +125 -0
  818. package/tests/test-ai-slop-punctuation-arrest.sh +280 -0
  819. package/tests/test-allowlist.sh +60 -0
  820. package/tests/test-always-allow-pattern-suggester.sh +147 -0
  821. package/tests/test-anthropic-base-url-guard.sh +88 -0
  822. package/tests/test-articulated-scope-capture.sh +139 -0
  823. package/tests/test-attachment-traversal-guard.sh +168 -0
  824. package/tests/test-aup-block-pattern-logger.sh +315 -0
  825. package/tests/test-aup-false-positive-helper.sh +188 -0
  826. package/tests/test-aup-large-tool-output-warner.sh +370 -0
  827. package/tests/test-aup-retry-loop-guard.sh +341 -0
  828. package/tests/test-auth-expiry-reminder.sh +303 -0
  829. package/tests/test-auth-macos-sleep-detector.sh +254 -0
  830. package/tests/test-auth-path-detector.sh +232 -0
  831. package/tests/test-auth-status-checker.sh +233 -0
  832. package/tests/test-authorized-reconfirmation-detector.sh +280 -0
  833. package/tests/test-background-cost-launch-guard.sh +62 -0
  834. package/tests/test-bash-allowlist-secondary-check.sh +143 -0
  835. package/tests/test-bash-fanout-bounded-rewriter.sh +186 -0
  836. package/tests/test-bash-project-fence.sh +127 -0
  837. package/tests/test-bg-permission-prompt-warner.sh +221 -0
  838. package/tests/test-binary-read-detector.sh +173 -0
  839. package/tests/test-broad-prefix-session-trap-warner.sh +167 -0
  840. package/tests/test-bulk-delete-target-resolution.sh +49 -0
  841. package/tests/test-bypass-mode-effective-verifier.sh +179 -0
  842. package/tests/test-cache-creation-drift-detector.sh +244 -0
  843. package/tests/test-cache-residue-detector.sh +429 -0
  844. package/tests/test-cache-tier-logger.sh +59 -0
  845. package/tests/test-cache-ttl-eviction-detector.sh +282 -0
  846. package/tests/test-cch-sentinel-precommit-guard.sh +64 -0
  847. package/tests/test-claim-verify-detector.sh +222 -0
  848. package/tests/test-claim-vs-caveat-checker.sh +134 -0
  849. package/tests/test-claude-code-version-pin-advisor.sh +353 -0
  850. package/tests/test-claude-md-reinjector.sh +173 -0
  851. package/tests/test-claude-md-size-monitor.sh +107 -0
  852. package/tests/test-claude-update-budget-guard.sh +132 -0
  853. package/tests/test-claude-update-smart.sh +91 -0
  854. package/tests/test-claudemd-tool-prohibition.sh +239 -0
  855. package/tests/test-cli-config-pinning-detector.sh +233 -0
  856. package/tests/test-cliff-countdown-advisor.sh +138 -0
  857. package/tests/test-closure-word-verify-gate.sh +158 -0
  858. package/tests/test-commit-all-scope-guard.sh +73 -0
  859. package/tests/test-commitment-carry-forward-arrest.sh +250 -0
  860. package/tests/test-compact-circuit-breaker.sh +134 -0
  861. package/tests/test-compact-dispatch-watchdog.sh +147 -0
  862. package/tests/test-completion-claim-without-verification-detector.sh +326 -0
  863. package/tests/test-compound-bash-permission-resolver.sh +264 -0
  864. package/tests/test-compound-command-deny-enforcer.sh +67 -0
  865. package/tests/test-context-length-budget.sh +68 -0
  866. package/tests/test-context-usage-drift-alert.sh +52 -22
  867. package/tests/test-cost-incident-self-audit.sh +94 -0
  868. package/tests/test-cowork-claude-md-load-checker.sh +257 -0
  869. package/tests/test-cowork-claudemd-helper.sh +141 -0
  870. package/tests/test-cowork-fuse-staleness-watcher.sh +287 -0
  871. package/tests/test-cowork-hook-absence-warner.sh +230 -0
  872. package/tests/test-cowork-model-picker-advisor.sh +317 -0
  873. package/tests/test-credential-exfil-guard.sh +62 -0
  874. package/tests/test-cron-create-receipt.sh +165 -0
  875. package/tests/test-cross-product-mcp-spawn-detector.sh +112 -0
  876. package/tests/test-daemon-zombie-worker-surfacer.sh +71 -0
  877. package/tests/test-daily-cost-guard.sh +131 -0
  878. package/tests/test-deny-rule-integrity-verifier.sh +288 -0
  879. package/tests/test-deployment-readback-gate.sh +92 -0
  880. package/tests/test-deployment-readback-gh-adapter.sh +163 -0
  881. package/tests/test-disabled-feature-toggle-advisor.sh +78 -0
  882. package/tests/test-dispatch-allowlist-preflight.sh +385 -0
  883. package/tests/test-dispatch-liveness-watchdog.sh +319 -0
  884. package/tests/test-dispatch-receipt.sh +314 -0
  885. package/tests/test-dotenv-anthropic-key-billing-guard.sh +160 -0
  886. package/tests/test-echo-probe-spam-detector.sh +143 -0
  887. package/tests/test-edit-quote-ambiguity-guard.sh +75 -0
  888. package/tests/test-ephemeral-container-detector.sh +251 -0
  889. package/tests/test-evidence-claim-gate.sh +291 -0
  890. package/tests/test-exploration-budget-guard.sh +164 -0
  891. package/tests/test-extended-thinking-loop-guard.sh +289 -0
  892. package/tests/test-extended-thinking-resume-warning.sh +240 -0
  893. package/tests/test-extended-thinking-tool-use-mismatch-detector.sh +236 -0
  894. package/tests/test-fabricated-command-detector.sh +296 -0
  895. package/tests/test-false-disk-full-guard.sh +36 -0
  896. package/tests/test-feature-deprecation-detector.sh +117 -0
  897. package/tests/test-forbidden-response-phrase-detector.sh +246 -0
  898. package/tests/test-git-operations-require-approval.sh +53 -0
  899. package/tests/test-git-push-blast-radius-guard.sh +115 -0
  900. package/tests/test-goal-iteration-limit-warner.sh +128 -0
  901. package/tests/test-growthbook-flag-monitor.sh +428 -0
  902. package/tests/test-halt-signal-detector.sh +120 -0
  903. package/tests/test-hook-self-disable-detector.sh +232 -0
  904. package/tests/test-iteration-quality-degradation-detector.sh +244 -0
  905. package/tests/test-long-session-malformed-tool-call-detector.sh +185 -0
  906. package/tests/test-marketplace-plugins.sh +193 -0
  907. package/tests/test-mcp-misdiagnosis-arrest.sh +235 -0
  908. package/tests/test-mcp-orphan-leak-warner.sh +71 -0
  909. package/tests/test-mcp-permissions-ask-warner.sh +207 -0
  910. package/tests/test-mcp-routine-approval-detector.sh +229 -0
  911. package/tests/test-mcp-startup-bloat-detector.sh +141 -0
  912. package/tests/test-mcp-stdio-compatibility-test.sh +112 -0
  913. package/tests/test-memory-chain-audit.sh +59 -0
  914. package/tests/test-memory-orphan-detector.sh +227 -0
  915. package/tests/test-model-swap-suggester.sh +368 -0
  916. package/tests/test-model-version-lock.sh +83 -0
  917. package/tests/test-multi-file-plan-routing-gate.sh +277 -0
  918. package/tests/test-multi-window-auth-drift-detector.sh +262 -0
  919. package/tests/test-nested-spawn-inflight-guard.sh +281 -0
  920. package/tests/test-no-force-flag.sh +49 -0
  921. package/tests/test-non-english-quality-warner.sh +229 -0
  922. package/tests/test-oauth-refresh-monitor.sh +311 -0
  923. package/tests/test-opus-degradation-tracker.sh +274 -0
  924. package/tests/test-opus48-routine-task-warning.sh +201 -0
  925. package/tests/test-opus48-thinking-wedge-advisor.sh +249 -0
  926. package/tests/test-output-token-spike-detector.sh +315 -0
  927. package/tests/test-parallel-batch-size-limiter.sh +228 -0
  928. package/tests/test-parallel-cascade-detector.sh +191 -0
  929. package/tests/test-partial-view-claim-arrest.sh +272 -0
  930. package/tests/test-per-prompt-token-cap.sh +136 -0
  931. package/tests/test-persisted-1m-model-advisor.sh +71 -0
  932. package/tests/test-plugin-hooks-json-bloat-detector.sh +267 -0
  933. package/tests/test-post-edit-disk-verify.sh +294 -0
  934. package/tests/test-pre-bash-sed-line-ending-windows.sh +108 -0
  935. package/tests/test-pre-execution-claim-detector.sh +366 -0
  936. package/tests/test-private-key-backup-and-git-credentials.sh +100 -0
  937. package/tests/test-proxy-capture-suggester.sh +214 -0
  938. package/tests/test-public-artefact-socratic-narrowing.sh +346 -0
  939. package/tests/test-quota-anomaly-detector.sh +321 -0
  940. package/tests/test-quota-reset-audit.sh +81 -0
  941. package/tests/test-read-loop-detector.sh +137 -0
  942. package/tests/test-read-once-guard.sh +85 -0
  943. package/tests/test-receipts-aggregate.sh +143 -0
  944. package/tests/test-redirect-fragment-warner.sh +130 -0
  945. package/tests/test-redundant-read-blocker.sh +155 -0
  946. package/tests/test-refusal-arrest-gate.sh +303 -0
  947. package/tests/test-remote-control-billing-classifier.sh +125 -0
  948. package/tests/test-resume-drift-watcher.sh +65 -0
  949. package/tests/test-rg-replace-flag-detector.sh +175 -0
  950. package/tests/test-rhetorical-verification-prompt-detector.sh +237 -0
  951. package/tests/test-rm-safety-net.sh +115 -0
  952. package/tests/test-route-handler-emptiness-gate.sh +300 -0
  953. package/tests/test-runtime-binary-change-detector.sh +196 -0
  954. package/tests/test-same-command-repeat-detector.sh +165 -0
  955. package/tests/test-same-correction-arrest.sh +165 -0
  956. package/tests/test-scope-expansion-receipt.sh +207 -0
  957. package/tests/test-server-side-prompt-injection-detector.sh +181 -0
  958. package/tests/test-session-persistence-verifier.sh +128 -0
  959. package/tests/test-session-rate-monitor.sh +284 -0
  960. package/tests/test-session-start-quota-status.sh +210 -0
  961. package/tests/test-session-start-safety-check.sh +138 -0
  962. package/tests/test-settings-hooks-key-restorer.sh +257 -0
  963. package/tests/test-settings-json-health-check.sh +70 -0
  964. package/tests/test-settings-regression-tester.sh +197 -0
  965. package/tests/test-skill-cumulative-size-detector.sh +198 -0
  966. package/tests/test-skill-description-drop-detector.sh +236 -0
  967. package/tests/test-skill-truncation-detector.sh +263 -0
  968. package/tests/test-skills-context-recorder.sh +329 -0
  969. package/tests/test-skills-load-verifier.sh +184 -0
  970. package/tests/test-skills-settings-validator.sh +242 -0
  971. package/tests/test-sonnet-45-deprecation-helper.sh +150 -0
  972. package/tests/test-spurious-malformed-notice-detector.sh +290 -0
  973. package/tests/test-sql-bulk-delete-warn.sh +123 -0
  974. package/tests/test-ssh-key-protect.sh +81 -0
  975. package/tests/test-stale-temp-settings-detector.sh +161 -0
  976. package/tests/test-standing-rule-session-surfacer.sh +215 -0
  977. package/tests/test-starter-hooks-manifest.sh +96 -0
  978. package/tests/test-stop-hook-sigterm-wrapper.sh +258 -0
  979. package/tests/test-strict-allowlist.sh +72 -0
  980. package/tests/test-subagent-boundary-precheck.sh +137 -0
  981. package/tests/test-subagent-closure-verify-gate.sh +193 -0
  982. package/tests/test-subagent-destructive-git-guard.sh +86 -0
  983. package/tests/test-subagent-identity-leak-guard.sh +62 -0
  984. package/tests/test-subagent-identity-reassertion.sh +61 -0
  985. package/tests/test-subagent-inheritance-tester.sh +319 -0
  986. package/tests/test-subagent-permission-mode-guard.sh +61 -0
  987. package/tests/test-subagent-spawn-verification-enforcer.sh +60 -0
  988. package/tests/test-subagent-tool-allowlist-enforcer.sh +62 -0
  989. package/tests/test-subagent-tool-call-limiter.sh +97 -0
  990. package/tests/test-subscription-api-billing-warner.sh +138 -0
  991. package/tests/test-subscription-bypass-detector.sh +255 -0
  992. package/tests/test-temporal-suggestion-detector.sh +183 -0
  993. package/tests/test-thinking-budget-effort-mismatch-detector.sh +327 -0
  994. package/tests/test-thinking-stall-detector.sh +151 -0
  995. package/tests/test-tokenizer-ratio-alert-corpus.sh +77 -0
  996. package/tests/test-tokenizer-ratio-alert.sh +93 -0
  997. package/tests/test-tool-result-correlation-checker.sh +264 -0
  998. package/tests/test-tool-result-size-guard.sh +121 -0
  999. package/tests/test-transcript-contamination-detector.sh +264 -0
  1000. package/tests/test-trigger-header-parsing.sh +151 -0
  1001. package/tests/test-ultrareview-large-diff-advisor.sh +192 -0
  1002. package/tests/test-userprompt-submit-receipt.sh +181 -0
  1003. package/tests/test-verify-after-publish-reminder.sh +184 -0
  1004. package/tests/test-version-bump-detector.sh +212 -0
  1005. package/tests/test-version-regression-warner.sh +165 -0
  1006. package/tests/test-warn-cron-cost-trap.sh +82 -0
  1007. package/tests/test-webfetch-runaway-guard.sh +77 -0
  1008. package/tests/test-wellness-break-reminder.sh +138 -0
  1009. package/tests/test-windows-destructive-command-guard.sh +169 -0
  1010. package/tests/test-windows-python-stub-detector.sh +146 -0
  1011. package/tests/test-worktree-edit-boundary-guard.sh +219 -0
  1012. package/tests/test-write-byte-integrity-verifier.sh +192 -0
  1013. package/tests/test-xml-format-leak-detector.sh +299 -0
  1014. package/tests/trustfall-mcp-injection-guard.test.sh +183 -0
  1015. package/tests/workspace-lease-guard.test.sh +144 -0
  1016. package/tests/worktree-escape-write-guard.test.sh +68 -0
  1017. package/tests/worktree-hooks-path-fix.test.sh +181 -0
  1018. package/tests/worktree-parent-write-guard.test.sh +51 -0
  1019. package/tests/write-empty-content-guard.test.sh +39 -0
  1020. package/tests/write-nul-corruption-detector.test.sh +29 -0
  1021. package/tests/write-overwrite-unread-content.test.sh +178 -0
  1022. package/tests/wsl-host-disk-space-guard.test.sh +55 -0
@@ -0,0 +1,156 @@
1
+ #!/bin/bash
2
+ # non-english-quality-warner.sh — Surface the Cluster 15 non-English output quality regression
3
+ # at session start for operators working in non-English languages with Opus 4.7
4
+ #
5
+ # Background:
6
+ # Starting with Claude Code 2.1.126 (early May 2026), Opus 4.7's non-English outputs
7
+ # began exhibiting register-inappropriate vocabulary at significantly elevated rates.
8
+ # The strongest quantitative evidence comes from issue #62961 (2026-05-28): a Kiwi
9
+ # morpheme-level analysis of 114.9M Korean output tokens across 4,666 sessions over
10
+ # ~2 months (Mar 21 – May 25, 2026) shows:
11
+ #
12
+ # Period (Korean verb 박다 frequency per 10K tokens)
13
+ # Baseline (Mar 21 – May 2, Opus 4.6 → 4.7) : 0.0174 (1.0×)
14
+ # After 2.1.126 (May 3–7, Opus 4.7) : 0.1147 (6.6×)
15
+ # After 2.1.132 (May 8–17, Opus 4.7) : 0.3138 (18.0×)
16
+ # After 2.1.143 (May 18–25, Opus 4.7) : 0.3106 (17.9×)
17
+ #
18
+ # The verb "박다" (bakda) is colloquial/slang ("to hammer/nail in") — register-
19
+ # inappropriate for professional documents. It is being used where formal verbs
20
+ # like "명시하다" (to specify), "기록하다" (to record), or "삽입하다" (to insert)
21
+ # would be expected. The 6.6× → 18.0× jump at 2.1.132 strongly correlates with
22
+ # Claude Code CLI updates, not the model transition (Opus 4.6 → 4.7 happened
23
+ # April 16, well before the spike).
24
+ #
25
+ # The pattern is not limited to Korean. Independent operator reports surface:
26
+ # - Japanese register collapse (2-4× signal)
27
+ # - Mixed Chinese-English code-switching at unexpected rates
28
+ # - Polish/Spanish formality drift (smaller signal, harder to quantify)
29
+ #
30
+ # This is a server-side quality regression. There is no client-side fix that
31
+ # restores baseline register quality. The hook exists to surface the situation
32
+ # to operators who would otherwise notice the degradation only after shipping
33
+ # documents that used slang verbs in formal contexts.
34
+ #
35
+ # References:
36
+ # - https://github.com/anthropics/claude-code/issues/62961 (Korean evidence)
37
+ # - https://gist.github.com/yurukusa/9b882f7009d36ad5477c46f890272acc (field guide)
38
+ #
39
+ # What this hook does:
40
+ # On SessionStart, when CC_NON_ENGLISH_QUALITY_WARNER_REMIND=1 is set, emits a
41
+ # stderr advisory naming the three operator-side workarounds for non-English
42
+ # register-quality work during the Cluster 15 window. The hook is fully opt-in —
43
+ # silent by default. The advisory does not assume the operator's language; it
44
+ # describes the situation and lets the operator decide if it applies.
45
+ #
46
+ # When this hook does NOT emit anything:
47
+ # - CC_NON_ENGLISH_QUALITY_WARNER_REMIND is unset or empty
48
+ # - CC_NON_ENGLISH_QUALITY_WARNER_DISABLE=1
49
+ # - CC_NON_ENGLISH_QUALITY_WARNER_QUIET=1
50
+ #
51
+ # Hook config (settings.json):
52
+ # {
53
+ # "hooks": {
54
+ # "SessionStart": [{
55
+ # "matcher": "",
56
+ # "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/non-english-quality-warner.sh" }]
57
+ # }]
58
+ # }
59
+ # }
60
+ # And in your shell rc, opt in:
61
+ # export CC_NON_ENGLISH_QUALITY_WARNER_REMIND=1
62
+ #
63
+ # Env vars:
64
+ # CC_NON_ENGLISH_QUALITY_WARNER_REMIND=1 — opt-in trigger (required to emit)
65
+ # CC_NON_ENGLISH_QUALITY_WARNER_DISABLE=1 — never emit (overrides REMIND)
66
+ # CC_NON_ENGLISH_QUALITY_WARNER_QUIET=1 — silent (overrides REMIND)
67
+ #
68
+ # Design notes:
69
+ # - Opt-in by default. The advisory is only useful to operators producing non-
70
+ # English output. Defaulting silent avoids noise for the English-language
71
+ # operator majority.
72
+ # - Language-agnostic advisory. The hook does not try to auto-detect the
73
+ # operator's language. Auto-detection from CLAUDE.md or env vars would be
74
+ # unreliable (a Japanese operator may have an English CLAUDE.md), and a wrong
75
+ # guess is worse than no guess.
76
+ # - Never blocks. Exit always 0.
77
+ # - No version gating. The Cluster 15 window started at 2.1.126 and is ongoing
78
+ # as of 2026-05-30. Gating on version would risk silencing the advisory after
79
+ # Anthropic patches the regression (the operator would no longer hear the
80
+ # advisory, but the patch's effectiveness is something they need to verify).
81
+ # The advisory text describes the situation and the verification path; the
82
+ # operator can disable it once they have verified that their workflow is
83
+ # unaffected.
84
+
85
+ set -u
86
+
87
+ # Hard disable path
88
+ if [ "${CC_NON_ENGLISH_QUALITY_WARNER_DISABLE:-0}" = "1" ]; then
89
+ exit 0
90
+ fi
91
+
92
+ # Quiet path
93
+ if [ "${CC_NON_ENGLISH_QUALITY_WARNER_QUIET:-0}" = "1" ]; then
94
+ exit 0
95
+ fi
96
+
97
+ # Opt-in gate
98
+ if [ "${CC_NON_ENGLISH_QUALITY_WARNER_REMIND:-0}" != "1" ]; then
99
+ exit 0
100
+ fi
101
+
102
+ cat >&2 <<'EOF'
103
+ [non-english-quality-warner] Cluster 15 advisory: non-English output register
104
+ quality has regressed in Opus 4.7 since Claude Code 2.1.126 (early May 2026).
105
+
106
+ Strongest quantitative signal (issue #62961, Korean morpheme analysis):
107
+ Baseline (pre-2.1.126) : 1.0× baseline slang verb frequency
108
+ After 2.1.126 : 6.6× slang verb frequency
109
+ After 2.1.132 and later : 18.0× slang verb frequency
110
+
111
+ The pattern: formal/professional-register verbs are being replaced by colloquial
112
+ or slang alternatives in contexts where the colloquial form would not appear in
113
+ a professional document. The defect is server-side and Opus-4.7-specific; there
114
+ is no client-side patch that restores the baseline register.
115
+
116
+ If you produce non-English output for any document that requires professional
117
+ register (reports, customer-facing content, technical docs in your language),
118
+ three operator-side workarounds reduce the exposure:
119
+
120
+ 1) Pin formal register in your system prompt or CLAUDE.md.
121
+ Add an explicit rule naming the registers you want and the registers you do
122
+ not. Example (Japanese):
123
+ "出力は formal register に固定。 colloquial / slang の語彙の混入を避ける。
124
+ 書き言葉の規律で、 報告書に出せる調子で書く。"
125
+ For Korean, name the slang verbs you have already observed and exclude them:
126
+ "박다, 박히다 등의 비격식체 동사 사용 금지。 명시하다, 기록하다,
127
+ 삽입하다 등의 격식체 동사를 사용。"
128
+
129
+ 2) Switch to Sonnet for register-sensitive output.
130
+ Sonnet 4.6 and 4.7 are not affected by the Cluster 15 regression in the
131
+ same way (independent reports — please verify on your own workload before
132
+ trusting this for production output). For the specific turns that produce
133
+ register-sensitive text, swap with:
134
+ export ANTHROPIC_MODEL=claude-sonnet-4-7
135
+ Switch back to Opus for non-register-sensitive work (planning, reasoning).
136
+
137
+ 3) Post-process the output for known slang substitutions.
138
+ For high-volume non-English production, maintain a sed/awk substitution
139
+ list of the slang verbs your style guide rejects, applied to the model's
140
+ output before shipping. This is a stop-gap, not a fix, and it does not
141
+ catch register problems your list does not anticipate — but for known
142
+ repeat offenders it works.
143
+
144
+ This advisory will continue to surface until you disable it. To turn it off
145
+ once you have either chosen a workaround or verified Anthropic has patched the
146
+ regression for your workflow:
147
+ unset CC_NON_ENGLISH_QUALITY_WARNER_REMIND
148
+ # or
149
+ export CC_NON_ENGLISH_QUALITY_WARNER_QUIET=1
150
+
151
+ References:
152
+ https://github.com/anthropics/claude-code/issues/62961 (Korean evidence)
153
+ https://gist.github.com/yurukusa/9b882f7009d36ad5477c46f890272acc (field guide)
154
+ EOF
155
+
156
+ exit 0
@@ -18,7 +18,7 @@
18
18
 
19
19
  # Linux (notify-send) — skip on WSL2 where D-Bus may not be running
20
20
  #
21
- # TRIGGER: PreToolUse MATCHER: "Bash"
21
+ # TRIGGER: Notification MATCHER: ""
22
22
  if command -v notify-send &>/dev/null && [ -z "$WSL_DISTRO_NAME" ]; then
23
23
  notify-send "Claude Code" "Waiting for your input" --urgency=normal 2>/dev/null && exit 0
24
24
  fi
File without changes
@@ -16,6 +16,18 @@
16
16
  #
17
17
  # TRIGGER: PreToolUse MATCHER: "Bash"
18
18
 
19
+ # Without jq, the parse below silently yields empty and this hook stops
20
+ # guarding - with no error anywhere. Say so. We deliberately do not exit
21
+ # here: blocking would halt every tool call, and exiting 0 would change
22
+ # the behaviour of guards that do not depend on the parsed value.
23
+ if ! command -v jq >/dev/null 2>&1; then
24
+ _nojq_warned="/tmp/cc-nojq-warned-npm-global-install-guard-$PPID"
25
+ [ -f "$_nojq_warned" ] || {
26
+ echo "WARNING [npm-global-install-guard]: jq not found - this hook cannot inspect tool calls and is NOT protecting you. Install jq." >&2
27
+ : > "$_nojq_warned"
28
+ }
29
+ fi
30
+
19
31
  INPUT=$(cat)
20
32
  COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty' 2>/dev/null)
21
33
 
@@ -1,6 +1,18 @@
1
1
  #!/bin/bash
2
2
  #
3
3
  # TRIGGER: PreToolUse MATCHER: "Bash"
4
+ # Without jq, the parse below silently yields empty and this hook stops
5
+ # guarding - with no error anywhere. Say so. We deliberately do not exit
6
+ # here: blocking would halt every tool call, and exiting 0 would change
7
+ # the behaviour of guards that do not depend on the parsed value.
8
+ if ! command -v jq >/dev/null 2>&1; then
9
+ _nojq_warned="/tmp/cc-nojq-warned-npm-publish-guard-$PPID"
10
+ [ -f "$_nojq_warned" ] || {
11
+ echo "WARNING [npm-publish-guard]: jq not found - this hook cannot inspect tool calls and is NOT protecting you. Install jq." >&2
12
+ : > "$_nojq_warned"
13
+ }
14
+ fi
15
+
4
16
  COMMAND=$(cat | jq -r '.tool_input.command // empty' 2>/dev/null)
5
17
  [ -z "$COMMAND" ] && exit 0
6
18
  if echo "$COMMAND" | grep -qE '^\s*(npm\s+publish|npx\s+npm\s+publish)' && ! echo "$COMMAND" | grep -qE '\-\-dry-run'; then
File without changes
File without changes
@@ -1,3 +1,4 @@
1
+ #!/bin/bash
1
2
  #
2
3
  # TRIGGER: PreToolUse MATCHER: "Edit|Write"
3
4
  INPUT=$(cat)
@@ -0,0 +1,210 @@
1
+ #!/bin/bash
2
+ # oauth-refresh-monitor.sh — Detect OAuth refresh corruption patterns in tool output
3
+ # and warn before the operator hits the persistent 401 loop (Cluster 19 candidate, axis 19A)
4
+ #
5
+ # Background:
6
+ # Cluster 19 candidate axis 19A documents OAuth refresh failure paths where a
7
+ # transient upstream error during a refresh operation corrupts the credentials
8
+ # state into a persistent broken loop. The specific anchor case:
9
+ #
10
+ # #61912 (2026-05-23) — OAuth refresh corrupts credentials state during
11
+ # transient upstream 5xx → persistent 401 loop. A single transient error
12
+ # during refresh creates a permanent broken state.
13
+ #
14
+ # The pattern is structurally distinct from straightforward 401 expiry: the
15
+ # operator's credential state was valid just before the refresh, the upstream
16
+ # returned 5xx on the refresh request, and now subsequent requests return 401
17
+ # even though the user did not log out and the original session was not
18
+ # expired. The recovery requires a full re-auth, not just a retry.
19
+ #
20
+ # Adjacent cases in axis 19A:
21
+ # #59460 — MCP OAuth re-runs DCR on every authenticate, orphaning prior tokens
22
+ # #59725 — Slack MCP OAuth stores empty accessToken after flow completion
23
+ # #60260 — MCP OAuth completes but token is not honored
24
+ # #61139 — Shopify MCP token-expired loop after multi-shop switch
25
+ #
26
+ # All share the structural shape: an OAuth flow surface reports success and a
27
+ # downstream call fails with 401 / "Needs authentication" / similar. The
28
+ # common detection signal is the appearance of one of these strings in tool
29
+ # output AFTER a successful login or refresh signal.
30
+ #
31
+ # Reference:
32
+ # https://gist.github.com/yurukusa/58cb17bfda4d5ab31bd804809809d22f (field guide)
33
+ #
34
+ # What this hook does:
35
+ # On PostToolUse, scans tool output for OAuth-refresh-corruption signatures.
36
+ # When a signature is detected, emits a one-shot per-session stderr advisory
37
+ # recommending the recovery path (full re-auth, not a retry) and the
38
+ # verification steps from the auth-status-checker companion hook.
39
+ #
40
+ # Detection signatures (case-insensitive):
41
+ # - "needs authentication"
42
+ # - "401 unauthorized" + "refresh" within the same tool output
43
+ # - "oauth" + "expired" within the same tool output
44
+ # - "refresh token rejected"
45
+ # - "401" + "token" within the same tool output (broad fallback)
46
+ #
47
+ # When this hook does NOT emit anything:
48
+ # - CC_OAUTH_REFRESH_MONITOR_DISABLE=1
49
+ # - CC_OAUTH_REFRESH_MONITOR_QUIET=1
50
+ # - tool output does not contain any of the detection signatures
51
+ # - the same signature already fired the advisory in this session
52
+ #
53
+ # Hook config (settings.json):
54
+ # {
55
+ # "hooks": {
56
+ # "PostToolUse": [{
57
+ # "matcher": "",
58
+ # "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/oauth-refresh-monitor.sh" }]
59
+ # }]
60
+ # }
61
+ # }
62
+ #
63
+ # Env vars:
64
+ # CC_OAUTH_REFRESH_MONITOR_DISABLE=1 — never emit
65
+ # CC_OAUTH_REFRESH_MONITOR_QUIET=1 — silent
66
+ # CC_OAUTH_REFRESH_MONITOR_STATE_DIR=<p> — one-shot state dir
67
+ # CC_OAUTH_REFRESH_MONITOR_SESSION_ID=<id> — session id override (tests)
68
+ #
69
+ # Design notes:
70
+ # - Opt-out, not opt-in. Unlike the other Cluster 19 hooks (auth-status-checker,
71
+ # auth-expiry-reminder) which need explicit REMIND=1 to fire, this hook
72
+ # fires automatically when the signature appears. The reasoning: the
73
+ # signature is specific enough that a false positive is unlikely, and the
74
+ # cost of missing the advisory (an operator entering the persistent 401 loop
75
+ # without knowing) exceeds the cost of an occasional spurious advisory.
76
+ # - One-shot per session. The advisory fires once per session per signature.
77
+ # Repeating the same advisory N times in a session would itself become
78
+ # noise.
79
+ # - Never blocks. Exit always 0. The corruption pattern is server-side; a
80
+ # blocking hook would only add operator pain without preventing the
81
+ # corruption.
82
+ #
83
+ # The registration was missing from this header. The installer reads TRIGGER
84
+ # and MATCHER from here and falls back to PreToolUse / Bash when both are
85
+ # absent, so this hook was being registered at a moment where the field it
86
+ # reads is always empty: it installed, it appeared in the settings, and it
87
+ # did nothing. Measured 2026-08-04 across examples/: 14 files were like this.
88
+ # TRIGGER: PostToolUse
89
+ # MATCHER: ""
90
+
91
+ set -u
92
+
93
+ # Disable path
94
+ if [ "${CC_OAUTH_REFRESH_MONITOR_DISABLE:-0}" = "1" ]; then
95
+ exit 0
96
+ fi
97
+
98
+ # Quiet path
99
+ if [ "${CC_OAUTH_REFRESH_MONITOR_QUIET:-0}" = "1" ]; then
100
+ exit 0
101
+ fi
102
+
103
+ # Read PostToolUse payload from stdin
104
+ INPUT=$(cat 2>/dev/null) || exit 0
105
+ [ -n "$INPUT" ] || exit 0
106
+
107
+ # Extract tool output. Try jq first; fall back to a permissive grep.
108
+ TOOL_OUTPUT=""
109
+ if command -v jq >/dev/null 2>&1; then
110
+ TOOL_OUTPUT=$(printf '%s' "$INPUT" | jq -r '
111
+ .tool_response.output //
112
+ .tool_response //
113
+ .output //
114
+ empty
115
+ ' 2>/dev/null)
116
+ fi
117
+ if [ -z "$TOOL_OUTPUT" ]; then
118
+ TOOL_OUTPUT="$INPUT"
119
+ fi
120
+ [ -n "$TOOL_OUTPUT" ] || exit 0
121
+
122
+ # Lowercase for matching
123
+ LOWER=$(printf '%s' "$TOOL_OUTPUT" | tr '[:upper:]' '[:lower:]')
124
+
125
+ # Detect signatures
126
+ SIGNATURE=""
127
+ if printf '%s' "$LOWER" | grep -q "needs authentication"; then
128
+ SIGNATURE="needs-authentication"
129
+ elif printf '%s' "$LOWER" | grep -q "refresh token rejected"; then
130
+ SIGNATURE="refresh-token-rejected"
131
+ elif printf '%s' "$LOWER" | grep -q "401" && printf '%s' "$LOWER" | grep -q "refresh"; then
132
+ SIGNATURE="401-after-refresh"
133
+ elif printf '%s' "$LOWER" | grep -q "oauth" && printf '%s' "$LOWER" | grep -q "expired"; then
134
+ SIGNATURE="oauth-expired"
135
+ elif printf '%s' "$LOWER" | grep -q "401" && printf '%s' "$LOWER" | grep -q "token"; then
136
+ SIGNATURE="401-token"
137
+ fi
138
+
139
+ # No signature → silent
140
+ [ -n "$SIGNATURE" ] || exit 0
141
+
142
+ # One-shot per session per signature
143
+ STATE_DIR="${CC_OAUTH_REFRESH_MONITOR_STATE_DIR:-$HOME/.claude}"
144
+ mkdir -p "$STATE_DIR" 2>/dev/null || exit 0
145
+ STATE_FILE="$STATE_DIR/oauth-refresh-monitor.fired"
146
+
147
+ SESSION_ID="${CC_OAUTH_REFRESH_MONITOR_SESSION_ID:-}"
148
+ if [ -z "$SESSION_ID" ]; then
149
+ SESSION_ID="${CLAUDECODE_SESSION_ID:-}"
150
+ fi
151
+ if [ -z "$SESSION_ID" ] && command -v tty >/dev/null 2>&1; then
152
+ TTY_PATH=$(tty 2>/dev/null)
153
+ if [ -n "$TTY_PATH" ] && [ "$TTY_PATH" != "not a tty" ]; then
154
+ SESSION_ID=$(printf '%s' "$TTY_PATH" | tr '/' '_')
155
+ fi
156
+ fi
157
+ [ -n "$SESSION_ID" ] || SESSION_ID="ppid-${PPID:-0}"
158
+
159
+ FIRED_KEY="${SESSION_ID}::${SIGNATURE}"
160
+ if [ -f "$STATE_FILE" ] && grep -Fq -- "$FIRED_KEY" "$STATE_FILE" 2>/dev/null; then
161
+ exit 0
162
+ fi
163
+
164
+ # Bound state file
165
+ if [ -f "$STATE_FILE" ]; then
166
+ tail -n 100 "$STATE_FILE" > "${STATE_FILE}.tmp" 2>/dev/null \
167
+ && mv "${STATE_FILE}.tmp" "$STATE_FILE" 2>/dev/null || true
168
+ fi
169
+ printf '%s\n' "$FIRED_KEY" >> "$STATE_FILE" 2>/dev/null || true
170
+
171
+ cat >&2 <<EOF
172
+ [oauth-refresh-monitor] OAuth refresh corruption signature detected in tool
173
+ output: "$SIGNATURE".
174
+
175
+ Cluster 19 candidate axis 19A documents OAuth refresh failure paths where a
176
+ transient upstream error during a refresh operation corrupts the credentials
177
+ state into a persistent broken loop (anchor case: issue #61912). The pattern
178
+ is structurally distinct from straightforward 401 expiry — the operator's
179
+ credential state was valid just before the refresh, the upstream returned 5xx
180
+ or rejected the refresh, and now subsequent requests return 401 even though
181
+ the user did not log out and the original session was not expired.
182
+
183
+ Recovery (NOT a retry — retry compounds the corruption):
184
+ 1. Run /account to confirm the current auth state.
185
+ 2. If "Not authenticated," do a full re-auth (logout then login) rather
186
+ than relying on automatic refresh.
187
+ 3. For MCP servers, restart the MCP connection rather than relying on
188
+ in-session token refresh; the MCP refresh paths (#59460 / #59725 /
189
+ #60260 / #61139) are the specific failure modes here.
190
+
191
+ Why the recovery is "full re-auth, not retry":
192
+ The corruption is in the refresh token state itself, so subsequent
193
+ refresh attempts fail in the same way. Only a fresh authentication
194
+ bypasses the corrupted refresh path.
195
+
196
+ This advisory fires once per session per signature. To silence:
197
+ export CC_OAUTH_REFRESH_MONITOR_QUIET=1
198
+
199
+ Companion hooks:
200
+ auth-status-checker.sh — full Cluster 19 mitigation menu (SessionStart, opt-in)
201
+ auth-expiry-reminder.sh — daily checkpoint reminder (SessionStart, opt-in)
202
+
203
+ References:
204
+ https://github.com/anthropics/claude-code/issues/61912 (axis 19A anchor)
205
+ https://github.com/anthropics/claude-code/issues/59460 (MCP OAuth DCR re-runs)
206
+ https://github.com/anthropics/claude-code/issues/61923 (refresh token rejection)
207
+ https://gist.github.com/yurukusa/58cb17bfda4d5ab31bd804809809d22f (field guide)
208
+ EOF
209
+
210
+ exit 0
@@ -0,0 +1,187 @@
1
+ #!/bin/bash
2
+ # opus-degradation-tracker.sh — Personal Opus 4.7 pass-rate tracker that alerts on statistical degradation
3
+ #
4
+ # Background:
5
+ # On 2026-05-22, an independent third party (Margin Lab) detected statistically
6
+ # significant degradation in Claude Code Opus 4.7's SWE-Bench-Pro daily pass rate
7
+ # (65% baseline → 57% on the 7-day window, delta -8 points, exceeds the 4.3%
8
+ # significance threshold at 95% CI). The aggregate signal is documented at
9
+ # https://gist.github.com/yurukusa/77bf08523bda41132087a03de4523d7a — but each
10
+ # operator's workload responds differently to model drift. This hook lets an
11
+ # operator translate Margin Lab's aggregate signal into a workload-specific
12
+ # decision input.
13
+ #
14
+ # The operator records pass/fail outcomes from their own Claude Code sessions
15
+ # (one line per session, simple shell append) and this hook computes:
16
+ # - baseline pass rate (first N days of the log, default 30)
17
+ # - recent pass rate (last 7 days)
18
+ # - delta and whether it crosses the configured threshold
19
+ #
20
+ # When degradation crosses the threshold, the hook surfaces the four operator
21
+ # paths from Migration Playbook v2 plus the Margin Lab Gist for cross-source
22
+ # verification. Silent in the happy path.
23
+ #
24
+ # What this hook does:
25
+ # On SessionStart, read ~/.cc-eval-log (or CC_EVAL_LOG_PATH), compute baseline
26
+ # vs recent pass rate, emit a one-line advisory if recent drops below baseline
27
+ # by more than the threshold (default 5 percentage points). Otherwise silent.
28
+ #
29
+ # Log format (one line per session, append by hand or via shell function):
30
+ # YYYY-MM-DD HH:MM session-tag pass|fail
31
+ #
32
+ # Example:
33
+ # 2026-05-15 14:23 pr-review-task pass
34
+ # 2026-05-15 18:01 doc-rewrite fail
35
+ # 2026-05-22 09:12 pr-review-task fail
36
+ # 2026-05-23 11:30 doc-rewrite fail
37
+ #
38
+ # Optional fourth column "notes" is ignored — useful for human context.
39
+ #
40
+ # Suggested helper (add to ~/.bashrc or ~/.zshrc):
41
+ # cc-eval-pass() { echo "$(date '+%Y-%m-%d %H:%M') ${1:-session} pass" >> ~/.cc-eval-log; }
42
+ # cc-eval-fail() { echo "$(date '+%Y-%m-%d %H:%M') ${1:-session} fail" >> ~/.cc-eval-log; }
43
+ #
44
+ # When this hook does NOT fire a warning:
45
+ # - CC_OPUS_DEGRADATION_TRACKER_QUIET=1
46
+ # - log file does not exist or has fewer than CC_OPUS_DEGRADATION_TRACKER_MIN_SAMPLES (default 20) entries
47
+ # - recent pass rate is within threshold of baseline (default 5 pp)
48
+ # - log file is malformed (logs to stderr, exits 0 so SessionStart continues)
49
+ #
50
+ # Hook config (settings.json):
51
+ # {
52
+ # "hooks": {
53
+ # "SessionStart": [{
54
+ # "matcher": "",
55
+ # "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/opus-degradation-tracker.sh" }]
56
+ # }]
57
+ # }
58
+ # }
59
+ #
60
+ # Env vars:
61
+ # CC_EVAL_LOG_PATH — log file location (default ~/.cc-eval-log)
62
+ # CC_OPUS_DEGRADATION_TRACKER_QUIET=1 — never emit anything
63
+ # CC_OPUS_DEGRADATION_TRACKER_THRESHOLD=N — percentage-point threshold for alert (default 5)
64
+ # CC_OPUS_DEGRADATION_TRACKER_MIN_SAMPLES=N — minimum entries before stats run (default 20)
65
+ # CC_OPUS_DEGRADATION_TRACKER_BASELINE_DAYS=N — days at the front of the log treated as baseline (default 30)
66
+ # CC_OPUS_DEGRADATION_TRACKER_RECENT_DAYS=N — days at the tail of the log treated as recent window (default 7)
67
+
68
+ set -u
69
+
70
+ # Silence path
71
+ if [ "${CC_OPUS_DEGRADATION_TRACKER_QUIET:-0}" = "1" ]; then
72
+ exit 0
73
+ fi
74
+
75
+ LOG_PATH="${CC_EVAL_LOG_PATH:-$HOME/.cc-eval-log}"
76
+ THRESHOLD="${CC_OPUS_DEGRADATION_TRACKER_THRESHOLD:-5}"
77
+ MIN_SAMPLES="${CC_OPUS_DEGRADATION_TRACKER_MIN_SAMPLES:-20}"
78
+ BASELINE_DAYS="${CC_OPUS_DEGRADATION_TRACKER_BASELINE_DAYS:-30}"
79
+ RECENT_DAYS="${CC_OPUS_DEGRADATION_TRACKER_RECENT_DAYS:-7}"
80
+
81
+ # Log file missing → user hasn't set up tracking yet → silent
82
+ if [ ! -f "$LOG_PATH" ]; then
83
+ exit 0
84
+ fi
85
+
86
+ # Read and parse the log. Each valid line: YYYY-MM-DD HH:MM tag pass|fail
87
+ # Use awk for portable parsing without external date dependencies.
88
+ analysis=$(awk -v threshold="$THRESHOLD" -v min_samples="$MIN_SAMPLES" -v baseline_days="$BASELINE_DAYS" -v recent_days="$RECENT_DAYS" '
89
+ BEGIN {
90
+ total = 0
91
+ baseline_pass = 0; baseline_total = 0
92
+ recent_pass = 0; recent_total = 0
93
+ today_epoch = systime()
94
+ baseline_cutoff_epoch = today_epoch - (baseline_days * 86400)
95
+ recent_cutoff_epoch = today_epoch - (recent_days * 86400)
96
+ }
97
+ /^[0-9]{4}-[0-9]{2}-[0-9]{2}[ \t]+[0-9]{2}:[0-9]{2}[ \t]+[^ \t]+[ \t]+(pass|fail)([ \t]|$)/ {
98
+ # Parse date into epoch (assumes GNU/BSD compatible mktime via awk)
99
+ split($1, d, "-")
100
+ split($2, t, ":")
101
+ line_epoch = mktime(d[1] " " d[2] " " d[3] " " t[1] " " t[2] " 00")
102
+ if (line_epoch <= 0) next
103
+ total++
104
+ is_pass = ($4 == "pass") ? 1 : 0
105
+
106
+ # Recent window: last RECENT_DAYS days
107
+ if (line_epoch >= recent_cutoff_epoch) {
108
+ recent_total++
109
+ if (is_pass) recent_pass++
110
+ }
111
+
112
+ # Baseline window: oldest BASELINE_DAYS days of recorded history
113
+ # We compute this in a second pass with "min_epoch" tracking.
114
+ # Use total==1 (first valid entry) instead of NR==1: NR counts every
115
+ # file line including malformed ones that fail the regex match.
116
+ if (total == 1 || line_epoch < min_epoch) min_epoch = line_epoch
117
+ sample[total, "epoch"] = line_epoch
118
+ sample[total, "pass"] = is_pass
119
+ }
120
+ END {
121
+ if (total < min_samples) {
122
+ print "INSUFFICIENT " total
123
+ exit
124
+ }
125
+ # Now compute baseline window from the oldest BASELINE_DAYS of recorded data
126
+ baseline_cutoff_from_first = min_epoch + (baseline_days * 86400)
127
+ for (i = 1; i <= total; i++) {
128
+ if (sample[i, "epoch"] <= baseline_cutoff_from_first) {
129
+ baseline_total++
130
+ if (sample[i, "pass"]) baseline_pass++
131
+ }
132
+ }
133
+ if (baseline_total < min_samples / 2) {
134
+ print "BASELINE_TOO_SMALL " baseline_total
135
+ exit
136
+ }
137
+ if (recent_total < min_samples / 4) {
138
+ print "RECENT_TOO_SMALL " recent_total
139
+ exit
140
+ }
141
+ baseline_rate = (baseline_pass / baseline_total) * 100
142
+ recent_rate = (recent_pass / recent_total) * 100
143
+ delta = baseline_rate - recent_rate
144
+ if (delta > threshold) {
145
+ printf "DEGRADED %d %d %d %d %.1f %.1f %.1f\n", baseline_pass, baseline_total, recent_pass, recent_total, baseline_rate, recent_rate, delta
146
+ } else {
147
+ printf "HEALTHY %d %d %d %d %.1f %.1f %.1f\n", baseline_pass, baseline_total, recent_pass, recent_total, baseline_rate, recent_rate, delta
148
+ }
149
+ }
150
+ ' "$LOG_PATH" 2>/dev/null) || {
151
+ # awk failure → log is malformed in a way the parser cannot recover from
152
+ # Exit silently so SessionStart is not blocked
153
+ exit 0
154
+ }
155
+
156
+ status="${analysis%% *}"
157
+ case "$status" in
158
+ INSUFFICIENT|BASELINE_TOO_SMALL|RECENT_TOO_SMALL|HEALTHY|"")
159
+ # Healthy or not enough data — silent
160
+ exit 0
161
+ ;;
162
+ DEGRADED)
163
+ # Parse the rest of the line for the numbers
164
+ read -r _ baseline_pass baseline_total recent_pass recent_total baseline_rate recent_rate delta <<< "$analysis"
165
+ cat >&2 <<EOF
166
+ [opus-degradation-tracker] Personal pass rate dropped from ${baseline_rate}% baseline (${baseline_pass}/${baseline_total}) to ${recent_rate}% recent (${recent_pass}/${recent_total}) — delta -${delta} pp, exceeding the configured threshold of -${THRESHOLD} pp.
167
+
168
+ This is your own workload's signal. The independent third-party Margin Lab tracker
169
+ (SWE-Bench-Pro daily evals on Opus 4.7) also shows -8 pp degradation since 2026-05-22.
170
+ The two signals together suggest a model-side change rather than a workload-specific issue.
171
+
172
+ Cross-source verification:
173
+ https://gist.github.com/yurukusa/77bf08523bda41132087a03de4523d7a
174
+ (4 operator-side paths + 7-day audit sequence)
175
+
176
+ Decision context for the 2026-06-15 credit pool split (\$20 Pro / \$100 Max 5x / \$200 Max 20x):
177
+ https://yurukusa.gumroad.com/l/claude-code-migration-playbook?utm_source=hook-opus-degradation-tracker&utm_medium=hook&utm_campaign=5-22-degradation
178
+
179
+ To stop seeing this alert: \`export CC_OPUS_DEGRADATION_TRACKER_QUIET=1\` in your shell rc.
180
+ EOF
181
+ exit 0
182
+ ;;
183
+ *)
184
+ # Unknown status — log to stderr but don't block
185
+ exit 0
186
+ ;;
187
+ esac