{"_id":"cc-safety-net","_rev":"41-e8c8a93d1aa1ddeb9f5906422959cd52","name":"cc-safety-net","dist-tags":{"latest":"2.3.3"},"versions":{"0.0.1":{"name":"cc-safety-net","version":"0.0.1","_id":"cc-safety-net@0.0.1","maintainers":[{"name":"kenryu","email":"ken0ryu@gmail.com"}],"dist":{"shasum":"d88de80874abb150ec73842d11e7f21bdf6d59a9","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.0.1.tgz","fileCount":2,"integrity":"sha512-FsUtqFGkKQmsZODLZUzg/w4uMp8xWZIoCrJ2NWDAZs7SfBppo0Mspca7zedAv9EouuNcNe6wUK2YqwjxFvTAeQ==","signatures":[{"sig":"MEQCIEy0rcAL8375WW7dTSBJEsAIxgm+LgYUVVg0Pyk/+OXPAiB5b7+NcFf2CR3DuK31eqC0Hd78gz9DCMHfvTOcSiZk6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":455},"type":"module","module":"index.ts","_npmUser":{"name":"kenryu","email":"ken0ryu@gmail.com"},"_npmVersion":"11.6.2","description":"To install dependencies:","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.0.1_1767445497695_0.6056249420605639","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"cc-safety-net","version":"0.4.0","keywords":["claude-code","opencode","safety","plugin","security"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@0.4.0","maintainers":[{"name":"kenryu","email":"ken0ryu@gmail.com"}],"homepage":"https://github.com/kenryu42/claude-code-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/claude-code-safety-net/issues"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"2a97575996fea4c2ab64de4cdbfe2b1f31588dc0","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.4.0.tgz","fileCount":30,"integrity":"sha512-pUMN/gnAqvq6nVro1hMlY8oFGXBJLUwM6uXbhsG8xo020r/AGX73+GiZhg90I9AHD4a1q1R0FZrDFLrWxpnrhg==","signatures":[{"sig":"MEYCIQCG45N/CDrhRTU3gV+HgtP953Tc9rB38XKMhxKWpl5qjAIhAJzC/rDQ6n/RfhzGt2Ur5rdVcIk2jMqfnI/iYJS1beR1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167246},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"b554f6ad8f110367083ae63e0c76d73fe6d9ed76","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun build src/index.ts src/bin/cc-safety-net.ts --outdir dist --target node && bun run build:types && bun run build:schema","check":"bun run lint && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test","clean":"rm -rf dist","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","typecheck":"tsc --project tsconfig.typecheck.json","build:types":"tsc --emitDeclarationOnly --declaration --noEmit false","setup-hooks":"bun -e 'await Bun.write(\".husky/pre-commit\", \"#!/usr/bin/env sh\\n\\nbun run knip && bun run lint-staged\\n\")' && chmod +x .husky/pre-commit","build:schema":"bun run scripts/build-schema.ts"},"_npmUser":{"name":"kenryu","email":"ken0ryu@gmail.com"},"repository":{"url":"git+https://github.com/kenryu42/claude-code-safety-net.git","type":"git"},"_npmVersion":"11.6.2","description":"Claude Code / OpenCode plugin - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.11.1","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.4.0_1767784515865_0.1000180262079815","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"cc-safety-net","version":"0.4.1","keywords":["claude-code","opencode","safety","plugin","security"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@0.4.1","maintainers":[{"name":"kenryu","email":"ken0ryu@gmail.com"}],"homepage":"https://github.com/kenryu42/claude-code-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/claude-code-safety-net/issues"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"591ae1fa41004a24b3d888e7e5eda48dd5bd5e7b","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.4.1.tgz","fileCount":30,"integrity":"sha512-6l4Uc07YEfQjSNO7XQOGCiZog9vWjCQNlea3Yv6e4QAV0nXbMJz+kbBquArL7iKQv7a43MAhs5UCtQNiRdZ6HA==","signatures":[{"sig":"MEQCICwde1+qeKUcEwzN3Os0hZRVamUQTWn3vZDf/oeuHZsZAiBjyPJOElnDwHm2072xvn9QOl3s571IGEgpcCayWLWXrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":167407},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"d158d8fd41bb70d0ff2011941f4babb533e9d088","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun build src/index.ts src/bin/cc-safety-net.ts --outdir dist --target node && bun run build:types && bun run build:schema","check":"bun run lint && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test","clean":"rm -rf dist","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","typecheck":"tsc --project tsconfig.typecheck.json","build:types":"tsc --emitDeclarationOnly --declaration --noEmit false","setup-hooks":"bun -e 'await Bun.write(\".husky/pre-commit\", \"#!/usr/bin/env sh\\n\\nbun run knip && bun run lint-staged\\n\")' && chmod +x .husky/pre-commit","build:schema":"bun run scripts/build-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:28db2ca7-f17e-4d43-894b-e6eeff723077"}},"repository":{"url":"git+https://github.com/kenryu42/claude-code-safety-net.git","type":"git"},"_npmVersion":"11.7.0","description":"Claude Code / OpenCode plugin - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.12.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.4.1_1767893727031_0.3637673237626111","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"cc-safety-net","version":"0.5.0","keywords":["claude-code","opencode","safety","plugin","security"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@0.5.0","maintainers":[{"name":"kenryu","email":"ken0ryu@gmail.com"}],"homepage":"https://github.com/kenryu42/claude-code-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/claude-code-safety-net/issues"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"284f52e3b3238634584002cd6ef03cae1edfd8fb","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.5.0.tgz","fileCount":30,"integrity":"sha512-rf6WSrdQsCj0irkVFFvFYNUXb9B7AaqN7ayrqJCk/GcIiy8c2KrRgkp9Tvkz7n0EMjGGrcSa4Mh3obHQkFhsog==","signatures":[{"sig":"MEQCIBrKqqSFPthhfq67vIC+hxofZxFhdahmK1odrOhw1NRFAiBB2nuqqjTFyXT9dRS+19sF/UugpsTYCv4P7lam31jnPw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":175071},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"2df2d88a5f044d0d759c80310717453e2a9d9067","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun build src/index.ts src/bin/cc-safety-net.ts --outdir dist --target node && bun run build:types && bun run build:schema","check":"bun run lint && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","typecheck":"tsc --project tsconfig.typecheck.json","build:types":"tsc --emitDeclarationOnly --declaration --noEmit false","setup-hooks":"bun -e 'await Bun.write(\".husky/pre-commit\", \"#!/usr/bin/env sh\\n\\nbun run knip && bun run lint-staged\\n\")' && chmod +x .husky/pre-commit","build:schema":"bun run scripts/build-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:28db2ca7-f17e-4d43-894b-e6eeff723077"}},"repository":{"url":"git+https://github.com/kenryu42/claude-code-safety-net.git","type":"git"},"_npmVersion":"11.7.0","description":"Claude Code / OpenCode plugin - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.12.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.5.0_1768070742928_0.7666290936231195","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"cc-safety-net","version":"0.5.1","keywords":["claude-code","opencode","safety","plugin","security"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@0.5.1","maintainers":[{"name":"kenryu","email":"ken0ryu@gmail.com"}],"homepage":"https://github.com/kenryu42/claude-code-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/claude-code-safety-net/issues"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"3076fd74e8a0d21f96d9a18f78c21724260b0e87","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.5.1.tgz","fileCount":35,"integrity":"sha512-cf3S5NqHYrxqeqbKXPEFHoJfzbKeqHNgJVgNjEi4Jqb169JxC2SuPWa9MI1pxgoFrtaBQAfE861d1JoEFbs9iA==","signatures":[{"sig":"MEUCIDYAvfMiLHdgONYayyO0V/Fn/vePPHlsSu1eAW/BVW2/AiEA9sC5nSZIDf/Epi02UmEU1oFIJ149Y6nZLts6f3CAQjA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":181571},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"a2a5a8c21d74e5531ce94c238cc643205919b316","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun build src/index.ts src/bin/cc-safety-net.ts --outdir dist --target node && bun run build:types && bun run build:schema","check":"bun run lint && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","typecheck":"tsc --project tsconfig.typecheck.json","build:types":"tsc --emitDeclarationOnly --declaration --noEmit false","setup-hooks":"bun -e 'await Bun.write(\".husky/pre-commit\", \"#!/usr/bin/env sh\\n\\nbun run knip && bun run lint-staged\\n\")' && chmod +x .husky/pre-commit","build:schema":"bun run scripts/build-schema.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:28db2ca7-f17e-4d43-894b-e6eeff723077"}},"repository":{"url":"git+https://github.com/kenryu42/claude-code-safety-net.git","type":"git"},"_npmVersion":"11.7.0","description":"Claude Code / OpenCode plugin - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.12.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.5.1_1768154390915_0.6453172219132681","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"cc-safety-net","version":"0.6.0","keywords":["claude-code","opencode","safety","plugin","security"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@0.6.0","maintainers":[{"name":"kenryu","email":"ken0ryu@gmail.com"}],"homepage":"https://github.com/kenryu42/claude-code-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/claude-code-safety-net/issues"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"8e4f6a04decbeb6e3f1b5f587a0b84c8b5c12457","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.6.0.tgz","fileCount":41,"integrity":"sha512-Q5NPZI+XGFYux20rDFEyFq7UURXpYJknVGACdXBIVF6lvyJeR2DZbrziZZX49wMCxzoJqA1ck5LUVfRMWDJafw==","signatures":[{"sig":"MEUCIEgXK1Xc9IYiX19cFc8vcgBpLQfBZWxoH/HBgDRMe+dIAiEA8OyprmaHF23YaREjtmUyoN8I+vhUBFC8Tshnkj0jlHI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":190946},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"272265fbb656f71ed4706593f2d361ecd6702536","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","typecheck":"tsc --project tsconfig.typecheck.json","build:types":"tsc --emitDeclarationOnly --declaration --noEmit false","setup-hooks":"bun -e 'await Bun.write(\".husky/pre-commit\", \"#!/usr/bin/env sh\\n\\nbun run knip && bun run lint-staged\\n\")' && chmod +x .husky/pre-commit","build:schema":"bun run scripts/build-schema.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:28db2ca7-f17e-4d43-894b-e6eeff723077"}},"repository":{"url":"git+https://github.com/kenryu42/claude-code-safety-net.git","type":"git"},"_npmVersion":"11.7.0","description":"Claude Code / OpenCode plugin - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.12.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.6.0_1768496744284_0.06897869969878268","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"cc-safety-net","version":"0.6.1","keywords":["claude-code","opencode","safety","plugin","security"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@0.6.1","maintainers":[{"name":"kenryu","email":"ken0ryu@gmail.com"}],"homepage":"https://github.com/kenryu42/claude-code-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/claude-code-safety-net/issues"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"6e0a00415d40833d3549ba972142e07e0ff601cb","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.6.1.tgz","fileCount":48,"integrity":"sha512-QFpQ7oVKaUdxpfkKWzpFis70LpXmQX97X1N2jZu8BPgKDxcveX9HHOk0SkQ+aHt8FTdrLChSo3Tzem0fYqbLfw==","signatures":[{"sig":"MEYCIQDwr6Ur20lhRw+THotqz0S29QE/CjGoBEvpKylRixe0uAIhAPg96js1KOiNjOJJZ1BY4WEynOXq1b5zZEeLkha/xtC/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":229745},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"369cc941edfd7bc1b7c78c1948ef27fd6f92531c","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","typecheck":"tsc --project tsconfig.typecheck.json","build:types":"tsc --emitDeclarationOnly --declaration --noEmit false","setup-hooks":"bun -e 'await Bun.write(\".husky/pre-commit\", \"#!/usr/bin/env sh\\n\\nbun run knip && bun run lint-staged\\n\")' && chmod +x .husky/pre-commit","build:schema":"bun run scripts/build-schema.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:28db2ca7-f17e-4d43-894b-e6eeff723077"}},"repository":{"url":"git+https://github.com/kenryu42/claude-code-safety-net.git","type":"git"},"_npmVersion":"11.7.0","description":"Claude Code / OpenCode plugin - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.12.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.6.1_1768814726681_0.5718128898457779","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"cc-safety-net","version":"0.6.2","keywords":["claude-code","opencode","safety","plugin","security"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@0.6.2","maintainers":[{"name":"kenryu","email":"ken0ryu@gmail.com"}],"homepage":"https://github.com/kenryu42/claude-code-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/claude-code-safety-net/issues"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"774da3ba6e0501969846069d1a34ca02f138126b","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.6.2.tgz","fileCount":48,"integrity":"sha512-lHjPiJJ0+HYl9HjU2Dg/iy2CcR11ijyEHB2ACBBnR+6E05tPhcepQsBUZis7abyzm2u0q/2Qu982iNOAosjczA==","signatures":[{"sig":"MEYCIQCeiZnTYbDAL5juXbiKxcXz3Bd2PBJjYYPd0jJqhxrtfwIhAJMCNbkav5HbPl+sHzjhyoupUofSHREWkcxHkbmzjB41","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":229745},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"772a4b2dd058f0e0d9b0125689979458f491cf81","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","typecheck":"tsc --project tsconfig.typecheck.json","build:types":"tsc --emitDeclarationOnly --declaration --noEmit false","setup-hooks":"bun -e 'await Bun.write(\".husky/pre-commit\", \"#!/usr/bin/env sh\\n\\nbun run knip && bun run lint-staged\\n\")' && chmod +x .husky/pre-commit","build:schema":"bun run scripts/build-schema.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:28db2ca7-f17e-4d43-894b-e6eeff723077"}},"repository":{"url":"git+https://github.com/kenryu42/claude-code-safety-net.git","type":"git"},"_npmVersion":"11.7.0","description":"Claude Code / OpenCode plugin - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.12.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.6.2_1768815529966_0.9826782583231624","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"cc-safety-net","version":"0.7.0","keywords":["claude-code","opencode","safety","plugin","security"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@0.7.0","maintainers":[{"name":"kenryu","email":"ken0ryu@gmail.com"}],"homepage":"https://github.com/kenryu42/claude-code-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/claude-code-safety-net/issues"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"2cc21e5d06e783f2b3cfb8af561c0e961a287b8a","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.7.0.tgz","fileCount":69,"integrity":"sha512-cu/T7kXAukomqMLmheV/EqYKImOxmoUtC6Oypvrn/qLWr6urHzkIxXx3SZbteLkT3XnHnYMxZTL+9Ry7ZBLNYQ==","signatures":[{"sig":"MEUCIQCtTMhY4fTC3ia7EfjEs9ciQDlTLO59HHZBgtqYU/g1mAIgR12KAGN8uca1jvsu2Kagf50Grzqu2uaOR1Aa4+nalAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":282145},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"562bd80d6d86dc63c081ab38ec2a417c56b837e4","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","setup-hooks":"bun -e 'await Bun.write(\".husky/pre-commit\", \"#!/usr/bin/env sh\\n\\nbun run knip && bun run lint-staged\\n\")' && chmod +x .husky/pre-commit","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/bin/cc-safety-net.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:28db2ca7-f17e-4d43-894b-e6eeff723077"}},"repository":{"url":"git+https://github.com/kenryu42/claude-code-safety-net.git","type":"git"},"_npmVersion":"11.8.0","description":"Claude Code / OpenCode plugin - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.13.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.7.0_1769195317892_0.18248502285926738","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"cc-safety-net","version":"0.7.1","keywords":["claude-code","opencode","safety","plugin","security"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@0.7.1","maintainers":[{"name":"kenryu","email":"ken0ryu@gmail.com"}],"homepage":"https://github.com/kenryu42/claude-code-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/claude-code-safety-net/issues"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"601a18aba2f2e1188e4121bcd42818b80c707b6f","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.7.1.tgz","fileCount":69,"integrity":"sha512-tOBd9cKeaV4O2sR2tJ3X7xRVun9p3pv2OlyHicLfbMVzeo0cW2PPyOyEv9ph7UpYyizTR2H7v2wQuAMGSf6HPA==","signatures":[{"sig":"MEQCIF0udS+057Pu+9klhWkRt+piFnDPvWSNBpJ2FeAJzGAHAiAaPZWspvb0/W83C1PEzssNv/bAySQGlsYBpZYyuT5qjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":284166},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"75df0ec9b072e7d90b3889a396281a15e85cf5e8","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","setup-hooks":"bun -e 'await Bun.write(\".husky/pre-commit\", \"#!/usr/bin/env sh\\n\\nbun run knip && bun run lint-staged\\n\")' && chmod +x .husky/pre-commit","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/bin/cc-safety-net.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:28db2ca7-f17e-4d43-894b-e6eeff723077"}},"repository":{"url":"git+https://github.com/kenryu42/claude-code-safety-net.git","type":"git"},"_npmVersion":"11.8.0","description":"Claude Code / OpenCode plugin - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.13.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.7.1_1769353461300_0.17737624086350068","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"cc-safety-net","version":"0.8.0","keywords":["claude-code","opencode","safety","plugin","security"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@0.8.0","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://github.com/kenryu42/claude-code-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/claude-code-safety-net/issues"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"162473230645e472deaea9af73f1330827a4ab0a","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.8.0.tgz","fileCount":69,"integrity":"sha512-T4CEjuxkVZgfM8BalUFth28QFn31P/zZKXcRTxQuiKroaqA5t8k0KNkEVatXRteU9ohI5LW41rCb5ukzpZfkWA==","signatures":[{"sig":"MEUCIDK5RHMu+0ayGnMlr1QhaTr75DonAu/0EI8azEuaygPuAiEApkC6wmLuNvK7IcOOiQ8an6QYpBHDBziJllkJseY1rSE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":326886},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"6ab61a773af09b42c110c084d5d5532644d82dbc","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","lint:ci":"biome ci .","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage --coverage-reporter=lcov","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","setup-hooks":"chmod +x .husky/pre-commit .husky/pre-push","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/bin/cc-safety-net.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:28db2ca7-f17e-4d43-894b-e6eeff723077"}},"repository":{"url":"git+https://github.com/kenryu42/claude-code-safety-net.git","type":"git"},"_npmVersion":"11.12.0","description":"Claude Code / OpenCode plugin - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.14.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.8.0_1774068293787_0.5619841223402888","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"cc-safety-net","version":"0.8.1","keywords":["claude-code","opencode","safety","plugin","security"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@0.8.1","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://github.com/kenryu42/claude-code-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/claude-code-safety-net/issues"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"179c6ea86462e9935a4231c14cc6fd20fd5c9e13","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.8.1.tgz","fileCount":69,"integrity":"sha512-uqDQ+2HhapmAsDsvcjlefXISmYEH0zGZ06eWjQvQ5Gze3+h4Elg3D/3lGmZ7V6W1yz8NDfFBBbr1nStvFu4EBg==","signatures":[{"sig":"MEUCIQDYHgLmDfuUxOgW3m7iMDEXS5/n8zgaCDPlQ67LNtFT6AIgRd9956cgjVxAYWk94P3bvbQix7bOEusLU2NDXkNopMI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":325291},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"e87a8bc857faa6923a9f76f70bc88ddf26e4024a","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","lint:ci":"biome ci .","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage --coverage-reporter=lcov","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","setup-hooks":"chmod +x .husky/pre-commit .husky/pre-push","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/bin/cc-safety-net.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:28db2ca7-f17e-4d43-894b-e6eeff723077"}},"repository":{"url":"git+https://github.com/kenryu42/claude-code-safety-net.git","type":"git"},"_npmVersion":"11.12.0","description":"Claude Code / OpenCode plugin - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.14.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.8.1_1774365281840_0.992483704785126","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"cc-safety-net","version":"0.8.2","keywords":["claude-code","opencode","safety","plugin","security"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@0.8.2","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://github.com/kenryu42/claude-code-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/claude-code-safety-net/issues"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"afd879df21cf0a65083f77eb373bbcfcc5f8db72","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.8.2.tgz","fileCount":69,"integrity":"sha512-2htLFw4+yPfsVvulZ7F5xQlUebN/wEGDr+/gWuQnBHXvTN4BeFLSvkKmssYFyS0yGaIJv6n5c/beQx9NtqQEpQ==","signatures":[{"sig":"MEYCIQCi3/FyX7brZglDw1Pqe7WZqHl+u059Id3Sqn6A/mJwggIhAIjAO+95JEPQ9eazSx990Cq8eLMxAR1ESeZ2QlMu/0lL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@0.8.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":324280},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"164204d6e1c5599a69f0e724e0c7f7f54aa12a64","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","lint:ci":"biome ci .","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage --coverage-reporter=lcov","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","setup-hooks":"chmod +x .husky/pre-commit .husky/pre-push","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/bin/cc-safety-net.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:28db2ca7-f17e-4d43-894b-e6eeff723077"}},"repository":{"url":"git+https://github.com/kenryu42/claude-code-safety-net.git","type":"git"},"_npmVersion":"11.12.0","description":"Claude Code / OpenCode plugin - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.14.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.8.2_1774418687357_0.04097187495898025","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"cc-safety-net","version":"0.9.0","keywords":["claude-code","opencode","safety","plugin","security"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@0.9.0","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://github.com/kenryu42/claude-code-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/claude-code-safety-net/issues"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"1f3fdec07aaf6beb13f568b62cade987c25f8799","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-0.9.0.tgz","fileCount":71,"integrity":"sha512-MMoIRQeC31qPU8LwXhJ7AxEpJrEbS7b2aotXiuz/G0qvfctzZ4tP1ahqJBO2R0NNoIVB8UrK6VoTzANi+fu0Zg==","signatures":[{"sig":"MEUCIBAh1GhmCQC5xU5hDB7Gn2Sr1cIsFDDPAMmr3No7sU7VAiEA5uXQ5JCoJeVZbeN6QD1nIhHaRPHo7dszadUXt1zOcD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":421558},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"1819ca2d7527e261fbfaee17237bc54d857a726c","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","lint:ci":"biome ci .","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run sg:scan && AGENT=1 bun test --coverage --coverage-reporter=lcov","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","setup-hooks":"chmod +x .husky/pre-commit .husky/pre-push","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/bin/cc-safety-net.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:28db2ca7-f17e-4d43-894b-e6eeff723077"}},"repository":{"url":"git+https://github.com/kenryu42/claude-code-safety-net.git","type":"git"},"_npmVersion":"11.14.0","description":"Claude Code / OpenCode plugin - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.14.1","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_0.9.0_1778120158018_0.5906811251194286","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"cc-safety-net","version":"1.0.0","keywords":["claude-code","opencode","safety","plugin","security","pi-package"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@1.0.0","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://github.com/kenryu42/cc-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"c6d6b0a40fd5a930d2cabe9d8caf261a78b36f90","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-1.0.0.tgz","fileCount":109,"integrity":"sha512-us771lWFdbeDT6h0ecFT5oeVz95t2oHcP4Qaxf5TWYLlmTSKPMOCvIzEWDYxvvd2cQkVAcyml7jy7MRryY4DHA==","signatures":[{"sig":"MEUCIQDeWL2Qp4G0gqAUDtCNq0C+MaSU8sOAh61InKq4AEOcrQIgHHfMHcOR4GVC5u4DkfZ69GAN5gcuDkvCsuJYBdiIpaA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":874506},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"1fa1ff80391e9c69f8b31ed4bb063b662e041cf2","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","lint:ci":"biome ci .","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage --coverage-reporter=lcov","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","setup-hooks":"chmod +x .husky/pre-commit .husky/pre-push","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/bin/cc-safety-net.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run","check-duplicates":"bunx jscpd src tests --exitCode 1 --reporters ai"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.16.0","description":"A coding agent CLI hook - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.16.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","jscpd":"^4.0.9","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_1.0.0_1780656104813_0.6261843277058345","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"cc-safety-net","version":"1.0.1","keywords":["claude-code","opencode","safety","plugin","security","pi-package"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@1.0.1","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://github.com/kenryu42/cc-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"997a87c7f1244404e3944ae0e8eddb46b784e35a","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-1.0.1.tgz","fileCount":109,"integrity":"sha512-Iurq6NghkVhET2SW7UckL6eAoTzKMlSPj/fsyd+dPBQy7zV+HQ25CkEKTY/D2ICLpQW55t+AD5QYY8/54d9xUg==","signatures":[{"sig":"MEYCIQD1ckQsL9qnFJPR7tZxvrl8QDwgZT0BrmSExTX9h/r+BwIhAORDK4/gl6LbPrL9ui5VNVnVcAoX30SP2Nn/EuTAXqUz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":875451},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"1b6d3f45400305e6bc724523c8ccff4314028b33","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","lint:ci":"biome ci .","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage --coverage-reporter=lcov","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","setup-hooks":"chmod +x .husky/pre-commit .husky/pre-push","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/bin/cc-safety-net.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run","check-duplicates":"bunx jscpd src tests --exitCode 1 --reporters ai"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.16.0","description":"A coding agent CLI hook - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.16.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","jscpd":"^4.0.9","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_1.0.1_1780673655283_0.6936193103278887","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"cc-safety-net","version":"1.0.2","keywords":["claude-code","opencode","safety","plugin","security","pi-package"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@1.0.2","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://github.com/kenryu42/cc-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"595d9293e3fa952294ad95d331ae327cce897518","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-1.0.2.tgz","fileCount":109,"integrity":"sha512-4t+CMNOVb1jSSnXyZsU+McnLJsey6uMGlgMHouddZo6DHvwC1NV9UCCbaRk8aDZhawW6NOyV3cUxs1WPEqFfsQ==","signatures":[{"sig":"MEQCIGHsCwOeu5JSUzZPT8I2hFUsNNem8g+/0blg97sYQHLcAiA+9F1OYj14xFWi/C3My/GhT/t7vRqNUEomCXO/KTYduw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":880396},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"fba4ac3575e9bf0689e0562a18988035e64e6ef8","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","lint:ci":"biome ci .","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage --coverage-reporter=lcov","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","setup-hooks":"chmod +x .husky/pre-commit .husky/pre-push","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/bin/cc-safety-net.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run","check-duplicates":"bunx jscpd src tests --exitCode 1 --reporters ai"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.17.0","description":"A coding agent CLI hook - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.16.0","dependencies":{"shell-quote":"^1.8.3"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","jscpd":"^4.0.9","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_1.0.2_1781249030509_0.3040080812007995","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"cc-safety-net","version":"1.0.3","keywords":["claude-code","opencode","safety","plugin","security","pi-package"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@1.0.3","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://github.com/kenryu42/cc-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"22cdd65e487bc859553f6255a20bac91dfbde8ca","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-1.0.3.tgz","fileCount":109,"integrity":"sha512-64WWjsQajRU+TZVe06zBEUD0yqEGJLfC0otYexm22WaROGH4/0UcSL7qTcNxLBZlGoYGcsga/WmeLDJma0Kbjw==","signatures":[{"sig":"MEUCIC/5KJEMbEdQAz6EtlUl3D1myehxKlGIzKSy84bzx4bJAiEAvxiN8ryK7Qu4kfeAFVrhsXdQw9MaVH9vTiyE1sGPVHE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":883887},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"3473cdb4ac4c52d8d20c60dcc976aafa35878a23","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","lint:ci":"biome ci .","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage --coverage-reporter=lcov","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","setup-hooks":"chmod +x .husky/pre-commit .husky/pre-push","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/bin/cc-safety-net.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run","check-duplicates":"bunx jscpd src tests --exitCode 1 --reporters ai"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.17.0","description":"A coding agent CLI hook - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.16.0","dependencies":{"shell-quote":"^1.8.4"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","jscpd":"^4.0.9","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_1.0.3_1781335610734_0.2949514092096297","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"cc-safety-net","version":"1.0.4","keywords":["claude-code","opencode","safety","plugin","security","pi-package"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@1.0.4","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://github.com/kenryu42/cc-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"ad1f41b64c2d830f5e3b4c7a7e3f1b57fb46708e","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-1.0.4.tgz","fileCount":109,"integrity":"sha512-FtlGLfxxws+s6Y1FIfiErEM+9/XQvUAyI6avKwnhT4MVStONv6Wekx18cgDQVjgcNwOMRami1GB+Juvpexmckw==","signatures":[{"sig":"MEQCIFyYhCwI61Zw6PhA59deFoXQJZsBgsAffB1CuSh2FsG0AiBRTXA+MFdrbIQ+1qM1Y4hg5O4yT+OfWWVbfZRxrAKsKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":887313},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"fe3988a5e9592d2f15322d4c93ab03f17eca2ea0","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","lint:ci":"biome ci .","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage --coverage-reporter=lcov","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","setup-hooks":"chmod +x .husky/pre-commit .husky/pre-push","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/bin/cc-safety-net.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run","check-duplicates":"bunx jscpd src tests --exitCode 1 --reporters ai"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.17.0","description":"A coding agent CLI hook - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.16.0","dependencies":{"shell-quote":"^1.8.4"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","jscpd":"^4.0.9","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_1.0.4_1781428678820_0.1490219481779762","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"cc-safety-net","version":"1.0.5","keywords":["claude-code","opencode","safety","plugin","security","pi-package"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@1.0.5","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://github.com/kenryu42/cc-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"d8d153c7cc68f4c094971faf847573245d087adb","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-1.0.5.tgz","fileCount":109,"integrity":"sha512-ysa07QD3UgUPFZAEd5qJlTexngNd+2eRtVHF8sQV3opVBtW+/aQdYzTxVopfIOJn3bqoKuL2CUaUmn0SZKal1Q==","signatures":[{"sig":"MEUCIEXN4m7zBNePZwf+O0y8bCwlwC4CUS+jQ9x/5Q/1Zm+sAiEAw8drPAD77yAzJcIEZueNs9KJLIptVh9GAVlOZbk+TnI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@1.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":887437},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"d33edb58939fa6ecdbbe4a61e5a2c292592a16a7","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","lint:ci":"biome ci .","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage --coverage-reporter=lcov","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","setup-hooks":"chmod +x .husky/pre-commit .husky/pre-push","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/bin/cc-safety-net.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run","check-duplicates":"bunx jscpd src tests --exitCode 1 --reporters ai"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.17.0","description":"A coding agent CLI hook - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.16.0","dependencies":{"shell-quote":"^1.8.4"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","jscpd":"^4.0.9","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_1.0.5_1781453245356_0.9622185568590398","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"cc-safety-net","version":"1.0.6","keywords":["claude-code","opencode","safety","plugin","security","pi-package"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@1.0.6","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://github.com/kenryu42/cc-safety-net#readme","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"110f6ba9066acb1d2c10637c01f2b56137e2655e","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-1.0.6.tgz","fileCount":109,"integrity":"sha512-uc2EmRXPXb08cfN1eGnr+h3tWHqxA20fJGZoGBgW6wFl+Nubmmy6jug18vc7WrOW7dGBMPxz4VuU8srfjHtWlw==","signatures":[{"sig":"MEUCIDuarIgOa61HQGXKZLhokdZ/TtFlfmOTWa3JqFabk8T8AiEAzzwvV4PWs2LwsMbNlTPhKs/FS4ox4qeJ0bTKfZIZeRA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@1.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":889048},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"e34ae44a1f341e73729f1be7a62acef27115b109","scripts":{"knip":"knip --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage","clean":"rm -rf dist","lint:ci":"biome ci .","prepare":"husky && bun run setup-hooks","sg:scan":"ast-grep scan","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run sg:scan && AGENT=1 bun test --coverage --coverage-reporter=lcov","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","setup-hooks":"chmod +x .husky/pre-commit .husky/pre-push","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/bin/cc-safety-net.ts","publish:dry-run":"bun run scripts/publish.ts --dry-run","check-duplicates":"bunx jscpd src tests --exitCode 1 --reporters ai"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.17.0","description":"A coding agent CLI hook - block destructive git and filesystem commands before execution","directories":{},"_nodeVersion":"24.16.0","dependencies":{"shell-quote":"^1.8.4"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.3.5","knip":"^5.79.0","husky":"^9.1.7","jscpd":"^4.0.9","@types/bun":"latest","lint-staged":"^16.2.7","@ast-grep/cli":"^0.40.4","@biomejs/biome":"2.3.10","@types/shell-quote":"^1.7.5","@opencode-ai/plugin":"^1.0.224"},"peerDependencies":{"typescript":"^5"},"trustedDependencies":["@ast-grep/cli"],"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_1.0.6_1781542854556_0.08040335063143633","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"cc-safety-net","version":"2.0.0","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.0.0","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"daa92e7f8e0db3943d5b00d84239a0f91f32e75c","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.0.0.tgz","fileCount":14,"integrity":"sha512-pP6jR7m+uGcTIH4+mEKm3b0Ao6mojDixAPPDXKzoWm61FNffQQwNX69oZa7U3UMabHepGX2Lmzg7TQOCFvAI4A==","signatures":[{"sig":"MEYCIQD26XDIxPIRfcbqs508tYqJguUIibttPmh87UthFTiRDwIhAP8a1lJDPqfDDsrawe0GXvxMGOBSoBqMWjb13LL2VI4J","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1633564},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.0.0.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"313c2f4dae87c0ce4c50a1514c1032773a3c4592","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","verify:build":"bun run scripts/verify-deterministic-build.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.0.0.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-pP6jR7m+uGcTIH4+mEKm3b0Ao6mojDixAPPDXKzoWm61FNffQQwNX69oZa7U3UMabHepGX2Lmzg7TQOCFvAI4A==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.0.0_1786325013430_0.430117579633313","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"cc-safety-net","version":"2.0.1","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.0.1","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"621905ee50e7015781adc92ae087aa82d4542e8e","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.0.1.tgz","fileCount":14,"integrity":"sha512-AQyw1UzxUGwiMkUBN2bLyKcYVCfhkGZF0U9Xoy+nBHvVHRaa3KSmU3JXBEGppXAY1eDVua+jX2lmXXo/r0qsTA==","signatures":[{"sig":"MEUCIQCaRZHlynU2xb262ScYXcsSn/Q1xgkccGGhJ9V0BBIMdAIgWnV9iVUXHm0L75XnIDeozdKYhAPy3t4BtoBL/NGWZQs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1634131},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.0.1.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"b9d0f7b1344697cdf401752ce642945b9f1a8292","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","verify:build":"bun run scripts/verify-deterministic-build.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.0.1.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-AQyw1UzxUGwiMkUBN2bLyKcYVCfhkGZF0U9Xoy+nBHvVHRaa3KSmU3JXBEGppXAY1eDVua+jX2lmXXo/r0qsTA==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.0.1_1786343898122_0.7056390574310241","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"cc-safety-net","version":"2.0.3","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.0.3","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"baa95d6bb9d4142bc9fd5239ed13ccc7e75739df","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.0.3.tgz","fileCount":14,"integrity":"sha512-d4jxlo+rzKrwTUIOZWAtX4BgRitWFeTKn8MgEYrkyJUEJfN8gBe0o/FluW6WeaJdSbALavYJTTU0CXnJHSSStg==","signatures":[{"sig":"MEYCIQDdmmFFGAhIi+k8pkcpTYtKe3gfKxdAzTq+GYELFRjhHgIhAJOoI7FlBPbi0yATm2+docve4fKPLmzH8QiNFYDV+gZn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1640694},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.0.3.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"2bf7177e063d60cc8f01c220e02ab5cc527e87f0","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","verify:build":"bun run scripts/verify-deterministic-build.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.0.3.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-d4jxlo+rzKrwTUIOZWAtX4BgRitWFeTKn8MgEYrkyJUEJfN8gBe0o/FluW6WeaJdSbALavYJTTU0CXnJHSSStg==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.0.3_1786502198631_0.7021404576797101","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"cc-safety-net","version":"2.0.4","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.0.4","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"50ec7ee1258effee14b6fc1b8c4bb0c0e99e1fdf","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.0.4.tgz","fileCount":15,"integrity":"sha512-xY3U1qzVS9JlaKykQlNItDd4UV0wCLdnrvCdIDfs19QW5eBxdz1cZ5FGhm0kP0NeOCfeEsrgcRtbsmem+36I1g==","signatures":[{"sig":"MEUCIAIumDlRpLmOQVKp4hoW75IiA099EdEgKv4oR8k1t7Z+AiEAj+eMcXQ8vi0no9sad36uWxD6DqjrjoPs8tWPpFUY/uI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1758864},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.0.4.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"73275768641a6f8647b085b6dc9fc43504aa5a70","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","verify:build":"bun run scripts/verify-deterministic-build.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.0.4.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-xY3U1qzVS9JlaKykQlNItDd4UV0wCLdnrvCdIDfs19QW5eBxdz1cZ5FGhm0kP0NeOCfeEsrgcRtbsmem+36I1g==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.0.4_1786679944462_0.11475511369785596","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"cc-safety-net","version":"2.0.5","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.0.5","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"655211b5cd414c1ccc5969e5347d183fd184705c","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.0.5.tgz","fileCount":15,"integrity":"sha512-n62DNh9/9NRGQKLbN8upg7Ox9GISw5xtI/nf4cEYdA3iHDrZJS1UqIuvd8G4PwAn5gE3GptdmE3r1HVDNbkbLQ==","signatures":[{"sig":"MEUCIQCVzcdQyvKfYc1PQb+DKMZ5uRPPXPUtTyY5376e0Jn/PgIgeWM2lVNN8ZsjLZ4QBOazOiytsViAMF42VubBxZyCJ2Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1759913},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.0.5.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"83819e0005e7a22f52cf73afd0c860601b24a3be","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","verify:build":"bun run scripts/verify-deterministic-build.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.0.5.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-n62DNh9/9NRGQKLbN8upg7Ox9GISw5xtI/nf4cEYdA3iHDrZJS1UqIuvd8G4PwAn5gE3GptdmE3r1HVDNbkbLQ==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.0.5_1786724324828_0.6138774114903938","host":"s3://npm-registry-packages-npm-production"}},"2.0.6":{"name":"cc-safety-net","version":"2.0.6","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.0.6","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"96fe5b11bf19ca3dbb7264757550e4326cd912fe","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.0.6.tgz","fileCount":15,"integrity":"sha512-MgmnXrectlkg+Y7kMU45Pt0lOLv/T9mbTGNq69y8DEKVojs+lYXkStaJbPdrwIA6Bss96dDCFq/WGqVoDr9lTg==","signatures":[{"sig":"MEQCIF2sEhPtwpjySz8F+ENDmdzRIGW2oIbZHN4EMqmuLd3wAiBWIOcc/xzZHBACohWu0sZ/7yXqccIgR8/TymvDjzGk2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1769688},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.0.6.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"2583b8d9b9fce4264d0e1aa09b40c62f7632d9d9","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","verify:build":"bun run scripts/verify-deterministic-build.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.0.6.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-MgmnXrectlkg+Y7kMU45Pt0lOLv/T9mbTGNq69y8DEKVojs+lYXkStaJbPdrwIA6Bss96dDCFq/WGqVoDr9lTg==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.0.6_1786950442859_0.9530132290733748","host":"s3://npm-registry-packages-npm-production"}},"2.0.7":{"name":"cc-safety-net","version":"2.0.7","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.0.7","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"7574d56b3e75c788debf6ef0fef988f5f9b9b743","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.0.7.tgz","fileCount":15,"integrity":"sha512-UpNnHVrOUWz0h1bxtK4G8swlajIP0jaWYqygdYaNPko8ayIwJLG8AfDJfkTPtVJezaFT4Y0JjYkO7anxm6KMKQ==","signatures":[{"sig":"MEYCIQCDX6gR7lOddan8hy0pWdstIliyTx8p8bsI+R3G8Wx/BQIhANlIRugeVq9eEYWJz7FDOM3+7BvVa8Z+vggeI8fe/0L0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1766928},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.0.7.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"5c5eace87adc0db41ba762018a1cf7d1506e589c","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.0.7.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-UpNnHVrOUWz0h1bxtK4G8swlajIP0jaWYqygdYaNPko8ayIwJLG8AfDJfkTPtVJezaFT4Y0JjYkO7anxm6KMKQ==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.0.7_1787133408990_0.9622865305001285","host":"s3://npm-registry-packages-npm-production"}},"2.0.8":{"name":"cc-safety-net","version":"2.0.8","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.0.8","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"6519217e3e1f35832bcb8915800d7ba1dac16edb","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.0.8.tgz","fileCount":15,"integrity":"sha512-18tQ/KiN1X7F7XxVEX3Hy67wWkjCdoxTmzOjYkQz9EnzUwwyCcmjzpmhBBdQSNpj5qCTTWa/IbFgPDFLki9y7w==","signatures":[{"sig":"MEUCIHA8bVux7wi3xvYgckmZxQ55EeVilyUJ4PrGvtsRyvxwAiEA17R4c5Nfy3H4e8tYlp9cNvvE1VXWIa73KuM+b1Q2iVg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.0.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1767888},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.0.8.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"299f19c8c0c8f59cc332a2d58c272138fe368e81","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.0.8.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-18tQ/KiN1X7F7XxVEX3Hy67wWkjCdoxTmzOjYkQz9EnzUwwyCcmjzpmhBBdQSNpj5qCTTWa/IbFgPDFLki9y7w==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.0.8_1787205077035_0.5088645956281392","host":"s3://npm-registry-packages-npm-production"}},"2.0.9":{"name":"cc-safety-net","version":"2.0.9","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.0.9","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"7c886ae8a5ae71b981c3bb5520812c17f90b2ba1","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.0.9.tgz","fileCount":15,"integrity":"sha512-HDjzsMMEvny51ZylEFED6Nuep5Yg6Pn4T7ENWtfYt0up6FsV9WgeSBzPFM3fhoL4FxvxBGhHyzkD4ctvzqn7RA==","signatures":[{"sig":"MEUCICjtrgDN1P8504PdqoMBv6ZeM58OAiNmeW3sFzod7djfAiEA7JtzrTypHGQ3uu/kiRIDquZQcw9erBOYtT9ryL2iFgE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.0.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1743190},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.0.9.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"5c1437f15ec7f797073885484a2ee67c89e8cc5f","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.0.9.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-HDjzsMMEvny51ZylEFED6Nuep5Yg6Pn4T7ENWtfYt0up6FsV9WgeSBzPFM3fhoL4FxvxBGhHyzkD4ctvzqn7RA==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.0.9_1787295380181_0.6276502616185948","host":"s3://npm-registry-packages-npm-production"}},"2.0.10":{"name":"cc-safety-net","version":"2.0.10","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.0.10","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"8fdea2e848c9a5027d81c49d7e78104889c517c0","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.0.10.tgz","fileCount":15,"integrity":"sha512-4Zdnax2sGb449P3H9ufJrt0UK4Xwp4DXGPuYYHfyCtUQm+z3HWJQqsNjsGqFeqRRCIthQYqJaMUDTBjfgKwbYQ==","signatures":[{"sig":"MEUCIQDOx6WdwrIk6RR7rLsQOG2UqU3RCfkyXrASpnMj7GJfDgIgDTjHeingQsC11tRfWyjuEcZowEReHJlz/g5qQP+GyBQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.0.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1743347},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.0.10.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"065f660453bcb37ca4ef271c0704673d5ae8915a","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.0.10.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-4Zdnax2sGb449P3H9ufJrt0UK4Xwp4DXGPuYYHfyCtUQm+z3HWJQqsNjsGqFeqRRCIthQYqJaMUDTBjfgKwbYQ==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.0.10_1787301914605_0.6073025028775854","host":"s3://npm-registry-packages-npm-production"}},"2.0.11":{"name":"cc-safety-net","version":"2.0.11","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.0.11","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"9c8c23549c81bda9b5082e7aa2c8ecf2ea026ad1","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.0.11.tgz","fileCount":15,"integrity":"sha512-lpK3cAn7REkzZhLuV/ZvGelFP6uuq6q0qEJTuuUwuCdlmA9N3j3QSQsIip/sK/6yvZswjG9O8pCH4VF9tv54Aw==","signatures":[{"sig":"MEQCICoH78iAX3U/DGobjfOAM4ttuxnQg+msQKUcsTgHRsIMAiBmtygYnbWwwNiqy+l8UrxIPGCxF9ijQmhBInEmfHCXBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.0.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1746248},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.0.11.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"be15d0d9d952bac3ea68d9358099ce59cb9e7f00","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.0.11.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-lpK3cAn7REkzZhLuV/ZvGelFP6uuq6q0qEJTuuUwuCdlmA9N3j3QSQsIip/sK/6yvZswjG9O8pCH4VF9tv54Aw==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.0.11_1787499955360_0.8323013256523548","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"cc-safety-net","version":"2.1.0","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.1.0","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"d1748dc7f261e9ba33268aa5925b08a986e9d6d2","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.1.0.tgz","fileCount":18,"integrity":"sha512-2ly0GfKyI9UE04JZH4EF9O6iTXg9dr+s5nlYPOHTm4M3gRw3eyPVtsr7pOKzEFwK+rcEwIu40kzVTpVHwRnxWA==","signatures":[{"sig":"MEUCIQD3fmzCz6/4u9zql5UDAUhOSJ6+lmt5erjL+5ZXUHiYdwIgVHji/pTkJoar38S4tkQAiq1SdS5/0eCFJY+QBy5pa5U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1750099},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.1.0.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","import":"./dist/api.js"},"./package.json":"./package.json"},"gitHead":"26d5803abf011ec7f674c27bdc97991bd1e627bf","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.1.0.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-2ly0GfKyI9UE04JZH4EF9O6iTXg9dr+s5nlYPOHTm4M3gRw3eyPVtsr7pOKzEFwK+rcEwIu40kzVTpVHwRnxWA==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.1.0_1787555058249_0.9101934847024633","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"cc-safety-net","version":"2.1.1","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.1.1","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"2ee7c6dacd93530ce8623a59ffc7465b22eb282a","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.1.1.tgz","fileCount":18,"integrity":"sha512-jO8xPzLDQaL+n1DT9DmfgyX2Vt6tY1DhjGB8OSi8ZQWXLIxjZhAuqVAescOXEgmsVL/VKSovU404toDxViSB4Q==","signatures":[{"sig":"MEQCIEZVSdYs7ek+sEll3gimRTGmIEhx8WUdEbsN0stNjE0XAiAV0OkC2WolYGEtHiWsomtkWYbVkpoMn7CE5GXKJYl2aA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1751054},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.1.1.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","import":"./dist/api.js"},"./package.json":"./package.json"},"gitHead":"b29fa191843e4820e6a095eec0cd87361b0b2099","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.1.1.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-jO8xPzLDQaL+n1DT9DmfgyX2Vt6tY1DhjGB8OSi8ZQWXLIxjZhAuqVAescOXEgmsVL/VKSovU404toDxViSB4Q==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.1.1_1787576080039_0.40615264178574373","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"cc-safety-net","version":"2.2.0","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp","grok","grok-build"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.2.0","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"4ddea14687f3bf3514f9919b9b30b4dbbdbb8917","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.2.0.tgz","fileCount":18,"integrity":"sha512-+1QnKZ4VnSWq/QzehrMYa37oUp3BMlzPFQff6FUKIbvReq6BgPFQTsRnPugddzrZcD5T8ttYroIu10feuYm99A==","signatures":[{"sig":"MEUCIHrg4SwMYcOtYlRSgEHTLNHFWEvqsWHjLHLu+SqoZcLPAiEA4Q7XPfBGvyLL2uIYOivocItQNSyFE8bv+RG9PrJNLio=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1759042},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.2.0.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","import":"./dist/api.js"},"./package.json":"./package.json"},"gitHead":"8e3bd08ecfd751e36162f300f3f3cb87efd4c6d2","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.2.0.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-+1QnKZ4VnSWq/QzehrMYa37oUp3BMlzPFQff6FUKIbvReq6BgPFQTsRnPugddzrZcD5T8ttYroIu10feuYm99A==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.2.0_1787635982041_0.39854038707686645","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"cc-safety-net","version":"2.2.1","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp","grok","grok-build"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.2.1","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"77c70a234f6776ba086d216452d01b0aee836f2e","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.2.1.tgz","fileCount":18,"integrity":"sha512-bh+pJnxB6PrTfh+jfDIYIIajTDVey7KcFiAbaWN5Y4Bzrj8M9F6ulFlINI9pi8j2/glU/rRuiZ9J5ICItInjDQ==","signatures":[{"sig":"MEUCIQCoiAIEeV6fYQ6hvavZF2EOOOz+ATuiwJdU4YNQPd1ZjQIgCkB+wnPUCcCsOUPnBfTeQTUNgNvlkXhSDAW/aY9+uIc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1759414},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.2.1.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","import":"./dist/api.js"},"./package.json":"./package.json"},"gitHead":"54e33f6d6f4257b10392d799250271958d8d3c8b","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.2.1.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-bh+pJnxB6PrTfh+jfDIYIIajTDVey7KcFiAbaWN5Y4Bzrj8M9F6ulFlINI9pi8j2/glU/rRuiZ9J5ICItInjDQ==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.2.1_1787660874270_0.19339329825488583","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"cc-safety-net","version":"2.2.2","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp","grok","grok-build"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.2.2","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"1bfbdb7e96e0faca8a743a05b00aacdcdc903c03","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.2.2.tgz","fileCount":18,"integrity":"sha512-aZ893BibTAz9wUqt5XrqdA7hY/XlOd5Jdd/0hjmha7MviDg/fIcAgzod9NkuyMuUDMyW85YPyUp9soK7ofE74g==","signatures":[{"sig":"MEUCIGoZaQcZpfDV1OTqC4Ly+HsJe/WnU31tBQv7dwisO9EuAiEAkpuyzHLFmaIAdRe+6od9r7VTS6ZYUjCbFXm5jZeheKI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1756524},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.2.2.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","import":"./dist/api.js"},"./package.json":"./package.json"},"gitHead":"1bc02194c293b72c06a6530fe7129704b5b2051d","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.2.2.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-aZ893BibTAz9wUqt5XrqdA7hY/XlOd5Jdd/0hjmha7MviDg/fIcAgzod9NkuyMuUDMyW85YPyUp9soK7ofE74g==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.2.2_1787672119078_0.8622236012566178","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"cc-safety-net","version":"2.3.0","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp","grok","grok-build"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.3.0","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"6e4ce4597799f23fcd374e744cbe39281b035f9e","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.3.0.tgz","fileCount":18,"integrity":"sha512-RTrufAlyCpwxalesC9fV8Cy7GsDFKHz+gre158viXC49Aqexu4Tuqv4F01UUsmpLyG32lgvMD9k5tG3C0/FKKA==","signatures":[{"sig":"MEQCIB0Qb6EJ3Tu6C974n2IuXkMLWgAWDjvMW3jqZZFAzeqBAiBN6s9w5UAUDuCLq1nPYC1d5X38s5ZboNYAbzbpYoLpFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1824786},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.3.0.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","import":"./dist/api.js"},"./package.json":"./package.json"},"gitHead":"5837fd3f459b021a7ba92bee3b60c369efb04612","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.3.0.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-RTrufAlyCpwxalesC9fV8Cy7GsDFKHz+gre158viXC49Aqexu4Tuqv4F01UUsmpLyG32lgvMD9k5tG3C0/FKKA==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.3.0_1788155264120_0.04977391346099047","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"cc-safety-net","version":"2.3.1","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp","grok","grok-build"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.3.1","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"3bd348c8be790a8df5cc9e67167cf277e37b4be8","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.3.1.tgz","fileCount":18,"integrity":"sha512-APDo+ntOURSqRVFcb26HDyq7aEIpl9sBiFhXSd6iyoNp167p18S4xFS3FlbHbIK77jijFEuUhpgxa/3paSuGdQ==","signatures":[{"sig":"MEUCIBNemO1qFG5pdPjaA6HA2xb0xmJ2h3zWS4pIfaATuSwmAiEA/wKT2RVgukM91BzDrph5BIpn54JquCsIPzc85S+TROg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1829250},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.3.1.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","import":"./dist/api.js"},"./package.json":"./package.json"},"gitHead":"3e171d6a27838fe5b8e1d21ac8eeea16c68c2790","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.3.1.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-APDo+ntOURSqRVFcb26HDyq7aEIpl9sBiFhXSd6iyoNp167p18S4xFS3FlbHbIK77jijFEuUhpgxa/3paSuGdQ==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.3.1_1788260721373_0.24841763402176986","host":"s3://npm-registry-packages-npm-production"}},"2.3.2":{"name":"cc-safety-net","version":"2.3.2","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp","grok","grok-build"],"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","_id":"cc-safety-net@2.3.2","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"homepage":"https://ccsafetynet.com","bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"pi":{"extensions":["./dist/pi/index.js"]},"bin":{"ccsn":"dist/bin/cc-safety-net.js","cc-safety-net":"dist/bin/cc-safety-net.js"},"dist":{"shasum":"15e0658d12b283ba9c4cc3894b7a98557030f9ff","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.3.2.tgz","fileCount":18,"integrity":"sha512-VY9TxnXlapKMlDDUz4udRu8AUHb/llDtAzlhym9YbUiiifyyXI92nLbzkI9hXuAHd3K39N6NkSJQ7bnSPp1X3A==","signatures":[{"sig":"MEUCIQCP/GMnHwKnnsZhm+RVoFXjrGqTSqjEsl4GmlAFk0joFwIgHyJVd9zCNP1Cuv6MSADqeL7Pq4Q2knv7FpHomykntb4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1829754},"main":"dist/index.js","type":"module","_from":"file:cc-safety-net-2.3.2.tgz","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","import":"./dist/api.js"},"./package.json":"./package.json"},"gitHead":"775de25611e01205acf579b00a4d34f53b2908be","scripts":{"knip":"knip-bun --production","lint":"biome check --write","test":"bun test","build":"bun run clean && bun run scripts/build.ts","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","clean":"rm -rf dist","lint:ci":"biome ci .","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","test:e2e":"bun test tests/e2e","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","cc-safety-net":"bun run src/cli/cc-safety-net.ts","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","verify:package":"bun run scripts/verify-package.ts","verify:coverage":"bun run scripts/verify-coverage.ts","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","audit:dependencies":"bun audit","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.3.2.tgz","overrides":{"yaml":"^2.9.0","js-yaml":"^4.3.1","smol-toml":"^1.7.0","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5"},"_integrity":"sha512-VY9TxnXlapKMlDDUz4udRu8AUHb/llDtAzlhym9YbUiiifyyXI92nLbzkI9hXuAHd3K39N6NkSJQ7bnSPp1X3A==","repository":{"url":"git+https://github.com/kenryu42/cc-safety-net.git","type":"git"},"_npmVersion":"11.5.1","description":"A coding agent CLI hook - block destructive commands and secret file access","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.3.5"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"knip":"^6.32.0","jscpd":"^5.0.14","lefthook":"^2.1.10","@types/bun":"latest","typescript":"7.0.2","@biomejs/biome":"2.3.10","@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@opencode-ai/plugin":"^1.18.3"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cc-safety-net_2.3.2_1788448978367_0.20337437163198913","host":"s3://npm-registry-packages-npm-production"}},"2.3.3":{"name":"cc-safety-net","version":"2.3.3","description":"A coding agent CLI hook - block destructive commands and secret file access","main":"dist/index.js","types":"dist/index.d.ts","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api":{"types":"./dist/api.d.ts","import":"./dist/api.js"},"./package.json":"./package.json"},"bin":{"cc-safety-net":"dist/bin/cc-safety-net.js","ccsn":"dist/bin/cc-safety-net.js"},"scripts":{"audit:dependencies":"bun audit","build":"bun run clean && bun run scripts/build.ts","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly --declaration","build:schema":"bun run scripts/build-schema.ts","verify:package":"bun run scripts/verify-package.ts","verify:repository-plugin":"bun run scripts/verify-repository-plugin.ts","verify:coverage":"bun run scripts/verify-coverage.ts","clean":"rm -rf dist","check":"bun run lint && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","check:ci":"bun run lint:ci && bun run typecheck && bun run knip && bun run check-duplicates && bun run test:coverage && bun run verify:coverage","lint":"biome check --write","lint:ci":"biome ci .","typecheck":"tsc --noEmit && tsc -p tsconfig.gui.json --noEmit","knip":"knip-bun --production","check-duplicates":"bunx jscpd src tests --no-tips --exit-code 1 --reporters ai --ignore '**/*.svg'","test":"bun test","test:e2e":"bun test tests/e2e","test:e2e:stability":"bun test tests/e2e --randomize --rerun-each 3","test:e2e:live":"CC_SAFETY_NET_E2E_LIVE=1 bun test tests/e2e-live","test:coverage":"AGENT=1 bun test tests --path-ignore-patterns 'tests/e2e-live/**' --coverage --coverage-reporter=text --coverage-reporter=lcov","cc-safety-net":"bun run src/cli/cc-safety-net.ts"},"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/kenryu42/cc-safety-net.git"},"bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"homepage":"https://ccsafetynet.com","devDependencies":{"@ampcode/plugin":"0.0.0-20260724002649-ga3413e7","@biomejs/biome":"2.3.10","@opencode-ai/plugin":"^1.18.3","@types/bun":"latest","jscpd":"^5.0.14","knip":"^6.32.0","lefthook":"^2.1.10","typescript":"7.0.2"},"peerDependencies":{"@opencode-ai/plugin":"^1.18.3"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"pi":{"extensions":["./dist/pi/index.js"]},"dependencies":{"zod":"4.3.5"},"overrides":{"js-yaml":"^4.3.1","picomatch@^2.3.1":"2.3.2","picomatch@^4.0.1":"^4.0.5","smol-toml":"^1.7.0","yaml":"^2.9.0"},"engines":{"node":">=18"},"packageManager":"bun@1.4.0","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp","grok","grok-build"],"gitHead":"329a2fa04408064a5a8776db525c624a03616ff6","_id":"cc-safety-net@2.3.3","_integrity":"sha512-Bmqfd1nqsB0sj5Dof0LG/FZufG6QGs5A7yF1mf2BhTOGhbtBcMIrJo3k9qRzU3NDvfzlvBOe66L8BkU7p47moQ==","_resolved":"/home/runner/work/cc-safety-net/cc-safety-net/package-output/cc-safety-net-2.3.3.tgz","_from":"file:cc-safety-net-2.3.3.tgz","_nodeVersion":"24.20.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-Bmqfd1nqsB0sj5Dof0LG/FZufG6QGs5A7yF1mf2BhTOGhbtBcMIrJo3k9qRzU3NDvfzlvBOe66L8BkU7p47moQ==","shasum":"abd1ebfd6e4a19dd8041558afaad0fedf023afe8","tarball":"https://registry.npmjs.org/cc-safety-net/-/cc-safety-net-2.3.3.tgz","fileCount":18,"unpackedSize":1831205,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cc-safety-net@2.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCX5YK+k1oajUqj0PkNDnKJmSLi782R7sE1z7Eb0W/lYQIgHgtlKUk80qwJpTC7dNCcdpEE+O7jD5z/5jD2mrgQLeI="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b55914a5-15df-429b-ae1d-e181b9558f95"}},"directories":{},"maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cc-safety-net_2.3.3_1788542444422_0.5188023675976687"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-03T13:04:57.694Z","modified":"2026-09-04T17:20:44.906Z","0.0.1":"2026-01-03T13:04:57.826Z","0.4.0":"2026-01-07T11:15:16.006Z","0.4.1":"2026-01-08T17:35:27.174Z","0.5.0":"2026-01-10T18:45:43.077Z","0.5.1":"2026-01-11T17:59:51.053Z","0.6.0":"2026-01-15T17:05:44.419Z","0.6.1":"2026-01-19T09:25:26.819Z","0.6.2":"2026-01-19T09:38:50.121Z","0.7.0":"2026-01-23T19:08:38.042Z","0.7.1":"2026-01-25T15:04:21.472Z","0.8.0":"2026-03-21T04:44:53.937Z","0.8.1":"2026-03-24T15:14:41.988Z","0.8.2":"2026-03-25T06:04:47.516Z","0.9.0":"2026-05-07T02:15:58.167Z","1.0.0":"2026-06-05T10:41:44.992Z","1.0.1":"2026-06-05T15:34:15.498Z","1.0.2":"2026-06-12T07:23:50.698Z","1.0.3":"2026-06-13T07:26:50.903Z","1.0.4":"2026-06-14T09:17:58.974Z","1.0.5":"2026-06-14T16:07:25.544Z","1.0.6":"2026-06-15T17:00:54.743Z","2.0.0":"2026-08-10T01:23:33.597Z","2.0.1":"2026-08-10T06:38:18.290Z","2.0.3":"2026-08-12T02:36:38.839Z","2.0.4":"2026-08-14T03:59:04.627Z","2.0.5":"2026-08-14T16:18:44.994Z","2.0.6":"2026-08-17T07:07:23.022Z","2.0.7":"2026-08-19T09:56:49.152Z","2.0.8":"2026-08-20T05:51:17.209Z","2.0.9":"2026-08-21T06:56:20.337Z","2.0.10":"2026-08-21T08:45:14.771Z","2.0.11":"2026-08-23T15:45:55.511Z","2.1.0":"2026-08-24T07:04:18.407Z","2.1.1":"2026-08-24T12:54:40.201Z","2.2.0":"2026-08-25T05:33:02.228Z","2.2.1":"2026-08-25T12:27:54.415Z","2.2.2":"2026-08-25T15:35:19.236Z","2.3.0":"2026-08-31T05:47:44.269Z","2.3.1":"2026-09-01T11:05:21.535Z","2.3.2":"2026-09-03T15:22:58.533Z","2.3.3":"2026-09-04T17:20:44.577Z"},"bugs":{"url":"https://github.com/kenryu42/cc-safety-net/issues"},"author":{"name":"J Liew","email":"jliew@420024lab.com"},"license":"MIT","homepage":"https://ccsafetynet.com","keywords":["claude-code","opencode","safety","plugin","security","pi-package","cursor","amp","grok","grok-build"],"repository":{"type":"git","url":"git+https://github.com/kenryu42/cc-safety-net.git"},"description":"A coding agent CLI hook - block destructive commands and secret file access","maintainers":[{"name":"kenryu","email":"jliew@420024lab.com"}],"readme":"<h1>\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"./.github/assets/cc-safety-net-header-logo-dark.svg\">\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"./.github/assets/cc-safety-net-header-logo-light.svg\">\n    <img alt=\"CC Safety Net\" src=\"./.github/assets/cc-safety-net-header-logo-light.svg\">\n  </picture>\n</h1>\n\n[![CI](https://github.com/kenryu42/cc-safety-net/actions/workflows/ci.yml/badge.svg)](https://github.com/kenryu42/cc-safety-net/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/github/kenryu42/cc-safety-net/branch/main/graph/badge.svg?token=C9QTION6ZF)](https://codecov.io/github/kenryu42/cc-safety-net)\n[![Version](https://img.shields.io/github/v/tag/kenryu42/cc-safety-net?label=version&color=blue)](https://github.com/kenryu42/cc-safety-net)\n[![License: MIT](https://img.shields.io/badge/License-MIT-red.svg)](https://opensource.org/licenses/MIT)\n\n<div align=\"center\">\n\n**English** · [简体中文](https://ccsafetynet.com/docs/zh-Hans) · [日本語](https://ccsafetynet.com/docs/ja)\n\n[![CC Safety Net](./.github/assets/cc-safety-net-v2.png)](./.github/assets/cc-safety-net-v2.png)\n\n</div>\n\nCC Safety Net (Coding CLI Safety Net) blocks destructive commands and access to secrets such as SSH keys and `.env` files before the tool call runs. It parses what the command does. Wrapping the command or reordering flags does not hide it. A broken config file never blocks anything.\n\n> [!NOTE]\n> **[Full documentation →](https://ccsafetynet.com/docs)** covers installation, configuration, reference material, guides, and the security model. This README is the short version.\n\n## Supported coding CLIs\n\nCC Safety Net supports the coding agent CLIs below on Windows, macOS, and Linux. Automated tests cover the analyzer and some Windows integrations. Windows support for the remaining CLIs is best effort and has not been tested.\n\n<table align=\"center\">\n  <tr>\n    <td align=\"center\"><a href=\"https://ccsafetynet.com/docs/installation#amp-code-installation\"><picture><source media=\"(prefers-color-scheme: dark)\" srcset=\"./.github/assets/amp-dark.svg\"><img alt=\"Amp Code\" src=\"./.github/assets/amp-light.svg\" height=\"32\"></picture><br>Amp Code</a></td>\n    <td align=\"center\"><a href=\"https://ccsafetynet.com/docs/installation#antigravity-cli-installation\"><img alt=\"Antigravity CLI\" src=\"./.github/assets/antigravity-cli.png\" height=\"32\"><br>Antigravity CLI</a></td>\n    <td align=\"center\"><a href=\"https://ccsafetynet.com/docs/installation#claude-code-installation\"><img alt=\"Claude Code\" src=\"./.github/assets/claude-code.svg\" height=\"32\"><br>Claude Code</a></td>\n    <td align=\"center\"><a href=\"https://ccsafetynet.com/docs/installation#codex-installation\"><img alt=\"Codex\" src=\"./.github/assets/codex.svg\" height=\"32\"><br>Codex</a></td>\n    <td align=\"center\"><a href=\"https://ccsafetynet.com/docs/installation#cursor-installation\"><picture><source media=\"(prefers-color-scheme: dark)\" srcset=\"./.github/assets/cursor-dark.svg\"><img alt=\"Cursor\" src=\"./.github/assets/cursor-light.svg\" height=\"32\"></picture><br>Cursor</a></td>\n  </tr>\n  <tr>\n    <td align=\"center\"><a href=\"https://ccsafetynet.com/docs/installation#gemini-cli-installation\"><img alt=\"Gemini CLI\" src=\"./.github/assets/gemini-cli.svg\" height=\"32\"><br>Gemini CLI</a></td>\n    <td align=\"center\"><a href=\"https://ccsafetynet.com/docs/installation#github-copilot-cli-installation\"><picture><source media=\"(prefers-color-scheme: dark)\" srcset=\"./.github/assets/copilot-cli-dark.svg\"><img alt=\"GitHub Copilot CLI\" src=\"./.github/assets/copilot-cli-light.svg\" height=\"32\"></picture><br>GitHub Copilot CLI</a></td>\n    <td align=\"center\"><a href=\"https://ccsafetynet.com/docs/installation#grok-build-installation\"><picture><source media=\"(prefers-color-scheme: dark)\" srcset=\"./.github/assets/grok-build-dark.svg\"><img alt=\"Grok Build\" src=\"./.github/assets/grok-build-light.svg\" height=\"32\"></picture><br>Grok Build</a></td>\n    <td align=\"center\"><a href=\"https://ccsafetynet.com/docs/installation#hermes-agent-installation\"><img alt=\"Hermes Agent\" src=\"./.github/assets/hermes.png\" height=\"32\"><br>Hermes Agent</a></td>\n    <td align=\"center\"><a href=\"https://ccsafetynet.com/docs/installation#kimi-code-installation\"><img alt=\"Kimi Code\" src=\"./.github/assets/kimi-cli.png\" height=\"32\"><br>Kimi Code</a></td>\n  </tr>\n  <tr>\n    <td align=\"center\"><a href=\"https://ccsafetynet.com/docs/installation#openclaw-installation\"><img alt=\"OpenClaw\" src=\"./.github/assets/openclaw.png\" height=\"32\"><br>OpenClaw</a></td>\n    <td align=\"center\"><a href=\"https://ccsafetynet.com/docs/installation#opencode-installation\"><picture><source media=\"(prefers-color-scheme: dark)\" srcset=\"./.github/assets/opencode-dark.svg\"><img alt=\"OpenCode\" src=\"./.github/assets/opencode-light.svg\" height=\"32\"></picture><br>OpenCode</a></td>\n    <td align=\"center\"><a href=\"https://ccsafetynet.com/docs/installation#pi-installation\"><picture><source media=\"(prefers-color-scheme: dark)\" srcset=\"./.github/assets/pi-dark.svg\"><img alt=\"Pi\" src=\"./.github/assets/pi-light.svg\" height=\"32\"></picture><br>Pi</a></td>\n  </tr>\n</table>\n\nAmp documents macOS, Linux, and WSL, but not native Windows.\n\n## Features\n\n- **Blocks destructive commands.** `git reset --hard`, `git push --force`, `rm -rf` on dangerous targets, `find -delete`, and PowerShell `Remove-Item`. The hook still blocks the same command inside `bash -c` or `python -c`. A sandbox still allows `git reset --hard` inside your project. See [vs Sandboxing](https://ccsafetynet.com/docs/guides/vs-sandboxing).\n- **Blocks secret access.** SSH keys, `.env` files, `~/.aws`, and the credential files coding CLIs keep. The rules cover the shell and the agent's read, edit, write, and search tools. Blocking a CLI's own settings files is optional. It stays off until you turn it on.\n- **Customize the rules in a GUI.** Run `npx cc-safety-net gui` and open Policy. Turn individual block and secret rules off. Add paths to allow or deny. You cannot turn off the rules that catch wiping `/` or `~`.\n- **Adds blocks through rulebooks.** Official packs for Terraform, AWS, gcloud, and Azure, or JSON you write yourself. A rulebook can only add blocks. It cannot turn built-in protection off. The packs live in [cc-safety-net/rulebooks](https://github.com/cc-safety-net/rulebooks). Install a pack with:\n\n  ```bash\n  npx -y cc-safety-net rule add --only terraform aws --global\n  ```\n\n  See [Official Rulebooks](https://ccsafetynet.com/docs/configuration/rulebooks).\n- **Shares policy through git.** Commit `.cc-safety-net/` so clones and cloud sessions pick up the same rules. If a project file tries to loosen a member's stricter settings, `status` and `doctor` report it. `policy apply` asks for confirmation in a terminal. Copying the folder is not enough. The hook still has to be installed. See [Team Setup](https://ccsafetynet.com/docs/guides/team-setup) and [Cloud Environments](https://ccsafetynet.com/docs/guides/cloud-environments).\n- **Embeds in your own tools.** Install the npm package and call `checkCommand` to get allow or deny from your own code. No hook required. See [Library API](#library-api).\n\nFull rule catalogs: [Blocked Commands](https://ccsafetynet.com/docs/reference/blocked-commands) · [Allowed Commands](https://ccsafetynet.com/docs/reference/allowed-commands) · [Secret Protection](https://ccsafetynet.com/docs/reference/secret-protection).\n\n## Quick start\n\nYou need Node.js 18 or higher.\n\nTo install into the coding CLIs on this machine, run:\n\n```bash\nnpx -y cc-safety-net@latest install\n```\n\nTo update every installed integration:\n\n```bash\nnpx -y cc-safety-net@latest update\n```\n\nKeep the `@latest` qualifier. A bare `cc-safety-net` spec can run an older copy from the npx cache. To uninstall, run `npx -y cc-safety-net uninstall`. `npm install -g cc-safety-net` also installs the `ccsn` alias.\n\n## Safety presets\n\nTo set a preset, run `npx cc-safety-net gui` and open Policy.\n\n| Preset | Effect |\n|---|---|\n| Standard | Blocks recognizable destructive Git and filesystem commands. Allows metadata-only checks of built-in sensitive paths while continuing to block content access. Recommended for normal coding. |\n| Strict | Standard, plus blocks dynamic or unparseable commands the analyzer cannot verify safely. Also blocks metadata-only discovery of built-in sensitive paths. Occasional false positives on advanced shell. |\n| Paranoid | Strict, plus blocks `rm -rf` inside your project and interpreter one-liners. Expect friction; for untrusted agents or high-stakes repos. |\n\nLinked-worktree mode relaxes only local discard. See [Modes](https://ccsafetynet.com/docs/configuration/modes).\n\n## Diagnostics\n\n```bash\n# Summarize what is being enforced right now\nnpx cc-safety-net status\n# Verify your installation and run a self-test\nnpx cc-safety-net doctor\n# Trace how a command is analyzed step-by-step\nnpx cc-safety-net explain \"git reset --hard\"\n# Browse recorded denials from the audit trail (add --all to include allowed commands)\nnpx cc-safety-net logs\n# Review what was blocked and edit your policy in a local web GUI\nnpx cc-safety-net gui\n```\n\n`doctor`, `explain`, and `logs` support `--json` for machine-readable output. The audit trail stays on your machine. It records command decisions, but it does not record command output or prompts.\n\nDetails: [CLI Commands](https://ccsafetynet.com/docs/reference/cli-commands) · [Explain Trace](https://ccsafetynet.com/docs/reference/explain-trace) · [Audit Log](https://ccsafetynet.com/docs/reference/audit-log) · [Dashboard](https://ccsafetynet.com/docs/guides/dashboard) · [Configuration Recovery](https://ccsafetynet.com/docs/configuration/recovery).\n\n## Limitations\n\nCC Safety Net denies a tool call before it runs. It does not set filesystem permissions, watch network egress, or contain a process.\n\nThe policy and secret-path extractors are mostly POSIX. For PowerShell they resolve a home prefix (`$HOME`, `$env:USERPROFILE`, `$env:HOME`, or `~`) joined to a literal suffix with `\\` or `/`. The same check applies to `Get-Content`, `Set-Content`, `Add-Content`, `Copy-Item`, `Move-Item`, `Remove-Item`, and their aliases. `Get-Content $HOME\\.ssh\\id_rsa` is denied. A path built by concatenation, a subexpression, or `Join-Path` is not.\n\nPolicy-file protection matches exact paths. It does not emulate commands. Use OS permissions or a sandbox when you need that.\n\nCodex has one integration-specific limit. Its unified exec path is the default on macOS and Linux. It sends a hook payload when a command starts a session, but it sends none for `write_stdin`. CC Safety Net can inspect and audit the command that opens the session. It cannot inspect or audit text that the model types into the running session. Codex emits no event for that call, so an adapter change cannot close this gap.\n\n[SECURITY.md](SECURITY.md) contains the full residual-risk registry. [Known Limitations](https://ccsafetynet.com/docs/guides/known-limitations) explains what those risks mean in practice.\n\n## Upgrading from an older version\n\nRun the `update` command from [Quick start](#quick-start) to upgrade every installed integration to the current release.\n\nIf you installed rulebooks from GitHub on version 2.2 or earlier, run `npx -y cc-safety-net rule sync` once per scope after upgrading. Add `--global` for user-scope sources. Rulebooks are now live files in your config. The command copies each cached rulebook into that location and removes the leftovers. Until you run it, those GitHub-sourced rules are inactive. `status` and `doctor` report the degraded sources.\n\n> [!WARNING]\n> If you defined custom rules in a legacy inline config such as `.safety-net.json` or `~/.cc-safety-net/config.json`, CC Safety Net no longer loads those files at runtime. Their rules enforce nothing. Normal use does not show this failure because the commands now run. Run `npx -y cc-safety-net rule migrate` to convert the rules to the rulebook layout. Then run `npx -y cc-safety-net doctor` and confirm that the runtime is `ready`. See the [migration guide](https://ccsafetynet.com/docs/configuration/custom-rules#migrate-legacy-configuration).\n\n## Full documentation\n\nThe **[ccsafetynet.com/docs](https://ccsafetynet.com/docs)** site contains the full documentation:\n\n| Area | Pages |\n|---|---|\n| Get started | [Introduction](https://ccsafetynet.com/docs/introduction) · [Installation](https://ccsafetynet.com/docs/installation) · [Quickstart](https://ccsafetynet.com/docs/quickstart) · [Team Setup](https://ccsafetynet.com/docs/guides/team-setup) · [Cloud Environments](https://ccsafetynet.com/docs/guides/cloud-environments) · [How It Works](https://ccsafetynet.com/docs/guides/how-it-works) · [Dashboard](https://ccsafetynet.com/docs/guides/dashboard) |\n| Configuration | [Modes](https://ccsafetynet.com/docs/configuration/modes) · [Policy](https://ccsafetynet.com/docs/configuration/policy) · [Environment](https://ccsafetynet.com/docs/configuration/environment) · [Custom Rules](https://ccsafetynet.com/docs/configuration/custom-rules) · [Official Rulebooks](https://ccsafetynet.com/docs/configuration/rulebooks) · [Status Line](https://ccsafetynet.com/docs/configuration/status-line) · [Configuration Recovery](https://ccsafetynet.com/docs/configuration/recovery) |\n| Reference | [Blocked Commands](https://ccsafetynet.com/docs/reference/blocked-commands) · [Allowed Commands](https://ccsafetynet.com/docs/reference/allowed-commands) · [Secret Protection](https://ccsafetynet.com/docs/reference/secret-protection) · [Audit Log](https://ccsafetynet.com/docs/reference/audit-log) · [CLI Commands](https://ccsafetynet.com/docs/reference/cli-commands) · [Explain Trace](https://ccsafetynet.com/docs/reference/explain-trace) · [Glossary](https://ccsafetynet.com/docs/reference/glossary) |\n| Guides | [Architecture](https://ccsafetynet.com/docs/guides/architecture) · [Analysis Engine](https://ccsafetynet.com/docs/guides/analysis-engine) · [Design Principles](https://ccsafetynet.com/docs/guides/design-principles) · [Security Model](https://ccsafetynet.com/docs/guides/security-model) · [vs Sandboxing](https://ccsafetynet.com/docs/guides/vs-sandboxing) · [Integration Architecture](https://ccsafetynet.com/docs/guides/integration-architecture) · [Embedding](https://ccsafetynet.com/docs/guides/embedding) · [Known Limitations](https://ccsafetynet.com/docs/guides/known-limitations) · [Troubleshooting](https://ccsafetynet.com/docs/guides/troubleshooting) |\n| Project | [Contributing](https://ccsafetynet.com/docs/contributing) · [Security Policy](https://ccsafetynet.com/docs/security) |\n\n## The cc-safety-net skill\n\nThe skill is the operating manual for CC Safety Net. Ask it anything about the tool: why a command was blocked, whether a block was wrong, how to write or migrate custom rules, how to change the policy or safety level, how to install or remove an integration, or whether protection is working at all. When the CLI output cannot settle a question, it reads the source of the installed version and answers from that.\n\n```text\n/cc-safety-net why was my last git command blocked\n/cc-safety-net block terraform destroy in this repo\n/cc-safety-net is secret protection active in Codex?\n```\n\nThe command ships with the Claude Code and Codex plugins and is built into the OpenCode and Pi integrations. The skill loads only when you invoke it, so it takes no context-window space until you type the command. The agent cannot trigger it on its own.\n\n## Library API\n\nTo check a command from Node.js without installing the hook:\n\n```bash\nnpm install cc-safety-net\n```\n\n```ts\nimport { checkCommand } from 'cc-safety-net/api';\n\nconst result = checkCommand({ command: 'git status', cwd: process.cwd() });\nif (result.kind !== 'allow') {\n  throw new Error(result.reason);\n}\n```\n\n`cwd` must be an absolute directory path. If `checkCommand` throws, do not run the command.\n\nA full example is in [Embedding](https://ccsafetynet.com/docs/guides/embedding).\n\n## Development\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) to contribute to the project.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}