cc-safe-setup 29.8.0 → 30.0.5
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.
- package/.claude-plugin/marketplace.json +72 -19
- package/.claude-plugin/plugin.json +1 -1
- package/CONTRIBUTING.md +7 -2
- package/COOKBOOK.md +50 -46
- package/LICENSE +21 -0
- package/MIGRATION.md +8 -8
- package/README.md +421 -512
- package/SAFETY_CHECKLIST.md +15 -7
- package/SERVICES.md +194 -0
- package/SETTINGS_REFERENCE.md +236 -17
- package/SKILL.md +5 -5
- package/TROUBLESHOOTING.md +35 -14
- package/action.yml +12 -4
- package/audit/README.md +84 -0
- package/audit/audit-checklist.md +152 -0
- package/audit/boundary-selftest.sh +85 -0
- package/audit/boundary.sh +123 -0
- package/audit/count-hooks.py +42 -0
- package/audit/find-dead-hooks.sh +82 -0
- package/audit/find-unfirable-rules.sh +142 -0
- package/audit/fire.sh +97 -0
- package/audit/selftest.sh +42 -0
- package/audit/unfirable-selftest.sh +81 -0
- package/audit-web/index.html +9 -9
- package/examples/README.md +54 -17
- package/examples/account-billing-log.sh +98 -0
- package/examples/account-routing-preflight.sh +123 -0
- package/examples/agent-sdk-credit-pool-monitor.sh +145 -0
- package/examples/agent-view-quota-decrement.sh +32 -0
- package/examples/agent-view-quota-warn.sh +94 -0
- package/examples/agents-md-edit-drift-warner.sh +223 -0
- package/examples/agents-md-loader.sh +160 -0
- package/examples/agents-md-sync-checker.sh +102 -0
- package/examples/ai-slop-punctuation-arrest.sh +210 -0
- package/examples/allowlist.sh +70 -10
- package/examples/always-allow-pattern-suggester.sh +125 -0
- package/examples/ansible-vault-guard.sh +2 -1
- package/examples/anthropic-base-url-guard.sh +76 -0
- package/examples/api-busyloop-guard.sh +123 -0
- package/examples/api-endpoint-guard.sh +12 -0
- package/examples/api-key-in-url-guard.sh +17 -1
- package/examples/api-rate-limit-guard.sh +36 -1
- package/examples/api-rate-limit-tracker.sh +12 -0
- package/examples/articulated-scope-capture.sh +101 -0
- package/examples/askuserquestion-autonomy-gate.sh +102 -0
- package/examples/attachment-traversal-guard.sh +118 -0
- package/examples/aup-block-pattern-logger.sh +161 -0
- package/examples/aup-false-positive-helper.sh +124 -0
- package/examples/aup-large-tool-output-warner.sh +282 -0
- package/examples/aup-retry-loop-guard.sh +229 -0
- package/examples/auth-expiry-reminder.sh +157 -0
- package/examples/auth-macos-sleep-detector.sh +185 -0
- package/examples/auth-path-detector.sh +171 -0
- package/examples/auth-status-checker.sh +157 -0
- package/examples/authorized-reconfirmation-detector.sh +195 -0
- package/examples/auto-approve-build.sh +39 -0
- package/examples/auto-approve-cargo.sh +31 -1
- package/examples/auto-approve-docker.sh +35 -0
- package/examples/auto-approve-git-read.sh +37 -14
- package/examples/auto-approve-go.sh +30 -1
- package/examples/auto-approve-gradle.sh +29 -1
- package/examples/auto-approve-make.sh +29 -1
- package/examples/auto-approve-maven.sh +29 -1
- package/examples/auto-approve-python.sh +41 -1
- package/examples/auto-approve-readonly-tools.sh +1 -0
- package/examples/auto-approve-readonly.sh +110 -33
- package/examples/auto-approve-ssh.sh +30 -1
- package/examples/auto-approve-test.sh +44 -0
- package/examples/auto-checkpoint.sh +1 -1
- package/examples/auto-compact-prep.sh +0 -0
- package/examples/auto-git-checkpoint.sh +0 -0
- package/examples/auto-mode-safe-commands.sh +53 -1
- package/examples/auto-mode-safety-enforcer.sh +151 -4
- package/examples/auto-push-session-branch.sh +22 -0
- package/examples/aws-production-guard.sh +13 -1
- package/examples/aws-region-guard.sh +1 -1
- package/examples/background-cost-launch-guard.sh +82 -0
- package/examples/background-task-guard.sh +12 -0
- package/examples/backup-before-refactor.sh +0 -0
- package/examples/banned-command-guard.sh +12 -0
- package/examples/bash-allowlist-secondary-check.sh +157 -0
- package/examples/bash-domain-allowlist.sh +12 -0
- package/examples/bash-fanout-bounded-rewriter.sh +191 -0
- package/examples/bash-heuristic-approver.sh +112 -10
- package/examples/bash-project-fence.sh +194 -0
- package/examples/bash-safety-auto-deny.sh +12 -0
- package/examples/bash-secret-output-detector.sh +44 -3
- package/examples/bash-trace-guard.sh +12 -0
- package/examples/bashrc-safety-check.sh +0 -0
- package/examples/bg-permission-prompt-warner.sh +182 -0
- package/examples/bg-task-cooldown-guard.sh +12 -0
- package/examples/binary-read-detector.sh +135 -0
- package/examples/binary-upload-guard.sh +12 -0
- package/examples/block-database-wipe.sh +35 -10
- package/examples/branch-name-check.sh +8 -3
- package/examples/branch-naming-convention.sh +0 -0
- package/examples/broad-find-guard.sh +12 -0
- package/examples/broad-prefix-session-trap-warner.sh +106 -0
- package/examples/bulk-file-delete-guard.sh +45 -0
- package/examples/bypass-mode-effective-verifier.sh +203 -0
- package/examples/cache-creation-drift-detector.sh +120 -0
- package/examples/cache-residue-detector.sh +195 -0
- package/examples/cache-tier-logger.sh +70 -0
- package/examples/cache-ttl-eviction-detector.sh +149 -0
- package/examples/cargo-publish-guard.sh +14 -1
- package/examples/case-insensitive-path-guard.sh +21 -2
- package/examples/case-sensitive-guard.sh +23 -2
- package/examples/cch-cache-guard.sh +0 -0
- package/examples/cch-sentinel-precommit-guard.sh +47 -0
- package/examples/check-abort-controller.sh +1 -1
- package/examples/check-accessibility.sh +0 -0
- package/examples/check-aria-labels.sh +0 -0
- package/examples/check-before-act-enforcer.sh +12 -0
- package/examples/check-charset-meta.sh +0 -0
- package/examples/check-cookie-flags.sh +0 -0
- package/examples/check-cors-config.sh +0 -0
- package/examples/check-csp-headers.sh +0 -0
- package/examples/check-csrf-protection.sh +0 -0
- package/examples/check-debounce.sh +1 -1
- package/examples/check-dependency-age.sh +0 -0
- package/examples/check-dependency-license.sh +0 -0
- package/examples/check-dockerfile-best-practice.sh +0 -0
- package/examples/check-error-boundaries.sh +0 -0
- package/examples/check-error-class.sh +1 -1
- package/examples/check-error-handling.sh +0 -0
- package/examples/check-error-logging.sh +1 -1
- package/examples/check-error-message.sh +0 -0
- package/examples/check-error-stack.sh +0 -0
- package/examples/check-favicon.sh +0 -0
- package/examples/check-git-hooks-compat.sh +0 -0
- package/examples/check-gitattributes.sh +0 -0
- package/examples/check-https-redirect.sh +0 -0
- package/examples/check-input-validation.sh +0 -0
- package/examples/check-lang-attribute.sh +0 -0
- package/examples/check-npm-scripts-exist.sh +0 -0
- package/examples/check-package-size.sh +0 -0
- package/examples/check-port-availability.sh +0 -0
- package/examples/check-promise-all.sh +1 -1
- package/examples/check-rate-limiting.sh +0 -0
- package/examples/check-return-types.sh +0 -0
- package/examples/check-semantic-versioning.sh +0 -0
- package/examples/check-suspense-fallback.sh +1 -1
- package/examples/check-test-exists.sh +0 -0
- package/examples/check-test-naming.sh +0 -0
- package/examples/check-timeout-cleanup.sh +1 -1
- package/examples/check-tls-version.sh +0 -0
- package/examples/check-unsubscribe.sh +1 -1
- package/examples/check-viewport-meta.sh +0 -0
- package/examples/check-worker-terminate.sh +1 -1
- package/examples/checkpoint-tamper-guard.sh +12 -0
- package/examples/chmod-guard.sh +12 -0
- package/examples/chown-guard.sh +24 -0
- package/examples/ci-workflow-guard.sh +6 -1
- package/examples/claim-verify-detector.sh +109 -0
- package/examples/claim-vs-caveat-checker.sh +77 -0
- package/examples/classifier-fallback-allow.sh +114 -40
- package/examples/claude-cache-gc.sh +1 -0
- package/examples/claude-code-version-pin-advisor.sh +183 -0
- package/examples/claude-md-reinjector.sh +129 -0
- package/examples/claude-md-size-monitor.sh +66 -0
- package/examples/claude-update-budget-guard.sh +123 -0
- package/examples/claude-update-smart.sh +113 -0
- package/examples/claudeignore-enforce-guard.sh +12 -0
- package/examples/claudemd-enforcer.sh +0 -0
- package/examples/claudemd-tool-prohibition.sh +128 -0
- package/examples/clear-command-confirm-guard.sh +32 -15
- package/examples/cli-config-pinning-detector.sh +162 -0
- package/examples/cliff-countdown-advisor.sh +96 -0
- package/examples/clipboard-secret-guard.sh +12 -0
- package/examples/closure-word-verify-gate.sh +150 -0
- package/examples/cloud-cli-guard.sh +39 -2
- package/examples/commit-all-scope-guard.sh +44 -0
- package/examples/commit-message-check.sh +1 -1
- package/examples/commit-message-quality.sh +6 -1
- package/examples/commitment-carry-forward-arrest.sh +361 -0
- package/examples/compact-alert-notification.sh +0 -0
- package/examples/compact-dispatch-watchdog.sh +149 -0
- package/examples/completion-claim-without-verification-detector.sh +207 -0
- package/examples/composer-guard.sh +12 -0
- package/examples/compound-bash-permission-resolver.sh +156 -0
- package/examples/compound-command-allow.sh +1 -1
- package/examples/compound-command-deny-enforcer.sh +183 -0
- package/examples/compound-inject-guard.sh +12 -0
- package/examples/concurrent-edit-lock.sh +12 -0
- package/examples/conflict-marker-guard.sh +12 -0
- package/examples/consecutive-error-breaker.sh +0 -0
- package/examples/console-log-count.sh +1 -0
- package/examples/context-compact-advisor.sh +29 -2
- package/examples/context-length-budget.sh +69 -0
- package/examples/context-threshold-alert.sh +12 -0
- package/examples/context-usage-drift-alert.sh +41 -13
- package/examples/conversation-history-guard.sh +12 -0
- package/examples/core-file-protect-guard.sh +12 -0
- package/examples/cors-star-warn.sh +0 -0
- package/examples/cost-incident-self-audit.sh +162 -0
- package/examples/cowork-claude-md-load-checker.sh +100 -0
- package/examples/cowork-fuse-staleness-watcher.sh +140 -0
- package/examples/cowork-hook-absence-warner.sh +167 -0
- package/examples/cowork-model-picker-advisor.sh +115 -0
- package/examples/credential-exfil-guard.sh +65 -4
- package/examples/credential-file-cat-guard.sh +17 -1
- package/examples/cron-create-receipt.sh +112 -0
- package/examples/cron-modification-guard.sh +12 -0
- package/examples/cross-product-mcp-spawn-detector.sh +178 -0
- package/examples/cwd-project-boundary-guard.sh +0 -0
- package/examples/daemon-zombie-worker-surfacer.sh +118 -0
- package/examples/daily-cost-guard.sh +164 -0
- package/examples/daily-usage-tracker.sh +0 -0
- package/examples/dangerous-pip-flag-guard.sh +12 -0
- package/examples/db-connect-guard.sh +13 -1
- package/examples/denied-action-retry-guard.sh +12 -0
- package/examples/deny-bypass-detector.sh +12 -0
- package/examples/deny-rule-integrity-verifier.sh +181 -0
- package/examples/dependency-install-guard.sh +12 -0
- package/examples/deploy-guard.sh +14 -2
- package/examples/deploy-path-verify-guard.sh +12 -0
- package/examples/deployment-readback-gate.sh +135 -0
- package/examples/deployment-readback-gh-adapter.sh +247 -0
- package/examples/deployment-verify-guard.sh +25 -2
- package/examples/destructive-db-script-write-guard.sh +166 -0
- package/examples/destructive-migration-write-guard.sh +163 -0
- package/examples/diff-size-guard.sh +12 -0
- package/examples/disabled-feature-toggle-advisor.sh +88 -0
- package/examples/disk-partition-guard.sh +12 -0
- package/examples/dispatch-allowlist-preflight.sh +301 -0
- package/examples/dispatch-liveness-watchdog.sh +216 -0
- package/examples/dispatch-receipt.sh +174 -0
- package/examples/django-migrate-guard.sh +12 -0
- package/examples/dns-config-guard.sh +12 -0
- package/examples/docker-dangerous-guard.sh +12 -0
- package/examples/docker-volume-guard.sh +0 -0
- package/examples/dockerfile-latest-guard.sh +1 -0
- package/examples/dotenv-anthropic-key-billing-guard.sh +99 -0
- package/examples/dotenv-commit-guard.sh +12 -0
- package/examples/dotenv-read-guard.sh +12 -0
- package/examples/dotfile-protection-guard.sh +12 -0
- package/examples/dotnet-build-on-edit.sh +1 -1
- package/examples/drizzle-migrate-guard.sh +27 -2
- package/examples/echo-probe-spam-detector.sh +176 -0
- package/examples/edit-counter-test-gate.sh +12 -0
- package/examples/edit-error-counter.sh +1 -1
- package/examples/edit-guard.sh +12 -0
- package/examples/edit-old-string-validator.sh +12 -0
- package/examples/edit-quote-ambiguity-guard.sh +97 -0
- package/examples/edit-retry-loop-guard.sh +0 -0
- package/examples/edit-verify.sh +0 -0
- package/examples/env-inline-secret-guard.sh +14 -2
- package/examples/env-naming-convention.sh +0 -0
- package/examples/env-prod-guard.sh +0 -0
- package/examples/env-required-check.sh +0 -0
- package/examples/env-source-guard.sh +12 -0
- package/examples/env-var-check.sh +24 -1
- package/examples/ephemeral-container-detector.sh +147 -0
- package/examples/error-memory-guard.sh +12 -0
- package/examples/evidence-claim-gate.sh +187 -0
- package/examples/exploration-budget-guard.sh +12 -0
- package/examples/expo-eject-guard.sh +13 -0
- package/examples/extended-thinking-loop-guard.sh +139 -0
- package/examples/extended-thinking-resume-warning.sh +119 -0
- package/examples/extended-thinking-tool-use-mismatch-detector.sh +212 -0
- package/examples/fabricated-command-detector.sh +145 -0
- package/examples/false-disk-full-guard.sh +63 -0
- package/examples/feature-deprecation-detector.sh +109 -0
- package/examples/file-change-tracker.sh +1 -1
- package/examples/file-change-undo-tracker.sh +0 -0
- package/examples/file-edit-backup.sh +63 -14
- package/examples/file-reference-check.sh +0 -0
- package/examples/file-size-limit.sh +12 -0
- package/examples/financial-operation-guard.sh +12 -0
- package/examples/firewall-guard.sh +12 -0
- package/examples/fish-shell-wrapper.sh +125 -7
- package/examples/five-hundred-milestone.sh +1 -0
- package/examples/flask-static-route-guard.sh +89 -0
- package/examples/forbidden-response-phrase-detector.sh +161 -0
- package/examples/gem-push-guard.sh +13 -0
- package/examples/gh-cli-destructive-guard.sh +13 -1
- package/examples/git-checkout-safety-guard.sh +12 -0
- package/examples/git-checkout-uncommitted-guard.sh +12 -0
- package/examples/git-config-guard.sh +12 -0
- package/examples/git-crypt-worktree-guard.sh +12 -0
- package/examples/git-filter-repo-guard.sh +56 -0
- package/examples/git-history-rewrite-guard.sh +12 -0
- package/examples/git-hook-bypass-guard.sh +0 -0
- package/examples/git-maintenance-guard.sh +83 -0
- package/examples/git-merge-conflict-prevent.sh +0 -0
- package/examples/git-message-length-check.sh +0 -0
- package/examples/git-message-length.sh +0 -0
- package/examples/git-operations-require-approval.sh +68 -14
- package/examples/git-pack-temp-cleanup-guard.sh +102 -0
- package/examples/git-push-blast-radius-guard.sh +218 -0
- package/examples/git-remote-guard.sh +24 -3
- package/examples/git-rm-orphan-wipe-guard.sh +85 -0
- package/examples/git-stash-before-checkout.sh +12 -0
- package/examples/git-stash-before-danger.sh +0 -0
- package/examples/git-submodule-guard.sh +69 -2
- package/examples/git-tag-guard.sh +12 -0
- package/examples/github-actions-secret-guard.sh +0 -0
- package/examples/gitignore-check.sh +0 -0
- package/examples/gitops-drift-guard.sh +12 -0
- package/examples/go-mod-tidy-warn.sh +1 -0
- package/examples/go-vet-after-edit.sh +12 -0
- package/examples/goal-iteration-limit-warner.sh +152 -0
- package/examples/grep-nul-false-negative-guard.sh +30 -0
- package/examples/growthbook-flag-monitor.sh +257 -0
- package/examples/hallucination-url-check.sh +1 -1
- package/examples/halt-signal-detector.sh +135 -0
- package/examples/handoff-on-clear.sh +65 -0
- package/examples/hardcoded-ip-guard.sh +1 -0
- package/examples/headless-empty-result-guard.sh +0 -0
- package/examples/headless-stop-guard.sh +0 -0
- package/examples/helm-install-guard.sh +2 -1
- package/examples/home-critical-bash-guard.sh +17 -1
- package/examples/hook-debug-wrapper.sh +6 -2
- package/examples/hook-permission-fixer.sh +0 -0
- package/examples/hook-self-disable-detector.sh +99 -0
- package/examples/hook-stdout-sanitizer.sh +6 -2
- package/examples/hook-tamper-guard.sh +12 -0
- package/examples/idle-session-cost-alert.sh +0 -0
- package/examples/image-dimension-guard.sh +109 -0
- package/examples/image-file-validator.sh +0 -0
- package/examples/iteration-quality-degradation-detector.sh +170 -0
- package/examples/java-compile-on-edit.sh +1 -1
- package/examples/json-syntax-check.sh +0 -0
- package/examples/k8s-production-guard.sh +13 -1
- package/examples/kill-process-guard.sh +12 -0
- package/examples/kubernetes-guard.sh +13 -1
- package/examples/laravel-artisan-guard.sh +13 -0
- package/examples/large-file-guard.sh +1 -1
- package/examples/log-level-guard.sh +0 -0
- package/examples/log-truncation-guard.sh +12 -0
- package/examples/long-session-malformed-tool-call-detector.sh +183 -0
- package/examples/loop-detector.sh +12 -0
- package/examples/magic-number-warn.sh +1 -0
- package/examples/main-branch-warn.sh +12 -0
- package/examples/markdown-link-check.sh +0 -0
- package/examples/max-concurrent-agents.sh +12 -0
- package/examples/max-edit-size-guard.sh +13 -0
- package/examples/max-file-count-guard.sh +0 -0
- package/examples/max-file-delete-count.sh +0 -0
- package/examples/max-function-length.sh +1 -0
- package/examples/max-import-count.sh +0 -0
- package/examples/max-subagent-count.sh +0 -0
- package/examples/mcp-config-freeze.sh +12 -0
- package/examples/mcp-config-poisoning-audit.sh +150 -0
- package/examples/mcp-data-boundary.sh +1 -1
- package/examples/mcp-misdiagnosis-arrest.sh +209 -0
- package/examples/mcp-orphan-leak-warner.sh +49 -0
- package/examples/mcp-permissions-ask-warner.sh +151 -0
- package/examples/mcp-routine-approval-detector.sh +154 -0
- package/examples/mcp-server-allowlist.sh +12 -0
- package/examples/mcp-server-guard.sh +12 -0
- package/examples/mcp-startup-bloat-detector.sh +87 -0
- package/examples/mcp-stdio-compatibility-test.sh +153 -0
- package/examples/mcp-tool-audit-log.sh +0 -0
- package/examples/mcp-tool-guard.sh +101 -1
- package/examples/mcp-warmup-wait.sh +0 -0
- package/examples/memory-chain-audit.sh +56 -0
- package/examples/memory-orphan-detector.sh +188 -0
- package/examples/memory-write-guard.sh +99 -17
- package/examples/migration-verify-guard.sh +12 -0
- package/examples/model-swap-suggester.sh +177 -0
- package/examples/model-version-alert.sh +5 -1
- package/examples/model-version-lock.sh +63 -0
- package/examples/move-delete-sequence-guard.sh +33 -2
- package/examples/multi-file-plan-routing-gate.sh +192 -0
- package/examples/multi-vendor-concurrent-warner.sh +108 -0
- package/examples/multi-window-auth-drift-detector.sh +183 -0
- package/examples/multiline-command-approver.sh +161 -23
- package/examples/nested-background-agent-guard.sh +109 -0
- package/examples/nested-spawn-inflight-guard.sh +178 -0
- package/examples/network-exfil-guard.sh +12 -0
- package/examples/network-guard.sh +12 -0
- package/examples/network-interface-guard.sh +12 -0
- package/examples/nextjs-env-guard.sh +1 -1
- package/examples/no-absolute-import.sh +0 -0
- package/examples/no-alert-confirm-prompt.sh +0 -0
- package/examples/no-anonymous-default-export.sh +0 -0
- package/examples/no-any-type.sh +0 -0
- package/examples/no-any-typescript.sh +1 -0
- package/examples/no-ask-human.sh +12 -0
- package/examples/no-assignment-in-condition.sh +0 -0
- package/examples/no-base64-exfil.sh +12 -0
- package/examples/no-callback-hell.sh +0 -0
- package/examples/no-circular-dependency.sh +0 -0
- package/examples/no-cleartext-storage.sh +0 -0
- package/examples/no-commented-code.sh +0 -0
- package/examples/no-commit-fixup.sh +0 -0
- package/examples/no-console-assert.sh +0 -0
- package/examples/no-console-error-swallow.sh +0 -0
- package/examples/no-console-in-prod.sh +0 -0
- package/examples/no-console-log-commit.sh +12 -0
- package/examples/no-console-log.sh +0 -0
- package/examples/no-console-time.sh +0 -0
- package/examples/no-cors-wildcard.sh +4 -1
- package/examples/no-curl-upload.sh +0 -0
- package/examples/no-dangerouslySetInnerHTML.sh +0 -0
- package/examples/no-dangling-await.sh +1 -0
- package/examples/no-debug-commit.sh +12 -0
- package/examples/no-debug-in-commit.sh +0 -0
- package/examples/no-deep-nesting.sh +0 -0
- package/examples/no-deep-relative-import.sh +1 -0
- package/examples/no-default-credentials.sh +0 -0
- package/examples/no-deploy-friday.sh +13 -1
- package/examples/no-disabled-test.sh +0 -0
- package/examples/no-document-write.sh +0 -0
- package/examples/no-empty-function.sh +0 -0
- package/examples/no-eval-in-template.sh +0 -0
- package/examples/no-eval-template.sh +3 -1
- package/examples/no-eval.sh +0 -0
- package/examples/no-exec-user-input.sh +0 -0
- package/examples/no-fixme-ship.sh +12 -0
- package/examples/no-floating-promises.sh +0 -0
- package/examples/no-force-flag.sh +22 -5
- package/examples/no-force-install.sh +0 -0
- package/examples/no-git-amend.sh +12 -0
- package/examples/no-git-rebase-public.sh +0 -0
- package/examples/no-global-install.sh +12 -0
- package/examples/no-global-state.sh +0 -0
- package/examples/no-hardcoded-port.sh +1 -0
- package/examples/no-hardcoded-url.sh +0 -0
- package/examples/no-helmet-missing.sh +0 -0
- package/examples/no-http-url.sh +1 -0
- package/examples/no-http-without-https.sh +0 -0
- package/examples/no-inline-style.sh +0 -0
- package/examples/no-inline-styles.sh +1 -0
- package/examples/no-innerhtml.sh +0 -0
- package/examples/no-install-global.sh +12 -0
- package/examples/no-jwt-in-url.sh +0 -0
- package/examples/no-large-commit.sh +0 -0
- package/examples/no-localhost-expose.sh +0 -0
- package/examples/no-magic-number.sh +0 -0
- package/examples/no-md5-sha1.sh +0 -0
- package/examples/no-mixed-line-endings.sh +8 -1
- package/examples/no-mutation-in-reducer.sh +0 -0
- package/examples/no-nested-ternary.sh +0 -0
- package/examples/no-network-exfil.sh +0 -0
- package/examples/no-open-redirect.sh +0 -0
- package/examples/no-output-truncation.sh +12 -0
- package/examples/no-package-downgrade.sh +0 -0
- package/examples/no-package-lock-edit.sh +12 -0
- package/examples/no-path-join-user-input.sh +0 -0
- package/examples/no-port-bind.sh +0 -0
- package/examples/no-process-exit.sh +0 -0
- package/examples/no-prototype-pollution.sh +0 -0
- package/examples/no-push-without-ci.sh +0 -0
- package/examples/no-push-without-tests.sh +12 -0
- package/examples/no-raw-password-in-url.sh +0 -0
- package/examples/no-root-user-docker.sh +1 -0
- package/examples/no-root-write.sh +12 -0
- package/examples/no-secrets-in-args.sh +4 -1
- package/examples/no-secrets-in-logs.sh +0 -0
- package/examples/no-sensitive-log.sh +0 -0
- package/examples/no-sleep-in-hooks.sh +0 -0
- package/examples/no-star-import-python.sh +1 -0
- package/examples/no-string-concat-sql.sh +0 -0
- package/examples/no-sudo-guard.sh +12 -0
- package/examples/no-sync-fs.sh +0 -0
- package/examples/no-todo-in-merge.sh +0 -0
- package/examples/no-todo-in-production.sh +1 -0
- package/examples/no-todo-without-issue.sh +0 -0
- package/examples/no-unused-import.sh +0 -0
- package/examples/no-var-keyword.sh +0 -0
- package/examples/no-verify-blocker.sh +12 -0
- package/examples/no-wget-piped-bash.sh +12 -0
- package/examples/no-wildcard-cors.sh +0 -0
- package/examples/no-wildcard-delete.sh +0 -0
- package/examples/no-wildcard-import.sh +0 -0
- package/examples/no-with-statement.sh +0 -0
- package/examples/no-write-outside-src.sh +0 -0
- package/examples/no-xml-external-entity.sh +0 -0
- package/examples/non-english-quality-warner.sh +156 -0
- package/examples/notify-waiting.sh +1 -1
- package/examples/npm-audit-warn.sh +0 -0
- package/examples/npm-global-install-guard.sh +12 -0
- package/examples/npm-publish-guard.sh +12 -0
- package/examples/npm-script-injection.sh +0 -0
- package/examples/npm-supply-chain-guard.sh +0 -0
- package/examples/nuxt-config-guard.sh +1 -0
- package/examples/oauth-refresh-monitor.sh +210 -0
- package/examples/opus-degradation-tracker.sh +187 -0
- package/examples/opus48-routine-task-warning.sh +196 -0
- package/examples/opus48-thinking-wedge-advisor.sh +143 -0
- package/examples/output-credential-scan.sh +1 -1
- package/examples/output-secret-mask.sh +31 -9
- package/examples/output-token-spike-detector.sh +145 -0
- package/examples/package-json-guard.sh +12 -0
- package/examples/package-lock-frozen.sh +12 -0
- package/examples/parallel-batch-size-limiter.sh +121 -0
- package/examples/parallel-cascade-detector.sh +116 -0
- package/examples/partial-view-claim-arrest.sh +174 -0
- package/examples/path-deny-bash-guard.sh +12 -0
- package/examples/path-traversal-guard.sh +12 -0
- package/examples/per-prompt-token-cap.sh +124 -0
- package/examples/permission-audit-log.sh +1 -1
- package/examples/permission-denial-enforcer.sh +12 -0
- package/examples/permission-entry-validator.sh +0 -0
- package/examples/persisted-1m-model-advisor.sh +88 -0
- package/examples/php-lint-on-edit.sh +1 -1
- package/examples/pii-upload-guard.sh +12 -0
- package/examples/pip-publish-guard.sh +13 -0
- package/examples/pip-requirements-guard.sh +12 -0
- package/examples/pip-venv-required.sh +12 -0
- package/examples/plan-mode-edit-guard.sh +12 -0
- package/examples/plan-mode-enforcer.sh +12 -0
- package/examples/plan-mode-strict-guard.sh +12 -0
- package/examples/plugin-hooks-json-bloat-detector.sh +169 -0
- package/examples/plugin-process-cleanup.sh +0 -0
- package/examples/polyglot-rm-guard.sh +12 -0
- package/examples/post-compact-safety.sh +12 -0
- package/examples/post-edit-disk-verify.sh +152 -0
- package/examples/powershell-remove-item-guard.sh +85 -0
- package/examples/pr-description-check.sh +0 -0
- package/examples/pr-duplicate-guard.sh +13 -0
- package/examples/pre-bash-sed-line-ending-windows.sh +87 -0
- package/examples/pre-compact-knowledge-save.sh +0 -0
- package/examples/pre-compact-transcript-backup.sh +0 -0
- package/examples/pre-execution-claim-detector.sh +179 -0
- package/examples/prefer-builtin-tools.sh +10 -1
- package/examples/prefer-const.sh +0 -0
- package/examples/prefer-dedicated-tools.sh +12 -0
- package/examples/prefer-optional-chaining.sh +0 -0
- package/examples/prisma-migrate-guard.sh +24 -7
- package/examples/production-port-kill-guard.sh +12 -0
- package/examples/prompt-injection-guard.sh +2 -1
- package/examples/prompt-usage-logger.sh +0 -0
- package/examples/protect-claudemd.sh +12 -0
- package/examples/protect-dotfiles.sh +12 -0
- package/examples/proxy-capture-suggester.sh +159 -0
- package/examples/public-artefact-socratic-narrowing.sh +232 -0
- package/examples/public-repo-push-guard.sh +12 -0
- package/examples/push-requires-test-pass-record.sh +0 -0
- package/examples/push-requires-test-pass.sh +12 -0
- package/examples/quota-anomaly-detector.sh +173 -0
- package/examples/quota-reset-audit.sh +58 -0
- package/examples/quoted-flag-approver.sh +99 -10
- package/examples/rails-migration-guard.sh +12 -0
- package/examples/rate-limit-guard.sh +0 -0
- package/examples/read-all-files-enforcer.sh +0 -0
- package/examples/read-budget-guard.sh +12 -0
- package/examples/read-loop-detector.sh +59 -0
- package/examples/read-once-guard.sh +96 -0
- package/examples/read-only-mode.sh +12 -0
- package/examples/readme-exists-check.sh +0 -0
- package/examples/record-read-coverage.sh +73 -0
- package/examples/redirect-fragment-warner.sh +149 -0
- package/examples/redis-flushall-guard.sh +13 -0
- package/examples/redundant-read-blocker.sh +132 -0
- package/examples/refusal-arrest-gate.sh +248 -0
- package/examples/registry-publish-guard.sh +13 -1
- package/examples/remote-control-billing-classifier.sh +135 -0
- package/examples/replace-all-guard.sh +12 -0
- package/examples/repo-visibility-guard.sh +12 -0
- package/examples/reroute-after-block-guard.sh +150 -0
- package/examples/response-budget-guard.sh +0 -0
- package/examples/resume-drift-watcher.sh +57 -0
- package/examples/rg-replace-flag-detector.sh +125 -0
- package/examples/rhetorical-verification-prompt-detector.sh +102 -0
- package/examples/ripgrep-permission-fix.sh +0 -0
- package/examples/rm-safety-net.sh +151 -8
- package/examples/role-tool-guard.sh +12 -0
- package/examples/route-handler-emptiness-gate.sh +324 -0
- package/examples/ruby-lint-on-edit.sh +1 -1
- package/examples/runtime-binary-change-detector.sh +102 -0
- package/examples/same-command-repeat-detector.sh +196 -0
- package/examples/same-correction-arrest.sh +169 -0
- package/examples/sandbox-denywrite-enforcer.sh +78 -0
- package/examples/sandbox-relative-path-audit.sh +83 -25
- package/examples/sandbox-write-verify.sh +12 -0
- package/examples/schema-migration-guard.sh +0 -0
- package/examples/scope-expansion-receipt.sh +178 -0
- package/examples/scope-guard.sh +88 -9
- package/examples/secret-file-read-guard.sh +12 -0
- package/examples/secret-file-write-guard.sh +150 -0
- package/examples/self-modify-bypass-guard.sh +0 -0
- package/examples/sensitive-file-read-guard.sh +23 -3
- package/examples/sensitive-log-guard.sh +1 -0
- package/examples/server-side-prompt-injection-detector.sh +69 -0
- package/examples/session-agent-cost-limiter.sh +12 -0
- package/examples/session-backup-on-start.sh +1 -1
- package/examples/session-cost-alert.sh +12 -0
- package/examples/session-drift-guard.sh +12 -0
- package/examples/session-duration-guard.sh +25 -2
- package/examples/session-end-logger.sh +0 -0
- package/examples/session-health-monitor.sh +0 -0
- package/examples/session-index-repair.sh +1 -1
- package/examples/session-memory-watchdog.sh +1 -0
- package/examples/session-permission-reset-guard.sh +12 -0
- package/examples/session-persistence-verifier.sh +93 -0
- package/examples/session-plugin-pin-watch.sh +68 -0
- package/examples/session-rate-monitor.sh +176 -0
- package/examples/session-resume-env-fix.sh +0 -0
- package/examples/session-start-quota-status.sh +193 -0
- package/examples/session-start-safety-check.sh +55 -3
- package/examples/session-state-saver.sh +0 -0
- package/examples/session-summary-stop.sh +1 -1
- package/examples/session-summary.sh +0 -0
- package/examples/session-token-counter.sh +1 -1
- package/examples/settings-hooks-key-restorer.sh +99 -0
- package/examples/settings-json-health-check.sh +57 -0
- package/examples/settings-json-model-guard.sh +0 -0
- package/examples/settings-regression-tester.sh +188 -0
- package/examples/shell-config-truncation-guard.sh +12 -0
- package/examples/shell-wrapper-guard.sh +12 -0
- package/examples/skill-cumulative-size-detector.sh +104 -0
- package/examples/skill-description-drop-detector.sh +148 -0
- package/examples/skill-gate.sh +0 -0
- package/examples/skill-truncation-detector.sh +154 -0
- package/examples/skills-context-recorder.sh +167 -0
- package/examples/skills-load-verifier.sh +96 -0
- package/examples/skills-settings-validator.sh +139 -0
- package/examples/sonnet-45-deprecation-helper.sh +85 -0
- package/examples/spec-file-scope-guard.sh +12 -0
- package/examples/spring-profile-guard.sh +1 -0
- package/examples/spurious-malformed-notice-detector.sh +247 -0
- package/examples/sql-bulk-delete-warn.sh +88 -0
- package/examples/sql-injection-detect.sh +0 -0
- package/examples/ssh-key-protect.sh +12 -0
- package/examples/staged-secret-scan.sh +22 -1
- package/examples/stale-temp-settings-detector.sh +86 -0
- package/examples/standing-rule-session-surfacer.sh +137 -0
- package/examples/stop-hook-sigterm-wrapper.sh +182 -0
- package/examples/stop-transcript-write-health.sh +64 -0
- package/examples/strict-allowlist.sh +57 -15
- package/examples/strip-coauthored-by.sh +50 -10
- package/examples/subagent-blast-radius-guard.sh +184 -0
- package/examples/subagent-boundary-precheck.sh +126 -0
- package/examples/subagent-budget-guard.sh +12 -0
- package/examples/subagent-claudemd-inject.sh +0 -0
- package/examples/subagent-closure-verify-gate.sh +164 -0
- package/examples/subagent-destructive-git-guard.sh +120 -0
- package/examples/subagent-error-detector.sh +0 -0
- package/examples/subagent-forged-system-reminder-guard.sh +156 -0
- package/examples/subagent-identity-leak-guard.sh +102 -0
- package/examples/subagent-identity-reassertion.sh +51 -0
- package/examples/subagent-inheritance-tester.sh +179 -0
- package/examples/subagent-permission-mode-guard.sh +110 -0
- package/examples/subagent-scope-guard.sh +12 -0
- package/examples/subagent-spawn-verification-enforcer.sh +102 -0
- package/examples/subagent-tool-allowlist-enforcer.sh +101 -0
- package/examples/subagent-tool-call-limiter.sh +87 -15
- package/examples/subcommand-chain-guard.sh +12 -0
- package/examples/subscription-api-billing-warner.sh +160 -0
- package/examples/subscription-bypass-detector.sh +152 -0
- package/examples/svelte-lint-on-edit.sh +1 -0
- package/examples/swift-build-on-edit.sh +1 -1
- package/examples/symlink-guard.sh +27 -2
- package/examples/symlink-protect.sh +1 -0
- package/examples/system-dir-protection-guard.sh +73 -8
- package/examples/system-message-workaround.sh +38 -13
- package/examples/system-package-guard.sh +12 -0
- package/examples/systemd-service-guard.sh +12 -0
- package/examples/task-integrity-guard.sh +12 -0
- package/examples/temp-file-cleanup.sh +1 -1
- package/examples/temporal-suggestion-detector.sh +135 -0
- package/examples/terraform-guard.sh +27 -6
- package/examples/test-after-edit.sh +1 -1
- package/examples/test-before-push.sh +12 -0
- package/examples/test-coverage-reminder.sh +24 -1
- package/examples/thinking-budget-effort-mismatch-detector.sh +149 -0
- package/examples/timezone-guard.sh +0 -0
- package/examples/tmp-output-size-guard.sh +0 -0
- package/examples/todo-check.sh +1 -1
- package/examples/token-budget-guard.sh +12 -0
- package/examples/token-budget-per-task.sh +12 -0
- package/examples/token-usage-tracker.sh +7 -1
- package/examples/tokenizer-ratio-alert-corpus.sh +90 -0
- package/examples/tokenizer-ratio-alert.sh +104 -0
- package/examples/tool-call-rate-limiter.sh +0 -0
- package/examples/tool-result-correlation-checker.sh +167 -0
- package/examples/tool-result-size-guard.sh +132 -0
- package/examples/tool-retry-budget-guard.sh +12 -0
- package/examples/transcript-contamination-detector.sh +138 -0
- package/examples/trustfall-mcp-injection-guard.sh +103 -0
- package/examples/ultrareview-large-diff-advisor.sh +184 -0
- package/examples/unbounded-output-guard.sh +94 -0
- package/examples/uncommitted-changes-stop.sh +1 -0
- package/examples/uncommitted-discard-guard.sh +23 -5
- package/examples/uncommitted-work-guard.sh +12 -0
- package/examples/usage-warn.sh +0 -0
- package/examples/user-account-guard.sh +12 -0
- package/examples/userprompt-submit-receipt.sh +123 -0
- package/examples/variable-expansion-guard.sh +12 -0
- package/examples/verify-after-publish-reminder.sh +93 -0
- package/examples/verify-before-commit.sh +12 -0
- package/examples/version-bump-detector.sh +156 -0
- package/examples/version-regression-warner.sh +144 -0
- package/examples/vue-lint-on-edit.sh +1 -0
- package/examples/warn-cron-cost-trap.sh +173 -0
- package/examples/webfetch-runaway-guard.sh +89 -0
- package/examples/wellness-break-reminder.sh +118 -0
- package/examples/windows-destructive-command-guard.sh +177 -0
- package/examples/windows-path-guard.sh +12 -0
- package/examples/windows-python-stub-detector.sh +63 -0
- package/examples/work-hours-guard.sh +12 -0
- package/examples/working-directory-fence.sh +12 -0
- package/examples/workspace-lease-guard.sh +205 -0
- package/examples/worktree-create-log.sh +1 -0
- package/examples/worktree-delete-guard.sh +12 -0
- package/examples/worktree-edit-boundary-guard.sh +127 -0
- package/examples/worktree-escape-write-guard.sh +114 -0
- package/examples/worktree-hook-linker.sh +0 -0
- package/examples/worktree-hooks-path-fix.sh +111 -0
- package/examples/worktree-parent-write-guard.sh +43 -0
- package/examples/worktree-project-unify.sh +2 -1
- package/examples/worktree-remove-uncommitted-guard.sh +13 -0
- package/examples/worktree-unmerged-guard.sh +7 -1
- package/examples/write-byte-integrity-verifier.sh +190 -0
- package/examples/write-empty-content-guard.sh +67 -0
- package/examples/write-nul-corruption-detector.sh +61 -0
- package/examples/write-overwrite-confirm.sh +160 -14
- package/examples/write-secret-guard.sh +27 -5
- package/examples/write-shrink-guard.sh +12 -0
- package/examples/write-test-ratio.sh +0 -0
- package/examples/wsl-host-disk-space-guard.sh +97 -0
- package/examples/xml-format-leak-detector.sh +266 -0
- package/examples/yaml-syntax-check.sh +12 -0
- package/hooks/hooks.json +6 -6
- package/index.mjs +1718 -183
- package/mission.md +2 -0
- package/package.json +4 -4
- package/plugins/credential-guard/.claude-plugin/plugin.json +9 -7
- package/plugins/git-protection/.claude-plugin/plugin.json +10 -8
- package/plugins/safety-essentials/.claude-plugin/plugin.json +9 -7
- package/plugins/token-guard/.claude-plugin/plugin.json +10 -8
- package/scripts/agents-md-sync-setup.sh +156 -0
- package/scripts/autonomy-blocked-summary.sh +148 -0
- package/scripts/build-search-index.py +43 -0
- package/scripts/build-sitemap.py +119 -0
- package/scripts/cc-doctor.sh +192 -0
- package/scripts/check-hook-event-names.py +127 -0
- package/scripts/check-misfire-instrument.sh +64 -0
- package/scripts/claim-verify-audit.sh +467 -0
- package/scripts/cowork-claudemd-helper.sh +136 -0
- package/scripts/june-15-deprecated-model-scan.sh +111 -0
- package/scripts/measure-heredoc-shapes.sh +67 -0
- package/scripts/measure-literal-match-misfire.sh +110 -0
- package/scripts/probe-scope-guard-branches.sh +48 -0
- package/scripts/probe-skip-line-both-ways.sh +65 -0
- package/scripts/receipts-aggregate.py +199 -0
- package/scripts/session-forensic-audit.py +360 -0
- package/scripts.json +9 -9
- package/scripts.json.bak-2026-07-27-find +13 -0
- package/skills/safety-setup/SKILL.md +5 -5
- package/tests/approve-side-remaining-two.test.sh +129 -0
- package/tests/approver-list-granularity.test.sh +145 -0
- package/tests/askuserquestion-autonomy-gate.test.sh +181 -0
- package/tests/audit-ci-gate.test.sh +87 -0
- package/tests/audit-cross-layer-claudemd.test.sh +170 -0
- package/tests/audit-fail-open-parse.test.sh +100 -0
- package/tests/auto-approve-compound-tail.test.sh +194 -0
- package/tests/auto-mode-path-invoked-commands.test.sh +89 -0
- package/tests/auto-mode-quoted-targets.test.sh +127 -0
- package/tests/auto-mode-unquoted-targets.test.sh +112 -0
- package/tests/bash-secret-output-detector-detects.test.sh +102 -0
- package/tests/blindspots-cross-layer.test.sh +177 -0
- package/tests/block-database-wipe.test.sh +64 -0
- package/tests/bundled-short-flags-bypass.test.sh +85 -0
- package/tests/cd-git-allow-compound-tail.test.sh +67 -0
- package/tests/chown-guard-filesystem-root.test.sh +64 -0
- package/tests/ci-workflow-guard-skip-rule.test.sh +115 -0
- package/tests/compound-deny-safe-rm-targets.test.sh +105 -0
- package/tests/core-scripts-parser-fallback.test.sh +140 -0
- package/tests/destructive-guard-bare-glob.test.sh +74 -0
- package/tests/destructive-guard-every-operand.test.sh +100 -0
- package/tests/destructive-guard-find-deletion.test.sh +114 -0
- package/tests/destructive-guard-flag-order.test.sh +106 -0
- package/tests/destructive-guard-mentions-vs-invocations.test.sh +107 -0
- package/tests/destructive-guard-quoted-target.test.sh +89 -0
- package/tests/destructive-guard-separators.test.sh +105 -0
- package/tests/destructive-guard-variable-target.test.sh +98 -0
- package/tests/destructive-guard-wrapped-command.test.sh +91 -0
- package/tests/doctor-hook-disabling-env.test.sh +92 -0
- package/tests/doctor-misspelled-settings-keys.test.sh +106 -0
- package/tests/example-guards-wrapped-command.test.sh +169 -0
- package/tests/file-edit-backup.test.sh +93 -0
- package/tests/git-filter-repo-guard.test.sh +60 -0
- package/tests/git-global-options-bypass.test.sh +141 -0
- package/tests/git-invocation-prefixes-all-guards.test.sh +114 -0
- package/tests/git-maintenance-guard.test.sh +83 -0
- package/tests/git-pack-temp-cleanup-guard.test.sh +133 -0
- package/tests/git-rm-orphan-wipe-guard.test.sh +66 -0
- package/tests/git-submodule-guard.test.sh +50 -0
- package/tests/grep-pcre-portability.test.sh +155 -0
- package/tests/hook-registration-matches-input.test.sh +73 -0
- package/tests/hook-trigger-matches-envelope.test.sh +178 -0
- package/tests/install-does-not-claim-protection.test.sh +110 -0
- package/tests/install-example-standalone-tools.test.sh +139 -0
- package/tests/line-continuation-bypass.test.sh +114 -0
- package/tests/mcp-config-poisoning-audit.test.sh +106 -0
- package/tests/nested-background-agent-guard.test.sh +58 -0
- package/tests/no-unqualified-safety-claims.test.sh +114 -0
- package/tests/option-eating-grep-patterns.test.sh +130 -0
- package/tests/outdated-core-guards.test.sh +134 -0
- package/tests/outdated-report.test.sh +155 -0
- package/tests/output-secret-mask-warns.test.sh +73 -0
- package/tests/plugin-hooks-fail-open-under-sh.test.sh +165 -0
- package/tests/plugins-word-order.test.sh +126 -0
- package/tests/powershell-remove-item-guard.test.sh +85 -0
- package/tests/project-dir-naming.test.sh +103 -0
- package/tests/quoted-safe-targets-and-mentions.test.sh +190 -0
- package/tests/reroute-after-block-guard.test.sh +104 -0
- package/tests/secret-guard-documented-promises.test.sh +97 -0
- package/tests/session-plugin-pin-watch.test.sh +45 -0
- package/tests/settings-unreadable-refuses-to-write.test.sh +95 -0
- package/tests/shield-no-silent-adoption.test.py +110 -0
- package/tests/shield-no-silent-adoption.test.sh +46 -0
- package/tests/stop-transcript-write-health.test.sh +46 -0
- package/tests/system-dir-guard-root-erased.test.sh +66 -0
- package/tests/test-account-billing-log.sh +100 -0
- package/tests/test-account-routing-preflight.sh +77 -0
- package/tests/test-agent-sdk-credit-pool-monitor.sh +157 -0
- package/tests/test-agent-view-quota-warn.sh +184 -0
- package/tests/test-agents-md-edit-drift-warner.sh +176 -0
- package/tests/test-agents-md-loader.sh +204 -0
- package/tests/test-agents-md-sync-checker.sh +125 -0
- package/tests/test-ai-slop-punctuation-arrest.sh +280 -0
- package/tests/test-allowlist.sh +60 -0
- package/tests/test-always-allow-pattern-suggester.sh +147 -0
- package/tests/test-anthropic-base-url-guard.sh +88 -0
- package/tests/test-articulated-scope-capture.sh +139 -0
- package/tests/test-attachment-traversal-guard.sh +168 -0
- package/tests/test-aup-block-pattern-logger.sh +315 -0
- package/tests/test-aup-false-positive-helper.sh +188 -0
- package/tests/test-aup-large-tool-output-warner.sh +370 -0
- package/tests/test-aup-retry-loop-guard.sh +341 -0
- package/tests/test-auth-expiry-reminder.sh +303 -0
- package/tests/test-auth-macos-sleep-detector.sh +254 -0
- package/tests/test-auth-path-detector.sh +232 -0
- package/tests/test-auth-status-checker.sh +233 -0
- package/tests/test-authorized-reconfirmation-detector.sh +280 -0
- package/tests/test-background-cost-launch-guard.sh +62 -0
- package/tests/test-bash-allowlist-secondary-check.sh +143 -0
- package/tests/test-bash-fanout-bounded-rewriter.sh +186 -0
- package/tests/test-bash-project-fence.sh +127 -0
- package/tests/test-bg-permission-prompt-warner.sh +221 -0
- package/tests/test-binary-read-detector.sh +173 -0
- package/tests/test-broad-prefix-session-trap-warner.sh +167 -0
- package/tests/test-bulk-delete-target-resolution.sh +49 -0
- package/tests/test-bypass-mode-effective-verifier.sh +179 -0
- package/tests/test-cache-creation-drift-detector.sh +244 -0
- package/tests/test-cache-residue-detector.sh +429 -0
- package/tests/test-cache-tier-logger.sh +59 -0
- package/tests/test-cache-ttl-eviction-detector.sh +282 -0
- package/tests/test-cch-sentinel-precommit-guard.sh +64 -0
- package/tests/test-claim-verify-detector.sh +222 -0
- package/tests/test-claim-vs-caveat-checker.sh +134 -0
- package/tests/test-claude-code-version-pin-advisor.sh +353 -0
- package/tests/test-claude-md-reinjector.sh +173 -0
- package/tests/test-claude-md-size-monitor.sh +107 -0
- package/tests/test-claude-update-budget-guard.sh +132 -0
- package/tests/test-claude-update-smart.sh +91 -0
- package/tests/test-claudemd-tool-prohibition.sh +239 -0
- package/tests/test-cli-config-pinning-detector.sh +233 -0
- package/tests/test-cliff-countdown-advisor.sh +138 -0
- package/tests/test-closure-word-verify-gate.sh +158 -0
- package/tests/test-commit-all-scope-guard.sh +73 -0
- package/tests/test-commitment-carry-forward-arrest.sh +250 -0
- package/tests/test-compact-dispatch-watchdog.sh +147 -0
- package/tests/test-completion-claim-without-verification-detector.sh +326 -0
- package/tests/test-compound-bash-permission-resolver.sh +264 -0
- package/tests/test-compound-command-deny-enforcer.sh +67 -0
- package/tests/test-context-length-budget.sh +68 -0
- package/tests/test-context-usage-drift-alert.sh +52 -22
- package/tests/test-cost-incident-self-audit.sh +94 -0
- package/tests/test-cowork-claude-md-load-checker.sh +257 -0
- package/tests/test-cowork-claudemd-helper.sh +141 -0
- package/tests/test-cowork-fuse-staleness-watcher.sh +287 -0
- package/tests/test-cowork-hook-absence-warner.sh +230 -0
- package/tests/test-cowork-model-picker-advisor.sh +317 -0
- package/tests/test-credential-exfil-guard.sh +62 -0
- package/tests/test-cron-create-receipt.sh +165 -0
- package/tests/test-cross-product-mcp-spawn-detector.sh +112 -0
- package/tests/test-daemon-zombie-worker-surfacer.sh +71 -0
- package/tests/test-daily-cost-guard.sh +131 -0
- package/tests/test-deny-rule-integrity-verifier.sh +288 -0
- package/tests/test-deployment-readback-gate.sh +92 -0
- package/tests/test-deployment-readback-gh-adapter.sh +163 -0
- package/tests/test-disabled-feature-toggle-advisor.sh +78 -0
- package/tests/test-dispatch-allowlist-preflight.sh +385 -0
- package/tests/test-dispatch-liveness-watchdog.sh +319 -0
- package/tests/test-dispatch-receipt.sh +314 -0
- package/tests/test-dotenv-anthropic-key-billing-guard.sh +160 -0
- package/tests/test-echo-probe-spam-detector.sh +143 -0
- package/tests/test-edit-quote-ambiguity-guard.sh +75 -0
- package/tests/test-ephemeral-container-detector.sh +251 -0
- package/tests/test-evidence-claim-gate.sh +291 -0
- package/tests/test-extended-thinking-loop-guard.sh +289 -0
- package/tests/test-extended-thinking-resume-warning.sh +240 -0
- package/tests/test-extended-thinking-tool-use-mismatch-detector.sh +236 -0
- package/tests/test-fabricated-command-detector.sh +296 -0
- package/tests/test-false-disk-full-guard.sh +36 -0
- package/tests/test-feature-deprecation-detector.sh +117 -0
- package/tests/test-forbidden-response-phrase-detector.sh +246 -0
- package/tests/test-git-operations-require-approval.sh +53 -0
- package/tests/test-git-push-blast-radius-guard.sh +115 -0
- package/tests/test-goal-iteration-limit-warner.sh +128 -0
- package/tests/test-growthbook-flag-monitor.sh +428 -0
- package/tests/test-halt-signal-detector.sh +120 -0
- package/tests/test-hook-self-disable-detector.sh +232 -0
- package/tests/test-iteration-quality-degradation-detector.sh +244 -0
- package/tests/test-long-session-malformed-tool-call-detector.sh +185 -0
- package/tests/test-marketplace-plugins.sh +193 -0
- package/tests/test-mcp-misdiagnosis-arrest.sh +235 -0
- package/tests/test-mcp-orphan-leak-warner.sh +71 -0
- package/tests/test-mcp-permissions-ask-warner.sh +207 -0
- package/tests/test-mcp-routine-approval-detector.sh +229 -0
- package/tests/test-mcp-startup-bloat-detector.sh +141 -0
- package/tests/test-mcp-stdio-compatibility-test.sh +112 -0
- package/tests/test-memory-chain-audit.sh +59 -0
- package/tests/test-memory-orphan-detector.sh +227 -0
- package/tests/test-model-swap-suggester.sh +368 -0
- package/tests/test-model-version-lock.sh +83 -0
- package/tests/test-multi-file-plan-routing-gate.sh +277 -0
- package/tests/test-multi-window-auth-drift-detector.sh +262 -0
- package/tests/test-nested-spawn-inflight-guard.sh +281 -0
- package/tests/test-no-force-flag.sh +49 -0
- package/tests/test-non-english-quality-warner.sh +229 -0
- package/tests/test-oauth-refresh-monitor.sh +311 -0
- package/tests/test-opus-degradation-tracker.sh +274 -0
- package/tests/test-opus48-routine-task-warning.sh +201 -0
- package/tests/test-opus48-thinking-wedge-advisor.sh +249 -0
- package/tests/test-output-token-spike-detector.sh +315 -0
- package/tests/test-parallel-batch-size-limiter.sh +228 -0
- package/tests/test-parallel-cascade-detector.sh +191 -0
- package/tests/test-partial-view-claim-arrest.sh +272 -0
- package/tests/test-per-prompt-token-cap.sh +136 -0
- package/tests/test-persisted-1m-model-advisor.sh +71 -0
- package/tests/test-plugin-hooks-json-bloat-detector.sh +267 -0
- package/tests/test-post-edit-disk-verify.sh +294 -0
- package/tests/test-pre-bash-sed-line-ending-windows.sh +108 -0
- package/tests/test-pre-execution-claim-detector.sh +366 -0
- package/tests/test-private-key-backup-and-git-credentials.sh +100 -0
- package/tests/test-proxy-capture-suggester.sh +214 -0
- package/tests/test-public-artefact-socratic-narrowing.sh +346 -0
- package/tests/test-quota-anomaly-detector.sh +321 -0
- package/tests/test-quota-reset-audit.sh +81 -0
- package/tests/test-read-loop-detector.sh +137 -0
- package/tests/test-read-once-guard.sh +85 -0
- package/tests/test-receipts-aggregate.sh +143 -0
- package/tests/test-redirect-fragment-warner.sh +130 -0
- package/tests/test-redundant-read-blocker.sh +155 -0
- package/tests/test-refusal-arrest-gate.sh +303 -0
- package/tests/test-remote-control-billing-classifier.sh +125 -0
- package/tests/test-resume-drift-watcher.sh +65 -0
- package/tests/test-rg-replace-flag-detector.sh +175 -0
- package/tests/test-rhetorical-verification-prompt-detector.sh +237 -0
- package/tests/test-rm-safety-net.sh +115 -0
- package/tests/test-route-handler-emptiness-gate.sh +300 -0
- package/tests/test-runtime-binary-change-detector.sh +196 -0
- package/tests/test-same-command-repeat-detector.sh +165 -0
- package/tests/test-same-correction-arrest.sh +165 -0
- package/tests/test-scope-expansion-receipt.sh +207 -0
- package/tests/test-server-side-prompt-injection-detector.sh +181 -0
- package/tests/test-session-persistence-verifier.sh +128 -0
- package/tests/test-session-rate-monitor.sh +284 -0
- package/tests/test-session-start-quota-status.sh +210 -0
- package/tests/test-session-start-safety-check.sh +138 -0
- package/tests/test-settings-hooks-key-restorer.sh +257 -0
- package/tests/test-settings-json-health-check.sh +70 -0
- package/tests/test-settings-regression-tester.sh +197 -0
- package/tests/test-skill-cumulative-size-detector.sh +198 -0
- package/tests/test-skill-description-drop-detector.sh +236 -0
- package/tests/test-skill-truncation-detector.sh +263 -0
- package/tests/test-skills-context-recorder.sh +329 -0
- package/tests/test-skills-load-verifier.sh +184 -0
- package/tests/test-skills-settings-validator.sh +242 -0
- package/tests/test-sonnet-45-deprecation-helper.sh +150 -0
- package/tests/test-spurious-malformed-notice-detector.sh +290 -0
- package/tests/test-sql-bulk-delete-warn.sh +123 -0
- package/tests/test-ssh-key-protect.sh +81 -0
- package/tests/test-stale-temp-settings-detector.sh +161 -0
- package/tests/test-standing-rule-session-surfacer.sh +215 -0
- package/tests/test-starter-hooks-manifest.sh +96 -0
- package/tests/test-stop-hook-sigterm-wrapper.sh +258 -0
- package/tests/test-strict-allowlist.sh +72 -0
- package/tests/test-subagent-boundary-precheck.sh +137 -0
- package/tests/test-subagent-closure-verify-gate.sh +193 -0
- package/tests/test-subagent-destructive-git-guard.sh +86 -0
- package/tests/test-subagent-identity-leak-guard.sh +62 -0
- package/tests/test-subagent-identity-reassertion.sh +61 -0
- package/tests/test-subagent-inheritance-tester.sh +319 -0
- package/tests/test-subagent-permission-mode-guard.sh +61 -0
- package/tests/test-subagent-spawn-verification-enforcer.sh +60 -0
- package/tests/test-subagent-tool-allowlist-enforcer.sh +62 -0
- package/tests/test-subagent-tool-call-limiter.sh +97 -0
- package/tests/test-subscription-api-billing-warner.sh +138 -0
- package/tests/test-subscription-bypass-detector.sh +255 -0
- package/tests/test-temporal-suggestion-detector.sh +183 -0
- package/tests/test-thinking-budget-effort-mismatch-detector.sh +327 -0
- package/tests/test-tokenizer-ratio-alert-corpus.sh +77 -0
- package/tests/test-tokenizer-ratio-alert.sh +93 -0
- package/tests/test-tool-result-correlation-checker.sh +264 -0
- package/tests/test-tool-result-size-guard.sh +121 -0
- package/tests/test-transcript-contamination-detector.sh +264 -0
- package/tests/test-trigger-header-parsing.sh +151 -0
- package/tests/test-ultrareview-large-diff-advisor.sh +192 -0
- package/tests/test-userprompt-submit-receipt.sh +181 -0
- package/tests/test-verify-after-publish-reminder.sh +184 -0
- package/tests/test-version-bump-detector.sh +212 -0
- package/tests/test-version-regression-warner.sh +165 -0
- package/tests/test-warn-cron-cost-trap.sh +82 -0
- package/tests/test-webfetch-runaway-guard.sh +77 -0
- package/tests/test-wellness-break-reminder.sh +138 -0
- package/tests/test-windows-destructive-command-guard.sh +169 -0
- package/tests/test-windows-python-stub-detector.sh +146 -0
- package/tests/test-worktree-edit-boundary-guard.sh +219 -0
- package/tests/test-write-byte-integrity-verifier.sh +192 -0
- package/tests/test-xml-format-leak-detector.sh +299 -0
- package/tests/trustfall-mcp-injection-guard.test.sh +183 -0
- package/tests/workspace-lease-guard.test.sh +144 -0
- package/tests/worktree-escape-write-guard.test.sh +68 -0
- package/tests/worktree-hooks-path-fix.test.sh +181 -0
- package/tests/worktree-parent-write-guard.test.sh +51 -0
- package/tests/write-empty-content-guard.test.sh +39 -0
- package/tests/write-nul-corruption-detector.test.sh +29 -0
- package/tests/write-overwrite-unread-content.test.sh +178 -0
- package/tests/wsl-host-disk-space-guard.test.sh +55 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# pre-execution-claim-detector.sh — Surface the Cluster 22 candidate (Opus 4.8
|
|
3
|
+
# pre-execution tool-output fabrication, Axis 22A) at PreToolUse, by scanning
|
|
4
|
+
# the last assistant text block for specific-value claim signatures that
|
|
5
|
+
# precede the tool call about to fire.
|
|
6
|
+
#
|
|
7
|
+
# Why: Cluster 22 candidate Axis 22A (sequential pre-execution claim) documents
|
|
8
|
+
# that Opus 4.8 emits result-specific values (prices, URLs, file contents,
|
|
9
|
+
# command outputs, exit codes) BEFORE the tool calls that would produce
|
|
10
|
+
# those values have returned. Issue #64065 anchor: model asserted specific
|
|
11
|
+
# flight prices ($891pp / $1,782/2) before web/flight-search calls
|
|
12
|
+
# returned; real prices were ~$645pp. Self-diagnosed the pattern in-context,
|
|
13
|
+
# explicitly committed not to repeat it, then repeated it on the next turn
|
|
14
|
+
# — the self-recognition-without-prevention mechanic that lives below the
|
|
15
|
+
# prompt layer.
|
|
16
|
+
#
|
|
17
|
+
# Six independent filings 2026-05-30 → 2026-05-31, all on claude-opus-4-8:
|
|
18
|
+
# #64048 (confabulated URGENT-AGENT-DIRECTIVE / AUTOGEN-DECOY markers)
|
|
19
|
+
# #64055 (Opus 4.8 modified files the user did not ask to modify)
|
|
20
|
+
# #64065 (flight prices anchor, self-recognition-without-prevention)
|
|
21
|
+
# #64076 ("lying and fabricating a lot of things without doing actual work")
|
|
22
|
+
# #64095 (envelope leak, immutable git log returned different SHAs)
|
|
23
|
+
# #64103 ("telling me it did things and were successful but it wasn't")
|
|
24
|
+
#
|
|
25
|
+
# This hook complements tool-result-correlation-checker.sh (which catches
|
|
26
|
+
# Axis 22B parallel-batch fabrication compounding via tool_use_id ↔
|
|
27
|
+
# tool_result pairing mismatches). Together they cover both axes.
|
|
28
|
+
#
|
|
29
|
+
# Detection rule: 5 claim-pattern regexes applied to the last assistant text
|
|
30
|
+
# block in the transcript. The patterns are conservative; they match phrases
|
|
31
|
+
# that are highly correlated with pre-execution claim signatures but rare in
|
|
32
|
+
# normal assistant output:
|
|
33
|
+
#
|
|
34
|
+
# 1. "the (file|output|result|command|response) (was|is|shows|contains|returned):"
|
|
35
|
+
# followed by quoted content within 200 chars
|
|
36
|
+
# 2. "I (confirmed|verified|checked|ran|executed) [^.]+ and [^.]+"
|
|
37
|
+
# with specific-value language (numbers with units, prices, URLs)
|
|
38
|
+
# 3. specific dollar amounts ($XXX or $X,XXX patterns) appearing without a
|
|
39
|
+
# preceding "I'll check" / "let me search" hedge
|
|
40
|
+
# 4. SHA-like patterns (40-char hex) appearing without a preceding
|
|
41
|
+
# "git log will show" / "let me run" hedge
|
|
42
|
+
# 5. specific file paths quoted with content immediately following:
|
|
43
|
+
# `/path/to/file.ext` followed by `\n```` (claim-then-code-block pattern)
|
|
44
|
+
#
|
|
45
|
+
# Event: PreToolUse MATCHER: "Bash" (only Bash, where the highest-volume
|
|
46
|
+
# claim-verifiable tools live)
|
|
47
|
+
# Action: Read transcript_path from the PreToolUse payload, scan the last
|
|
48
|
+
# assistant text block for claim signatures. Emit stderr advisory if
|
|
49
|
+
# matched. Advisory only (exit 0); never blocks.
|
|
50
|
+
#
|
|
51
|
+
# Opt-in: CC_OPUS48_PRE_CLAIM_DETECT=1 to enable. Silent by default so
|
|
52
|
+
# operators on Opus 4.6/4.7 (where the cluster does not surface) see no noise.
|
|
53
|
+
#
|
|
54
|
+
# Configuration:
|
|
55
|
+
# CC_OPUS48_PRE_CLAIM_DETECT Set to "1" to enable
|
|
56
|
+
# CC_OPUS48_PRE_CLAIM_DISABLE Hard disable (overrides DETECT)
|
|
57
|
+
# CC_OPUS48_PRE_CLAIM_QUIET Silent (overrides DETECT)
|
|
58
|
+
# CC_OPUS48_PRE_CLAIM_LOG Log path (default ~/.cache/cc-safe-setup/pre-claim.jsonl)
|
|
59
|
+
# CC_OPUS48_PRE_CLAIM_SCAN_LINES Last N transcript lines to inspect (default 20)
|
|
60
|
+
|
|
61
|
+
set -u
|
|
62
|
+
|
|
63
|
+
if [ "${CC_OPUS48_PRE_CLAIM_DISABLE:-0}" = "1" ]; then
|
|
64
|
+
exit 0
|
|
65
|
+
fi
|
|
66
|
+
if [ "${CC_OPUS48_PRE_CLAIM_QUIET:-0}" = "1" ]; then
|
|
67
|
+
exit 0
|
|
68
|
+
fi
|
|
69
|
+
if [ "${CC_OPUS48_PRE_CLAIM_DETECT:-0}" != "1" ]; then
|
|
70
|
+
exit 0
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
SCAN_LINES="${CC_OPUS48_PRE_CLAIM_SCAN_LINES:-20}"
|
|
74
|
+
LOG="${CC_OPUS48_PRE_CLAIM_LOG:-${HOME}/.cache/cc-safe-setup/pre-claim.jsonl}"
|
|
75
|
+
|
|
76
|
+
case "$SCAN_LINES" in
|
|
77
|
+
''|*[!0-9]*) SCAN_LINES=20 ;;
|
|
78
|
+
esac
|
|
79
|
+
|
|
80
|
+
INPUT=$(cat)
|
|
81
|
+
|
|
82
|
+
TRANSCRIPT=$(printf '%s' "$INPUT" | jq -r '.transcript_path // empty' 2>/dev/null)
|
|
83
|
+
if [ -z "$TRANSCRIPT" ] || [ ! -r "$TRANSCRIPT" ]; then
|
|
84
|
+
exit 0
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
# Extract the last assistant text block from the transcript.
|
|
88
|
+
# Assistant messages have type=assistant; text content lives at
|
|
89
|
+
# .message.content[].text in the JSONL representation.
|
|
90
|
+
LAST_ASSISTANT_TEXT=$(tac "$TRANSCRIPT" 2>/dev/null | head -n "$SCAN_LINES" | \
|
|
91
|
+
jq -rR 'fromjson? | select(.type == "assistant") | .message.content[]? | select(.type == "text") | .text' 2>/dev/null | \
|
|
92
|
+
head -c 4000)
|
|
93
|
+
|
|
94
|
+
if [ -z "$LAST_ASSISTANT_TEXT" ]; then
|
|
95
|
+
exit 0
|
|
96
|
+
fi
|
|
97
|
+
|
|
98
|
+
# Get the model from the same transcript region for context in the advisory.
|
|
99
|
+
MODEL=$(tac "$TRANSCRIPT" 2>/dev/null | head -n "$SCAN_LINES" | \
|
|
100
|
+
jq -rR 'fromjson? | select(.type == "assistant") | .message.model // empty' 2>/dev/null | head -1)
|
|
101
|
+
MODEL="${MODEL:-unknown}"
|
|
102
|
+
|
|
103
|
+
MATCHED_PATTERN=""
|
|
104
|
+
|
|
105
|
+
# Pattern 1: "the (file|output|result|command|response) (was|is|shows|contains|returned):"
|
|
106
|
+
if printf '%s' "$LAST_ASSISTANT_TEXT" | grep -qiE 'the (file|output|result|command|response) (was|is|shows|contains|returned):'; then
|
|
107
|
+
MATCHED_PATTERN="claim-prefix"
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# Pattern 2: "I (confirmed|verified|checked|ran|executed) ... and ..."
|
|
111
|
+
if [ -z "$MATCHED_PATTERN" ] && \
|
|
112
|
+
printf '%s' "$LAST_ASSISTANT_TEXT" | grep -qiE 'I (confirmed|verified|checked|ran|executed) [^.]+ and [^.]+'; then
|
|
113
|
+
MATCHED_PATTERN="action-then-value"
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
# Pattern 3: dollar amount without a hedging phrase preceding it.
|
|
117
|
+
# Hedge phrases: "let me check", "I'll search", "checking", "looking up", "verify"
|
|
118
|
+
if [ -z "$MATCHED_PATTERN" ]; then
|
|
119
|
+
if printf '%s' "$LAST_ASSISTANT_TEXT" | grep -qE '\$[0-9]+(,[0-9]{3})*(\.[0-9]+)?'; then
|
|
120
|
+
if ! printf '%s' "$LAST_ASSISTANT_TEXT" | grep -qiE '(let me check|let me search|let me look|i.?ll check|i.?ll search|checking|looking up|verify|searching)'; then
|
|
121
|
+
MATCHED_PATTERN="bare-price-claim"
|
|
122
|
+
fi
|
|
123
|
+
fi
|
|
124
|
+
fi
|
|
125
|
+
|
|
126
|
+
# Pattern 4: 40-char hex SHA-like pattern without a hedging phrase.
|
|
127
|
+
if [ -z "$MATCHED_PATTERN" ]; then
|
|
128
|
+
if printf '%s' "$LAST_ASSISTANT_TEXT" | grep -qE '\b[a-f0-9]{40}\b'; then
|
|
129
|
+
if ! printf '%s' "$LAST_ASSISTANT_TEXT" | grep -qiE '(let me run|let me check|i.?ll run|git log will show|running git)'; then
|
|
130
|
+
MATCHED_PATTERN="bare-sha-claim"
|
|
131
|
+
fi
|
|
132
|
+
fi
|
|
133
|
+
fi
|
|
134
|
+
|
|
135
|
+
# Pattern 5: backtick-quoted file path on one line + triple-backtick code-block
|
|
136
|
+
# start within the same text block. Two-grep heuristic because grep -E does not
|
|
137
|
+
# cross newlines portably; the conjunction captures the "the file `/path/x`
|
|
138
|
+
# contains:\n```" claim pattern. Drops the noise of files-mentioned-without-
|
|
139
|
+
# inline-content (e.g. when the assistant just lists paths in prose).
|
|
140
|
+
if [ -z "$MATCHED_PATTERN" ]; then
|
|
141
|
+
if printf '%s' "$LAST_ASSISTANT_TEXT" | grep -qE '`[/.][^`]+`[^.]*:[[:space:]]*$' && \
|
|
142
|
+
printf '%s' "$LAST_ASSISTANT_TEXT" | grep -qE '^```'; then
|
|
143
|
+
MATCHED_PATTERN="file-path-then-block"
|
|
144
|
+
fi
|
|
145
|
+
fi
|
|
146
|
+
|
|
147
|
+
if [ -z "$MATCHED_PATTERN" ]; then
|
|
148
|
+
exit 0
|
|
149
|
+
fi
|
|
150
|
+
|
|
151
|
+
SESSION_ID=$(printf '%s' "$INPUT" | jq -r '.session_id // "unknown"' 2>/dev/null)
|
|
152
|
+
TOOL=$(printf '%s' "$INPUT" | jq -r '.tool_name // "unknown"' 2>/dev/null)
|
|
153
|
+
TS=$(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
154
|
+
|
|
155
|
+
mkdir -p "$(dirname "$LOG")" 2>/dev/null
|
|
156
|
+
printf '{"ts":"%s","session":"%s","model":"%s","tool":"%s","pattern":"%s"}\n' \
|
|
157
|
+
"$TS" "$SESSION_ID" "$MODEL" "$TOOL" "$MATCHED_PATTERN" >> "$LOG"
|
|
158
|
+
|
|
159
|
+
cat >&2 <<EOF
|
|
160
|
+
NOTICE: pre-execution claim signature detected before this ${TOOL} call.
|
|
161
|
+
Pattern: ${MATCHED_PATTERN}. Model: ${MODEL}.
|
|
162
|
+
The last assistant text block contained a value-specific assertion of
|
|
163
|
+
the type associated with Cluster 22 candidate (Opus 4.8 pre-execution
|
|
164
|
+
tool-output fabrication). The model may be reasoning from invented
|
|
165
|
+
values before this tool actually runs.
|
|
166
|
+
Verification step: after this tool returns, compare the tool's actual
|
|
167
|
+
output against the value the assistant asserted in the preceding text.
|
|
168
|
+
If they diverge, this is a Cluster 22 Axis 22A confirmation — switch
|
|
169
|
+
to Opus 4.7 via '/model claude-opus-4-7' (#64065 reporter's comparison
|
|
170
|
+
shows Opus 4.7 in the same conditions does not surface the surge).
|
|
171
|
+
Companion hook: tool-result-correlation-checker.sh (PostToolUse,
|
|
172
|
+
catches Axis 22B parallel-batch fabrication compounding via tool_use_id
|
|
173
|
+
misattribution).
|
|
174
|
+
References: #64048 / #64055 / #64065 (anchor) / #64076 / #64095 / #64103
|
|
175
|
+
Log: ${LOG}
|
|
176
|
+
Suppress: export CC_OPUS48_PRE_CLAIM_QUIET=1
|
|
177
|
+
EOF
|
|
178
|
+
|
|
179
|
+
exit 0
|
|
@@ -7,7 +7,16 @@
|
|
|
7
7
|
# than bash equivalents. But Claude often reaches for sed, grep, cat instead.
|
|
8
8
|
# This hook denies those commands with a pointer to the correct built-in tool.
|
|
9
9
|
#
|
|
10
|
-
# TRIGGER:
|
|
10
|
+
# TRIGGER: PreToolUse MATCHER: "Bash"
|
|
11
|
+
#
|
|
12
|
+
# 2026-09-03 の訂正。ここは以前 `TRIGGER: PermissionRequest MATCHER: ""` だった。
|
|
13
|
+
# インストーラはこの行を読んで登録先を決めるので、出荷時のこのフックは
|
|
14
|
+
# PermissionRequest へ登録されていた。そして本体が出す hookEventName は
|
|
15
|
+
# 最初から "PreToolUse" で、宣言と中身が食い違っていた。
|
|
16
|
+
# 隔離した HOME で測ると、出荷時の登録では `cat ./probe.txt` に対して
|
|
17
|
+
# **一度も呼ばれなかった**(3条件・計器つきで0回)。登録先だけを
|
|
18
|
+
# PreToolUse / matcher "Bash" へ変えると、同じ命令で1回呼ばれ、拒否も記録された。
|
|
19
|
+
# 計器そのものは手で入力を流して発火することを先に確かめてある。
|
|
11
20
|
|
|
12
21
|
INPUT=$(cat)
|
|
13
22
|
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty' 2>/dev/null)
|
package/examples/prefer-const.sh
CHANGED
|
File without changes
|
|
@@ -22,6 +22,18 @@
|
|
|
22
22
|
# }
|
|
23
23
|
# }
|
|
24
24
|
|
|
25
|
+
# Without jq, the parse below silently yields empty and this hook stops
|
|
26
|
+
# guarding - with no error anywhere. Say so. We deliberately do not exit
|
|
27
|
+
# here: blocking would halt every tool call, and exiting 0 would change
|
|
28
|
+
# the behaviour of guards that do not depend on the parsed value.
|
|
29
|
+
if ! command -v jq >/dev/null 2>&1; then
|
|
30
|
+
_nojq_warned="/tmp/cc-nojq-warned-prefer-dedicated-tools-$PPID"
|
|
31
|
+
[ -f "$_nojq_warned" ] || {
|
|
32
|
+
echo "WARNING [prefer-dedicated-tools]: jq not found - this hook cannot inspect tool calls and is NOT protecting you. Install jq." >&2
|
|
33
|
+
: > "$_nojq_warned"
|
|
34
|
+
}
|
|
35
|
+
fi
|
|
36
|
+
|
|
25
37
|
INPUT=$(cat)
|
|
26
38
|
CMD=$(echo "$INPUT" | jq -r '.tool_input.command // empty' 2>/dev/null)
|
|
27
39
|
[ -z "$CMD" ] && exit 0
|
|
File without changes
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
# ================================================================
|
|
3
3
|
# prisma-migrate-guard.sh — Block destructive Prisma operations
|
|
4
4
|
#
|
|
5
|
-
# Blocks: prisma migrate reset, prisma db push --force-reset
|
|
6
|
-
#
|
|
5
|
+
# Blocks: prisma migrate reset, prisma db push --force-reset,
|
|
6
|
+
# prisma db push --accept-data-loss
|
|
7
|
+
# Allows: prisma migrate dev, prisma generate, prisma db push (plain)
|
|
7
8
|
#
|
|
8
9
|
# Usage: Add to settings.json as a PreToolUse hook
|
|
9
10
|
#
|
|
@@ -19,23 +20,39 @@
|
|
|
19
20
|
#
|
|
20
21
|
# TRIGGER: PreToolUse MATCHER: "Bash"
|
|
21
22
|
|
|
23
|
+
# Without jq, the parse below silently yields empty and this hook stops
|
|
24
|
+
# guarding - with no error anywhere. Say so. We deliberately do not exit
|
|
25
|
+
# here: blocking would halt every tool call, and exiting 0 would change
|
|
26
|
+
# the behaviour of guards that do not depend on the parsed value.
|
|
27
|
+
if ! command -v jq >/dev/null 2>&1; then
|
|
28
|
+
_nojq_warned="/tmp/cc-nojq-warned-prisma-migrate-guard-$PPID"
|
|
29
|
+
[ -f "$_nojq_warned" ] || {
|
|
30
|
+
echo "WARNING [prisma-migrate-guard]: jq not found - this hook cannot inspect tool calls and is NOT protecting you. Install jq." >&2
|
|
31
|
+
: > "$_nojq_warned"
|
|
32
|
+
}
|
|
33
|
+
fi
|
|
34
|
+
|
|
22
35
|
INPUT=$(cat)
|
|
23
36
|
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty' 2>/dev/null)
|
|
24
37
|
|
|
25
38
|
[[ -z "$COMMAND" ]] && exit 0
|
|
26
39
|
|
|
27
|
-
# Block destructive Prisma commands
|
|
28
|
-
|
|
40
|
+
# Block destructive Prisma commands. --force-reset drops and recreates the
|
|
41
|
+
# whole database; --accept-data-loss applies data-destroying schema changes
|
|
42
|
+
# without the interactive confirmation — the exact flag that wiped a production
|
|
43
|
+
# DB in anthropics/claude-code#14411. Both can sit anywhere after `db push`
|
|
44
|
+
# (e.g. after a --schema flag), so match across the rest of the command.
|
|
45
|
+
if echo "$COMMAND" | grep -qE 'prisma\s+(migrate\s+reset|db\s+push\b.*(--force-reset|--accept-data-loss))'; then
|
|
29
46
|
echo "BLOCKED: Destructive Prisma command." >&2
|
|
30
47
|
echo "Command: $COMMAND" >&2
|
|
31
48
|
echo "" >&2
|
|
32
|
-
echo "migrate reset / force-reset destroy
|
|
49
|
+
echo "migrate reset / --force-reset / --accept-data-loss destroy data." >&2
|
|
33
50
|
echo "Use: prisma migrate dev (incremental migration)" >&2
|
|
34
51
|
exit 2
|
|
35
52
|
fi
|
|
36
53
|
|
|
37
|
-
# Warn on prisma db push (schema push without migration history)
|
|
38
|
-
if echo "$COMMAND" | grep -qE 'prisma\s+db\s+push\b' && ! echo "$COMMAND" | grep -
|
|
54
|
+
# Warn on plain prisma db push (schema push without migration history)
|
|
55
|
+
if echo "$COMMAND" | grep -qE 'prisma\s+db\s+push\b' && ! echo "$COMMAND" | grep -qE '\-\-(force-reset|accept-data-loss)'; then
|
|
39
56
|
echo "WARNING: prisma db push skips migration history." >&2
|
|
40
57
|
echo "Consider: prisma migrate dev for tracked migrations." >&2
|
|
41
58
|
fi
|
|
@@ -20,6 +20,18 @@
|
|
|
20
20
|
#
|
|
21
21
|
# TRIGGER: PreToolUse MATCHER: "Bash"
|
|
22
22
|
|
|
23
|
+
# Without jq, the parse below silently yields empty and this hook stops
|
|
24
|
+
# guarding - with no error anywhere. Say so. We deliberately do not exit
|
|
25
|
+
# here: blocking would halt every tool call, and exiting 0 would change
|
|
26
|
+
# the behaviour of guards that do not depend on the parsed value.
|
|
27
|
+
if ! command -v jq >/dev/null 2>&1; then
|
|
28
|
+
_nojq_warned="/tmp/cc-nojq-warned-production-port-kill-guard-$PPID"
|
|
29
|
+
[ -f "$_nojq_warned" ] || {
|
|
30
|
+
echo "WARNING [production-port-kill-guard]: jq not found - this hook cannot inspect tool calls and is NOT protecting you. Install jq." >&2
|
|
31
|
+
: > "$_nojq_warned"
|
|
32
|
+
}
|
|
33
|
+
fi
|
|
34
|
+
|
|
23
35
|
INPUT=$(cat)
|
|
24
36
|
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty' 2>/dev/null)
|
|
25
37
|
|
|
@@ -39,7 +39,8 @@ if echo "$OUTPUT" | grep -qiE '(new|updated|override)\s+system\s+prompt'; then
|
|
|
39
39
|
fi
|
|
40
40
|
|
|
41
41
|
# Hidden instructions in HTML comments or zero-width chars
|
|
42
|
-
|
|
42
|
+
# -P は GNU 拡張。BSD grep では警告が黙って消える。(?:…) を () にすれば -E で足りる。
|
|
43
|
+
if echo "$OUTPUT" | grep -qE '<!--.*(execute|run|delete|remove).*-->'; then
|
|
43
44
|
echo "WARNING: Possible prompt injection in HTML comment" >&2
|
|
44
45
|
SUSPICIOUS=1
|
|
45
46
|
fi
|
|
File without changes
|
|
@@ -11,6 +11,18 @@
|
|
|
11
11
|
# MATCHER: "Edit|Write"
|
|
12
12
|
# ================================================================
|
|
13
13
|
|
|
14
|
+
# Without jq, the parse below silently yields empty and this hook stops
|
|
15
|
+
# guarding - with no error anywhere. Say so. We deliberately do not exit
|
|
16
|
+
# here: blocking would halt every tool call, and exiting 0 would change
|
|
17
|
+
# the behaviour of guards that do not depend on the parsed value.
|
|
18
|
+
if ! command -v jq >/dev/null 2>&1; then
|
|
19
|
+
_nojq_warned="/tmp/cc-nojq-warned-protect-claudemd-$PPID"
|
|
20
|
+
[ -f "$_nojq_warned" ] || {
|
|
21
|
+
echo "WARNING [protect-claudemd]: jq not found - this hook cannot inspect tool calls and is NOT protecting you. Install jq." >&2
|
|
22
|
+
: > "$_nojq_warned"
|
|
23
|
+
}
|
|
24
|
+
fi
|
|
25
|
+
|
|
14
26
|
INPUT=$(cat)
|
|
15
27
|
TOOL=$(echo "$INPUT" | jq -r '.tool_name // empty' 2>/dev/null)
|
|
16
28
|
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty' 2>/dev/null)
|
|
@@ -19,6 +19,18 @@
|
|
|
19
19
|
#
|
|
20
20
|
# TRIGGER: PreToolUse MATCHER: "Bash"
|
|
21
21
|
|
|
22
|
+
# Without jq, the parse below silently yields empty and this hook stops
|
|
23
|
+
# guarding - with no error anywhere. Say so. We deliberately do not exit
|
|
24
|
+
# here: blocking would halt every tool call, and exiting 0 would change
|
|
25
|
+
# the behaviour of guards that do not depend on the parsed value.
|
|
26
|
+
if ! command -v jq >/dev/null 2>&1; then
|
|
27
|
+
_nojq_warned="/tmp/cc-nojq-warned-protect-dotfiles-$PPID"
|
|
28
|
+
[ -f "$_nojq_warned" ] || {
|
|
29
|
+
echo "WARNING [protect-dotfiles]: jq not found - this hook cannot inspect tool calls and is NOT protecting you. Install jq." >&2
|
|
30
|
+
: > "$_nojq_warned"
|
|
31
|
+
}
|
|
32
|
+
fi
|
|
33
|
+
|
|
22
34
|
INPUT=$(cat)
|
|
23
35
|
TOOL=$(echo "$INPUT" | jq -r '.tool_name // empty' 2>/dev/null)
|
|
24
36
|
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty' 2>/dev/null)
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# proxy-capture-suggester.sh — Surface HTTPS proxy capture path for compliance-bound operators
|
|
3
|
+
#
|
|
4
|
+
# Background:
|
|
5
|
+
# v2.1.150+ injects server-side strings into the system prompt via two cached channels:
|
|
6
|
+
# the bootstrap API `client_data` field and the GrowthBook `tengu_heron_brook` flag.
|
|
7
|
+
# The opt-out env vars (CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1, DISABLE_GROWTHBOOK=1)
|
|
8
|
+
# close the injection channel going forward, and cache-residue-detector.sh prompts
|
|
9
|
+
# removal of pre-opt-out cached values. Neither produces a reconstructible audit trail
|
|
10
|
+
# of what the agent was instructed at the time of any logged action.
|
|
11
|
+
#
|
|
12
|
+
# For operators in regulated industries (financial services, healthcare, government,
|
|
13
|
+
# defense) the audit trail gap is the structural concern. The opt-outs answer
|
|
14
|
+
# "stop trusting Anthropic with the prompt", but compliance frameworks (SOX, HIPAA,
|
|
15
|
+
# FedRAMP, PCI-DSS, EU AI Act Article 12) also require "produce the exact prompt that
|
|
16
|
+
# was sent for any logged tool execution within the retention window".
|
|
17
|
+
#
|
|
18
|
+
# The only operator-side path to that audit trail is HTTPS proxy capture: an MITM
|
|
19
|
+
# proxy between the Claude Code client and api.anthropic.com that records the full
|
|
20
|
+
# request body of every API call. Anthropic does not provide a first-party audit
|
|
21
|
+
# export; the proxy capture path is the workaround.
|
|
22
|
+
#
|
|
23
|
+
# Reference: https://github.com/anthropics/claude-code/issues/62061 (46+ reactions)
|
|
24
|
+
# https://gist.github.com/yurukusa/03839b3c3f88e1cce38fb0f2c127544d (v2.1.150 audit paths)
|
|
25
|
+
#
|
|
26
|
+
# What this hook does:
|
|
27
|
+
# On SessionStart, when CC_PROXY_CAPTURE_SUGGESTER_ENABLE=1 is set, inspect the
|
|
28
|
+
# environment for an active HTTPS proxy configuration. If none is present, emit a
|
|
29
|
+
# one-time advisory naming three audit-grade proxy tools with concrete invocation,
|
|
30
|
+
# the CA-trust step required for TLS termination, and the env-var bridge that wires
|
|
31
|
+
# Claude Code's API client into the proxy.
|
|
32
|
+
#
|
|
33
|
+
# The hook is opt-in. Most operators do not need an audit trail and would not
|
|
34
|
+
# benefit from running an MITM proxy locally; it adds attack surface, latency, and
|
|
35
|
+
# maintenance overhead. The advisory only fires when an operator has explicitly
|
|
36
|
+
# declared compliance intent via the opt-in env var.
|
|
37
|
+
#
|
|
38
|
+
# When this hook does NOT fire:
|
|
39
|
+
# - CC_PROXY_CAPTURE_SUGGESTER_ENABLE is unset or set to 0 (the default)
|
|
40
|
+
# - CC_PROXY_CAPTURE_SUGGESTER_QUIET=1 (silenced after acknowledgement)
|
|
41
|
+
# - An HTTPS proxy is already active (HTTPS_PROXY / https_proxy / ALL_PROXY contains a value)
|
|
42
|
+
#
|
|
43
|
+
# When this hook DOES fire (default behavior with ENABLE=1):
|
|
44
|
+
# - SessionStart and no HTTPS_PROXY-family env var is set → emit the four-tool advisory
|
|
45
|
+
# - SessionStart and a proxy IS set but ANTHROPIC_LOG_DIR is unset → emit a shorter
|
|
46
|
+
# advisory pointing out that proxy capture is active but no local log sink is configured
|
|
47
|
+
#
|
|
48
|
+
# Hook config (settings.json):
|
|
49
|
+
# {
|
|
50
|
+
# "hooks": {
|
|
51
|
+
# "SessionStart": [{
|
|
52
|
+
# "matcher": "",
|
|
53
|
+
# "hooks": [{ "type": "command", "command": "bash ~/.claude/hooks/proxy-capture-suggester.sh" }]
|
|
54
|
+
# }]
|
|
55
|
+
# }
|
|
56
|
+
# }
|
|
57
|
+
#
|
|
58
|
+
# Env vars:
|
|
59
|
+
# CC_PROXY_CAPTURE_SUGGESTER_ENABLE=1 — opt in to the advisory (default off)
|
|
60
|
+
# CC_PROXY_CAPTURE_SUGGESTER_QUIET=1 — silence permanently after acknowledgement
|
|
61
|
+
#
|
|
62
|
+
# Privacy: the hook reads only the names of standard proxy env vars (HTTPS_PROXY,
|
|
63
|
+
# https_proxy, ALL_PROXY, NO_PROXY, ANTHROPIC_LOG_DIR). It never reads, transmits, or
|
|
64
|
+
# logs the values themselves.
|
|
65
|
+
|
|
66
|
+
set -u
|
|
67
|
+
|
|
68
|
+
# Silenced permanently after acknowledgement
|
|
69
|
+
if [ "${CC_PROXY_CAPTURE_SUGGESTER_QUIET:-0}" = "1" ]; then
|
|
70
|
+
exit 0
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# Opt-in: silent unless the operator explicitly declared compliance intent
|
|
74
|
+
if [ "${CC_PROXY_CAPTURE_SUGGESTER_ENABLE:-0}" != "1" ]; then
|
|
75
|
+
exit 0
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
# Check for an active HTTPS proxy (uppercase or lowercase, plus ALL_PROXY)
|
|
79
|
+
PROXY_ACTIVE=0
|
|
80
|
+
for var in HTTPS_PROXY https_proxy ALL_PROXY all_proxy; do
|
|
81
|
+
# shellcheck disable=SC1083
|
|
82
|
+
eval val="\${$var:-}"
|
|
83
|
+
if [ -n "${val:-}" ]; then
|
|
84
|
+
PROXY_ACTIVE=1
|
|
85
|
+
break
|
|
86
|
+
fi
|
|
87
|
+
done
|
|
88
|
+
|
|
89
|
+
if [ "$PROXY_ACTIVE" = "1" ]; then
|
|
90
|
+
# Proxy is active. Check whether an audit log sink is configured.
|
|
91
|
+
if [ -z "${ANTHROPIC_LOG_DIR:-}" ]; then
|
|
92
|
+
cat >&2 <<'EOF'
|
|
93
|
+
[proxy-capture-suggester] HTTPS proxy is active but ANTHROPIC_LOG_DIR is unset.
|
|
94
|
+
Compliance-grade audit trails require a stable on-disk sink for the captured
|
|
95
|
+
request bodies. Configure one before relying on the proxy capture for evidence:
|
|
96
|
+
|
|
97
|
+
export ANTHROPIC_LOG_DIR="$HOME/.claude/api-audit-log"
|
|
98
|
+
mkdir -p "$ANTHROPIC_LOG_DIR"
|
|
99
|
+
|
|
100
|
+
mitmproxy: --save-stream-file "$ANTHROPIC_LOG_DIR/$(date -u +%Y%m%dT%H%M%SZ).flow"
|
|
101
|
+
Burp Suite: Project options -> HTTP -> Logging -> Requests -> file in $ANTHROPIC_LOG_DIR
|
|
102
|
+
Charles: Tools -> Auto Save -> directory in $ANTHROPIC_LOG_DIR, format .chlsj
|
|
103
|
+
|
|
104
|
+
Silence this advisory once configured:
|
|
105
|
+
export CC_PROXY_CAPTURE_SUGGESTER_QUIET=1
|
|
106
|
+
EOF
|
|
107
|
+
fi
|
|
108
|
+
exit 0
|
|
109
|
+
fi
|
|
110
|
+
|
|
111
|
+
# No proxy active — emit the full four-tool advisory.
|
|
112
|
+
cat >&2 <<'EOF'
|
|
113
|
+
[proxy-capture-suggester] Compliance audit intent declared (CC_PROXY_CAPTURE_SUGGESTER_ENABLE=1)
|
|
114
|
+
but no HTTPS proxy is configured. Without one, you cannot reconstruct the system prompt that
|
|
115
|
+
was sent at the time of any logged tool execution. The v2.1.150 server-side injection channel
|
|
116
|
+
(GrowthBook tengu_heron_brook + bootstrap client_data) is acknowledged-intentional by Anthropic;
|
|
117
|
+
opt-out env vars close the channel going forward but produce no audit trail.
|
|
118
|
+
|
|
119
|
+
Four operator-side proxy options that terminate TLS and record the full request body:
|
|
120
|
+
|
|
121
|
+
1. mitmproxy (free, scriptable, recommended for compliance pipelines)
|
|
122
|
+
brew install mitmproxy # macOS
|
|
123
|
+
pipx install mitmproxy # Linux
|
|
124
|
+
Start:
|
|
125
|
+
mitmproxy --mode regular --listen-port 8080 \
|
|
126
|
+
--save-stream-file "$HOME/.claude/api-audit-log/$(date -u +%Y%m%dT%H%M%SZ).flow"
|
|
127
|
+
Bridge:
|
|
128
|
+
export HTTPS_PROXY=http://127.0.0.1:8080
|
|
129
|
+
export SSL_CERT_FILE="$HOME/.mitmproxy/mitmproxy-ca-cert.pem"
|
|
130
|
+
Verify: a single Claude Code prompt should produce a .flow file with the request body.
|
|
131
|
+
|
|
132
|
+
2. Burp Suite Community (free, GUI, common in enterprise pen-test contexts)
|
|
133
|
+
Proxy listener: 127.0.0.1:8080. Configure HTTPS_PROXY as above. Export the Burp CA cert
|
|
134
|
+
and set SSL_CERT_FILE to its path. Project options -> HTTP -> Logging -> Requests for
|
|
135
|
+
persistent capture.
|
|
136
|
+
|
|
137
|
+
3. Charles Proxy (commercial, $50, GUI, common on macOS dev workstations)
|
|
138
|
+
Default listener 127.0.0.1:8888. Tools -> Auto Save for persistent capture. Trust the
|
|
139
|
+
Charles root certificate via Charles -> Help -> SSL Proxying.
|
|
140
|
+
|
|
141
|
+
4. Anthropic SDK direct logging (free, lightweight, no proxy)
|
|
142
|
+
Set ANTHROPIC_LOG=debug to dump every request to stderr; redirect stderr to a file
|
|
143
|
+
and rotate. This captures less metadata than a proper proxy (no response timing, no
|
|
144
|
+
TLS handshake detail) but produces a request-body audit trail with no MITM overhead.
|
|
145
|
+
|
|
146
|
+
The four paths above produce an audit trail that pairs with cache-residue-detector.sh
|
|
147
|
+
(closes the cache gap) and server-side-prompt-injection-detector.sh (warns on missing
|
|
148
|
+
opt-outs). Together these three hooks cover the v2.1.150 audit surface for operators in
|
|
149
|
+
regulated industries.
|
|
150
|
+
|
|
151
|
+
Silence this advisory after configuring a proxy:
|
|
152
|
+
export CC_PROXY_CAPTURE_SUGGESTER_QUIET=1
|
|
153
|
+
|
|
154
|
+
References:
|
|
155
|
+
https://github.com/anthropics/claude-code/issues/62061 (v2.1.150 injection report, 46+ reactions)
|
|
156
|
+
https://gist.github.com/yurukusa/03839b3c3f88e1cce38fb0f2c127544d (four audit paths writeup)
|
|
157
|
+
EOF
|
|
158
|
+
|
|
159
|
+
exit 0
|