{"_id":"@imbue-ai/detent","_rev":"26-1270257493857305dafaa6080169da50","name":"@imbue-ai/detent","dist-tags":{"latest":"1.15.2"},"versions":{"1.0.1":{"name":"@imbue-ai/detent","version":"1.0.1","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.0.1","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"8cc730bce19b62ce883e87c0b6cbb1f95936ae56","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.0.1.tgz","fileCount":104,"integrity":"sha512-eyWJRZv4xqHr3lnL0fg6N9bRjV2ezgjvlAqb4753K2Uq0catEWfIDxqPgWBUrdW3u/4IgFhWsywoEhkoDieWSw==","signatures":[{"sig":"MEUCIHr0KvBgPUt52DbEAdIMNLd6EGm06FAK0gaWwfbEHi+SAiEA1arefZzQoZz8KX95VYcUwBwBtGjDQTpRNVkEbyLaOTU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":407952},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"c972f9a21118bbb3ebbbfa555a96e8e8ade29193","scripts":{"dev":"tsc --watch","lint":"eslint src tests","test":"vitest run","build":"tsc && cp -r src/patterns/builtin dist/src/patterns/builtin && chmod +x dist/src/cli.js","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","lint:fix":"eslint src tests --fix","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","prepublishOnly":"npm run build"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.6.2","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.0.1_1775808875755_0.036975421926033425","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@imbue-ai/detent","version":"1.0.2","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.0.2","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"96d40ae949ce06c4b9d152498346ca1da1ec8428","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.0.2.tgz","fileCount":117,"integrity":"sha512-4XFxbfyrIXwoDnkRvnvWl7ufX8Gd0BOWwhCRniXMH1wREQ/wrqIyoVzs3G7WU/80lGWn7isvf6WdvojTIZyUgQ==","signatures":[{"sig":"MEUCID/fMsr5voqJPMuhlzkRaR3UVPfV2Bc88Q9gAvSl0jjNAiEA6MluNLYKoIF4YDdjWYITNV2ccfG7NUbpgioQ6mgmkPw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":481196},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"ef09dc7eb09b0073c3c4088de700c65fa88c00a1","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinPatternDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && cp -r src/patterns/builtin dist/src/patterns/builtin && chmod +x dist/src/cli.js","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","lint:fix":"eslint src tests --fix","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","prepublishOnly":"npm run build"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.6.2","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.0.2_1775830387917_0.5752691338849247","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@imbue-ai/detent","version":"1.1.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.1.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"9a8b566f2c385cebbc43b620e5773ab783d87490","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.1.0.tgz","fileCount":117,"integrity":"sha512-DjHxtYslYCaBXSn8GdAD20VJKvTfxTIUNSUInNwfJiz+nfLTIR1uxjY4QLTGGWKVJjEgQxI7B3wQ3PpRYto24Q==","signatures":[{"sig":"MEUCIFpizkIOi59q0ft14zFIqZUZ8LwyIsS/DiL5CWKf3rR2AiEAl5PWE8gSBhQ+3dIrRZ19HoJDno9UKAK7hVW2eoT8dqg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":487840},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"c6913042a72524a826c8d5f8165f46277e24afb1","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && cp -r src/schemas/builtin dist/src/schemas/builtin && chmod +x dist/src/cli.js","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","lint:fix":"eslint src tests --fix","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","prepublishOnly":"npm run build"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.6.2","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.1.0_1776253731991_0.5617126266851775","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@imbue-ai/detent","version":"1.1.1","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.1.1","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"f543948559150e780c8df2ed45b616a5dc7e5f5e","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.1.1.tgz","fileCount":117,"integrity":"sha512-khQb2vHt/ezbok5KTHaBnB+pS553s57cSnPnq4HVpC46VvY5abFi2H0KAXf14zfOovuAM/IaDcvtPn7IIvyKug==","signatures":[{"sig":"MEUCIE+uH3gklVzLSW/WoABGNGGICiC6dB3Ttud6bcE8bJCdAiEA15v8J4dDXshB7MaPoM7pZ4gS7f9sYIRFgQUJR26tebQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":487840},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"836b1b04eb42889b6b8af3851efd1844fa3eb154","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && cp -r src/schemas/builtin dist/src/schemas/builtin && chmod +x dist/src/cli.js","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","lint:fix":"eslint src tests --fix","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","prepublishOnly":"npm run build"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.6.2","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.1.1_1776254268685_0.602783180323055","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@imbue-ai/detent","version":"1.1.2","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.1.2","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"d261004731a684dc8bba9903b2e665023edcbb48","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.1.2.tgz","fileCount":67,"integrity":"sha512-x/f6LLWWsQI48rs8gKJnZUjl1UIN2N/AqLutPWUnxAQksRjB9eM3htf32x/asj0iBbC/pbSN1YA15a/uIhpCHg==","signatures":[{"sig":"MEQCIE3wWobCbix5FyauXrjnh1tAjohCoNRP4y88NHcGsJwdAiAy0Rwgci2VCd9k0mlK55lBTVrB8QjIaKsPsC45Zi8uEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":481679},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"7992e65cbb246f4f8f4fa731f36fc3490dcfcf9a","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.6.2","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.1.2_1776434743283_0.412421093051081","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@imbue-ai/detent","version":"1.1.3","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.1.3","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"c1e96fb846024e445e1b8a4a8f1bb4f5b0021902","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.1.3.tgz","fileCount":67,"integrity":"sha512-gAWIn+C9QZgvtwxSNCM+hipr0mksw/M0FFuJk5fLTzAMu+PXekGFlqDZ4w3MncxALa3JCIG5taT4sYS3Mk7EFg==","signatures":[{"sig":"MEQCIGtZuo2B0Y8NrqVhi6VdQLAbrTF7/MP2mBEQdDLDjN3CAiBQZLlIN6DkCpHYINLgPSXsUJzYLdWL9+Y+vlZbi++f3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":483701},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"ad53e77fe7fb05070718b5f282e5aa0a1eb31f6e","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.6.2","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.1.3_1776675079125_0.21938150451515903","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@imbue-ai/detent","version":"1.1.4","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.1.4","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"dafb1796684741372520f14d98302a5a57a90b48","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.1.4.tgz","fileCount":67,"integrity":"sha512-L1YyVTNZxfApAY8btbvZuYDMdfbz0DKCxf0uTKAjISXZ0Y3UgiUQwMKKZK4LlZDIMSDDCBsojTLhohRlqu/wkA==","signatures":[{"sig":"MEUCIQDjiZh1NdYv4fVCxyQCM/Pfi6vxaVQ8emct1hQ0OrYxsgIgZlvh0VxCOyXsg14bQapukymGiQPOuf4cXab57Bv4yxg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":468850},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"b9a19de8d42f7a8cd6b80f62de9afbf458e26d1c","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.6.2","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","curlconverter":"4.12.0","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.1.4_1776680567271_0.6475210598317369","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@imbue-ai/detent","version":"1.1.5","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.1.5","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"9ffe783374d99c7d0c0f240796a8138110738f2a","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.1.5.tgz","fileCount":121,"integrity":"sha512-xuZaQkRfhz+w7RfIYnEtcKd6QmvZ+Rw0VEBabTnoGLkLR5CHXcuS+idwPLp5YIB8WORAct5KetbsZm175WRArw==","signatures":[{"sig":"MEUCIE6HeTcOxkVzEC3BVd9MJ3ci8QF9NnfWMaeDpPj7neoqAiEAyr4qoo0S0kHDcBgj++8fqtVCeWY9Rtr9tTYkqTMd32w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":838956},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"943a43d3eb5c0dbdc5eba0dcd4e726790566ac7b","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.6.2","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.1.5_1776695088985_0.23585033623049156","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@imbue-ai/detent","version":"1.2.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.2.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"d3c8f4524563ebac76498c83170ce796e1f2859c","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.2.0.tgz","fileCount":129,"integrity":"sha512-OW026DDLZk5M0oV7LS7Ds4vuNtsiTwcvul1cvuRdPubp9pNIP1AUJZNhv66Hh5AThvwReYNgD1WJMdhiwLyX0Q==","signatures":[{"sig":"MEYCIQD6kwOVGY7otXwFkTFChfulWC1LskRv8CQG1QaTxJaE/AIhAMGVVh0Y5n7/b6fpYMaU4sqw4xAvW4pAIr0v4TjtlGFA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":909306},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"68cade3ba683ee6f95cc6a74060db17e1704c04b","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.6.2","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.2.0_1778054806102_0.23977811227558354","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@imbue-ai/detent","version":"1.3.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.3.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"5cbed6d9a2c2a92c7a2e7688d10e011c36b3aa7c","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.3.0.tgz","fileCount":129,"integrity":"sha512-3qjBk8+Em6LPBa/UONyyqB8gyi+sjn366oEezOzaCAAHHEpibCvyWu5LvGA5WshT9YOzHosON/910NYoFkmOHQ==","signatures":[{"sig":"MEYCIQCGFnhYn7Q/UNhaeA+VC6FmOwdORvILHGeAL1PxiAUaEQIhAOr2uUxi2G40NLJpkAE8py0kc3sxzuIbuhoyMhaSJkrD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":919547},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"f652de1c5cfd20c107bea7f673b4153aeaf9b812","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.6.2","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.3.0_1780056489099_0.4316082090983471","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@imbue-ai/detent","version":"1.4.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.4.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"4e783adb02670e0773da4206a80a28e3c061f790","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.4.0.tgz","fileCount":129,"integrity":"sha512-Zc/TOOEAGWnItAiREvV092kKaXJ1NjA7Cr99u4mCIpskKVzQ9V6Vbp7p+858U5Jbg+gchkg3BxwmYEozA2yu0w==","signatures":[{"sig":"MEYCIQCAKr0RFxTV7J0+S6qF7+63GmRp3479UES9z96ftSTXNAIhANxJKvgYxI/+V730Rma3Lc7Vsa6zeZIZMPgtofUI9yjc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":961098},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"0e513ec7d1c5e80f4f8842b8ad66287e8174bac7","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.6.2","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.4.0_1780309635128_0.5832513548608871","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@imbue-ai/detent","version":"1.5.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.5.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"512c6c1c6ba2a727b53a01eea0d90971e2dba6b0","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.5.0.tgz","fileCount":129,"integrity":"sha512-O8Wsi0EWRkYXY/ZinXVjTDsjU1iJSY6q7LTgvM8Cf6JEzSPaggH5La++NKWOe11SnIH2LyIkj4M6+RlrqMoqEQ==","signatures":[{"sig":"MEUCIQC8WFs3P2Fesjaet7vAxECmEjmjKveK+8LVnsSi2w1/fQIgO20oaNnonw6mp3P+Q5OpI08HbgmRN6PHtnCtJYkNJ6Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":991857},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"dfa162dbc6f5b1cd043dec8000c66e1d05a6f206","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.6.2","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.5.0_1780923386923_0.4471961138942808","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@imbue-ai/detent","version":"1.6.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.6.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"4a9176aef803a2093208d388623ead9429d41a26","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.6.0.tgz","fileCount":129,"integrity":"sha512-J9PbI8t1Ito6sUsu6zzOHX8CYDwHqi+rlZROqFZ2u5Z+8twD105XcVrZe8RYZ7keEFIS2jtkKye7gBpYSS2cEg==","signatures":[{"sig":"MEUCIQDJeXJTjH+qkdsv9MYk1TMpehrvY/HSFlEvt4j06XgTbQIgVi1tSX0UkdzfwEkzuH5X4eEHmPb6XDjWiVMOMK+8ZVk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1016091},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"8c97bfa61da5af174d9a101b4330736b96c67db8","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.16.0","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.6.0_1780990686467_0.535851792973822","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@imbue-ai/detent","version":"1.7.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.7.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"74bbced1726f2f4e9ae79a8470ea0ad966b95efe","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.7.0.tgz","fileCount":129,"integrity":"sha512-QKZnwk8afkLI27gB3YhyfPqVUkXJwEr/ijUIduvV8NnCHDxZcOPqou6c/MOrdKkASBKbRhQCkxAmb3lIjJqZWw==","signatures":[{"sig":"MEQCIHXzNVnWQkqQygK7GfHrcCRVJ11SPwNW9bVw36KQ5vnBAiBtrHgmwySOpbX4orST5dxpGefp2OEtLG/QEUYMTDuW6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1032123},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"533d34b8f0a2f4c468c4a90abd1b94aac2091dc9","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.16.0","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.7.0_1781765836833_0.12265792992284075","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@imbue-ai/detent","version":"1.8.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.8.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"0780f7b87d3fbc8a1e04a3d457ae496bd46a05b5","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.8.0.tgz","fileCount":129,"integrity":"sha512-YSwXcdWYnSRRtEG8FV+yIguwFBA8Hy+g4WFfisBNiimcc8tH52EQSJ2InA06z8X1L6W1zNV285tG0EiWWZrr1w==","signatures":[{"sig":"MEQCIDj2J87RSoA5zDRvm+O7lpjtyvGYyv6MxBJas930d+x1AiAZuTcXICQQhDFiTnpeB0YP3U46LYdPULyjOXDFtaWG7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1070029},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"2b07a6e54cb3019877e920e76c7d50eda54b89f4","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.16.0","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.8.0_1782372344138_0.23700144890261332","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@imbue-ai/detent","version":"1.9.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.9.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"7942602d8d4c9721f42bd168b681e01b28a5c0ea","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.9.0.tgz","fileCount":129,"integrity":"sha512-LbzPZNWx+v4JXLw9/v52dlhwO/3ou/jckpsfFjXDyoBbmrMrBBlaRDgwgvoBxy3s0we+8jIM8N82ftnxJGzuZA==","signatures":[{"sig":"MEYCIQDtI6l6ToCeXx73s3qD3H4cGR6jSyWLrslNnQO8yGI1FwIhALALC1GS3FM508qcB/U447AvoMoG6X18YbdeRPQuiAqu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1071647},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"1d99aa9b7f9213c1e5f1bcb6e3661d9bd6cf241e","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.16.0","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.9.0_1784016342908_0.07737031871020306","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@imbue-ai/detent","version":"1.10.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.10.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"612061be7a1ac28fac20ccedefa46a151e9e59f6","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.10.0.tgz","fileCount":129,"integrity":"sha512-Rz7pht2PTxUT61F67jOaWKK3y39DCHoWrK11SQhoSL9Wx9nowdzWZfh8grjV5MBn5GS+3CQf8LDdbcukLzRbig==","signatures":[{"sig":"MEUCIHsisIAT/YA1A4X6Q7UlxP2lkre78tr8KMvJDvfxuuqNAiEA+SDRxOyO19hgqm9ccW5MlhR/0QwDlUTbiurDoUsFTnw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1087133},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"54ceff6ae581a565fa51ee4e3977da895a04986b","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.16.0","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.10.0_1784207202928_0.17247390054237344","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@imbue-ai/detent","version":"1.11.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.11.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"6f736640a30bb9176f33b809dd3e39ac8aac2ead","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.11.0.tgz","fileCount":129,"integrity":"sha512-oKTqJOGAl6/DVPeKRFOxWUu+9W0jxHa+UrApOyHzm9WJTQpbIuwDCkeI1HoeaL2kiyey96adIDJtb2AnLPEdGg==","signatures":[{"sig":"MEQCIBf0Ejz3Zd6sre5v6VIxYElgxfuChUaTk11nfv6/Gl0kAiAONd/cylanhhW9sEPUZnGNJhVyU3Doy8UTEvy10DpK9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1108761},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"a8f27149f0b3e376e67f56fea9d90d4bb669e2c4","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.16.0","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.53.1"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.11.0_1785152606178_0.9597304203982766","host":"s3://npm-registry-packages-npm-production"}},"1.11.1":{"name":"@imbue-ai/detent","version":"1.11.1","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.11.1","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"03e6c39edd40cee96eae235c62dd4b786f4ab481","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.11.1.tgz","fileCount":129,"integrity":"sha512-35LGqo9SJelBJsYeaSd4+yN0WfI8j4OeGPtZOIPyI7sKFQjhG9mrNqajb9foKO1fnlZyK/FCQ6IBnJ+rj/H8MQ==","signatures":[{"sig":"MEUCIHg1RAC5wYWtvSj55bYbO4CUwv8IgUotRkl09AQKtKeOAiEAzWHDZd7kBv5DDZ3WNKcK2rwCc3DjjCip4R7Q+s1lHI0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1109085},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"3dce59b5ad5046536853eb2c2c673768f96b62f7","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.16.0","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^10.8.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.65.0"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.11.1_1785154263003_0.543204395045515","host":"s3://npm-registry-packages-npm-production"}},"1.11.2":{"name":"@imbue-ai/detent","version":"1.11.2","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.11.2","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"5020bc4afa4df0ed16499a3ee5bb105d97927cf9","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.11.2.tgz","fileCount":129,"integrity":"sha512-BVij1lgq0u9eBiTLnkdAitOfKP7lTxHCdS4iuKwEm0UC9i/Bplu4f+/p8ib2eWjzz16NHmFLg2edPi4ZKMEwJw==","signatures":[{"sig":"MEYCIQDm+qnJ/OyZsee2rVlKyx1KImsIS5tKDS+S6JyuQphVrAIhAMpQPTJJC9YStNC4Tgq5bDOPmHNYH0sMdBkOwQthpog9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1125827},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"e2f8eeb48e02790c73f43bf20a1501385c2f026a","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.16.0","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^10.8.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.65.0"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.11.2_1785156348678_0.4016137076490365","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@imbue-ai/detent","version":"1.12.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.12.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"b5e50b930eb5a96bc199fa522483a4f775beda51","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.12.0.tgz","fileCount":129,"integrity":"sha512-aWiZMxZkmXPTi/WpVTmmFSNEyC6j0yoIjsihYYBBRjR3Pdbg2+dTg0ETonjB20oH5SYHMrO6VQMLrXtVdddWvA==","signatures":[{"sig":"MEQCIE/VUMPA/Jmf/XG4Z75bEmR2S9Lc7KXhpn6k0REmjH4bAiBzbOZ8TDkQNU4rStkjMX0MUqtF49PNbrVmxyDSRQbBrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1135454},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"540be3a1ba01d04505acfcf43290690a45d01ee0","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"10.5.2","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"20.13.1","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^10.8.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.65.0"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.12.0_1785887697955_0.04366190714172147","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"@imbue-ai/detent","version":"1.13.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.13.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"eb1f9dbc7eadc66f4f8e80489ee0ea013d62f4bc","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.13.0.tgz","fileCount":129,"integrity":"sha512-ZKqhesvo1gFc14D4WhFuuYqJ5i1uGKMyy2uZ/jkjaQ6Mzj+iJ6xBfVLFhpihwUYrU4RmIWpiuJOmafp1hCdBKQ==","signatures":[{"sig":"MEUCIQDG7H93GuTav9hHP6zTN0zQoZMBfxaYaWCTmuPLuAttAAIgQihi/e3tMKg12yScrCLZ129CMxnAKMnzYYfOoV/WxDM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1166479},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"1cefab46768739984fda373dfed5ea3523b01876","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.16.0","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^10.8.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.65.0"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.13.0_1786538639420_0.11572902672735386","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"@imbue-ai/detent","version":"1.14.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.14.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"71157df563735b494805fb75d07f0e77cd1d60ff","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.14.0.tgz","fileCount":133,"integrity":"sha512-N5SYwTPetDbupSzpA62RIrc9ZDQcIrIuobEVqfqGGqR9xNkElMhudxgO0lHTeGjqe+tJTwW1l7bY+vJRPqAtzA==","signatures":[{"sig":"MEYCIQC0YBfXtwhDDd4mGG0RGgVrrn78+8DkqTW4xVFWs8HMUQIhAKc3/bBdrXg/qP/xhxAZ5KM1tEQnhKknr4+Rd8InJNYp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1196299},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"3addbbb243ef12c7649aa9d7b73926c9f4921210","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.16.0","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^10.8.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.65.0"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.14.0_1787639920245_0.18762282879315184","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"@imbue-ai/detent","version":"1.15.0","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.15.0","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"bce131c6169ac56a1fc41c80cb2e85c062aeb67a","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.15.0.tgz","fileCount":133,"integrity":"sha512-S9TRK/Ga163xPI3NGZJWjQoi+1RYVEfwaBRtxmIfMZ1VklfUY13eEf9Qzl6csIP18rieF4X7m2RZtalj5f3upw==","signatures":[{"sig":"MEUCIQCV3D+lVobkVkKaFCKNFNKnbwuE9KcKSqXZvqU4sY0SvQIgT3boonGGFzrY0iTEHLSIZzP91f8oDt67LqE/PnO5vgM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1241419},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"76a095a8221d1937840fb97e5a8f03f46314fed1","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.16.0","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^10.8.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.65.0"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.15.0_1787733076390_0.33879773498254284","host":"s3://npm-registry-packages-npm-production"}},"1.15.1":{"name":"@imbue-ai/detent","version":"1.15.1","keywords":["cli","curl","api","permission","check","agents","imbue"],"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","_id":"@imbue-ai/detent@1.15.1","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"homepage":"https://github.com/imbue-ai/detent#readme","bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"bin":{"detent":"dist/src/cli.js"},"dist":{"shasum":"3b8c3fcd889cb9bdb3dad5d7b6000da714286eff","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.15.1.tgz","fileCount":133,"integrity":"sha512-x1liPzdefjPm/G7ucM30NKdVVgWWh9d3LUFMXPEfovtMuO9c0cpKIGxjwOjGiFPjRpurZ/M7dqaidxg8ZOPH2w==","signatures":[{"sig":"MEYCIQCdDr3+JFaY7nZ0+ZpHvZhmsS3P2M9CHHm4PqorOZoTIQIhAKlBXzfv0yKgyv3XMzfd4uLlVckRH9QcDl+7byq6KMm+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1252948},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"ce5249e9b0dc73e8ad3108610d837e94d0cc9668","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.16.0","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^10.8.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.65.0"},"_npmOperationalInternal":{"tmp":"tmp/detent_1.15.1_1788247187249_0.529604876643115","host":"s3://npm-registry-packages-npm-production"}},"1.15.2":{"_id":"@imbue-ai/detent@1.15.2","bin":{"detent":"dist/src/cli.js"},"bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"dist":{"shasum":"7863210c04c844ff93c512a0f098615df5818f90","tarball":"https://registry.npmjs.org/@imbue-ai/detent/-/detent-1.15.2.tgz","fileCount":133,"integrity":"sha512-VFPwD24zgY1VJYg7fImiZINNLtAeNGIjoKKoHM/1t6fkVd+mQC9lU2FahXBw16v3wFZG9S+aYGZwJpp/QXH9AQ==","signatures":[{"sig":"MEQCIB1booQr+5rs3o3PyohRj5zaPR2eDRJKI/0t9r77gop+AiBBN+gV4H2RSr7TDZVpodFVdfGqJi+hItkBFeXyzK96cg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB18jeaoDEru+ZpD2EAqrtnkftffpUy+T7dK4SJCVpCFAiEAk6lyaypymIostSdTfpIpnU+tN/p8pcHmFmqki1Y6Wpo="}],"unpackedSize":1288019},"main":"dist/src/index.js","name":"@imbue-ai/detent","type":"module","types":"dist/src/index.d.ts","author":{"name":"Imbue","email":"hynek@imbue.com"},"engines":{"node":">=20"},"gitHead":"6bd4191a826283d633fac636ae4a24fcdbe0c6f0","license":"MIT","scripts":{"dev":"tsc --watch","docs":"tsx scripts/generateBuiltinSchemaDocs.ts","lint":"eslint src tests","test":"vitest run","build":"tsc && chmod +x dist/src/cli.js && npm run postbuild:vendor-notices","start":"node dist/src/cli.js","format":"prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"","pretest":"npm run generate:builtin-schemas","lint:fix":"eslint src tests --fix","prebuild":"npm run generate:builtin-schemas","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"","pretypecheck":"npm run generate:builtin-schemas","prepublishOnly":"npm run build","generate:builtin-schemas":"tsx scripts/generateBuiltinSchemasModule.ts","postbuild:vendor-notices":"mkdir -p dist/src/vendor/curlconverter && cp src/vendor/curlconverter/LICENSE src/vendor/curlconverter/README.md dist/src/vendor/curlconverter/"},"version":"1.15.2","_npmUser":{"name":"hynek-urban","email":"hynek@imbue.com"},"homepage":"https://github.com/imbue-ai/detent#readme","keywords":["cli","curl","api","permission","check","agents","imbue"],"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"_npmVersion":"11.16.0","description":"Fine-grained HTTP permissions for AI agents.","directories":{},"maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"_nodeVersion":"24.13.0","dependencies":{"commander":"^14.0.3","@cfworker/json-schema":"^4.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^10.8.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.3.0","@types/node":"^20.0.0","typescript-eslint":"^8.65.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/detent_1.15.2_1789558595857_0.2627026592715498"}}},"time":{"created":"2026-04-10T08:14:35.625Z","modified":"2026-09-16T11:36:36.165Z","1.0.1":"2026-04-10T08:14:35.913Z","1.0.2":"2026-04-10T14:13:08.058Z","1.1.0":"2026-04-15T11:48:52.148Z","1.1.1":"2026-04-15T11:57:48.877Z","1.1.2":"2026-04-17T14:05:43.449Z","1.1.3":"2026-04-20T08:51:19.268Z","1.1.4":"2026-04-20T10:22:47.428Z","1.1.5":"2026-04-20T14:24:49.141Z","1.2.0":"2026-05-06T08:06:46.235Z","1.3.0":"2026-05-29T12:08:09.256Z","1.4.0":"2026-06-01T10:27:15.302Z","1.5.0":"2026-06-08T12:56:27.055Z","1.6.0":"2026-06-09T07:38:06.705Z","1.7.0":"2026-06-18T06:57:16.963Z","1.8.0":"2026-06-25T07:25:44.306Z","1.9.0":"2026-07-14T08:05:43.085Z","1.10.0":"2026-07-16T13:06:43.177Z","1.11.0":"2026-07-27T11:43:26.382Z","1.11.1":"2026-07-27T12:11:03.204Z","1.11.2":"2026-07-27T12:45:48.943Z","1.12.0":"2026-08-04T23:54:58.118Z","1.13.0":"2026-08-12T12:43:59.553Z","1.14.0":"2026-08-25T06:38:40.386Z","1.15.0":"2026-08-26T08:31:16.650Z","1.15.1":"2026-09-01T07:19:47.444Z","1.15.2":"2026-09-16T11:36:35.964Z"},"bugs":{"url":"https://github.com/imbue-ai/detent/issues"},"author":{"name":"Imbue","email":"hynek@imbue.com"},"license":"MIT","homepage":"https://github.com/imbue-ai/detent#readme","keywords":["cli","curl","api","permission","check","agents","imbue"],"repository":{"url":"git+https://github.com/imbue-ai/detent.git","type":"git"},"description":"Fine-grained HTTP permissions for AI agents.","maintainers":[{"name":"hynek-urban","email":"hynek@imbue.com"},{"name":"imbue-bot","email":"bot@imbue.com"}],"readme":"# Detent\n\n[![npm](https://img.shields.io/npm/v/@imbue-ai/detent?style=flat-square)](https://npmjs.com/package/@imbue-ai/detent)\n[![CI](https://img.shields.io/github/actions/workflow/status/imbue-ai/detent/ci.yml?style=flat-square)](https://github.com/imbue-ai/detent/actions)\n[![license](https://img.shields.io/npm/l/@imbue-ai/detent?style=flat-square)](LICENSE)\n[![downloads](https://img.shields.io/npm/dm/@imbue-ai/detent?style=flat-square)](https://npmjs.com/package/@imbue-ai/detent)\n\nFine-grained HTTP permissions for AI agents.\n\n## Quick example\n\n```bash\n# Store rules.\necho '{\n  \"rules\": [\n    {\"github-rest-api\": [\"github-read-all\", \"github-write-issues\"]},\n    {\"slack-api\": [\"slack-read-all\"]}\n  ]\n}' > ~/.config/detent/config.json\n\n# Check a request before sending.\n# (Exit code: 0 = approved, 1 = rejected.)\ndetent curl -s https://api.github.com/repos/octocat/Hello-World/issues/1\n```\n\n## Installation\n\n```bash\nnpm install -g @imbue-ai/detent\n```\n\n(This is not needed if you only intend to use Detent as a JavaScript library.)\n\n\n## Motivation\n\nUsers of AI agents sometimes give them access to services like\nSlack, Google Drive, GitHub and others. Giving agents full\naccess is unnecessarily risky - the best practice in most cases\nis giving only the necessary level of access. In practice, that\ncan be challenging, especially for services that do not offer\nnative granular permissions.\n\nDetent is meant to address this. Users or developers can easily specify\npermissions, from broad ones (\"only read access to my Slack\") to\nmore specific ones (\"only read access to GitHub issues for this one repository\").\n\n## Integrations\n\nChecking permissions is only useful if the results are\nrespected. To be effective, Detent needs to be integrated into\nwhatever tool the agent uses to access third-party services.\n\n### Latchkey\n\n[Latchkey](https://github.com/imbue-ai/latchkey) lets users\npoint to a Detent config in order to control what agents can and\ncan't access.\n\n## Details and architecture\n\nDetent is a command line tool and a Typescript library. It allows users and developers to:\n\n1. Define named permissions for outgoing HTTP requests.\n2. Check that a given request is allowed given the defined permissions.\n\n### Usage\n\nStore your permission setup in a config file as documented\nbelow. Then assemble a `curl` invocation for an HTTP request and\nprepend it with the `detent` command (`detent curl ...`) to\ncheck whether it's allowed. Detent returns 0 if the request is\nallowed based on the config, 1 if it's not allowed and 2 or\nhigher in case of errors. No requests are actually sent.\n\nAlternatively, use `detent` as a library:\n\n```ts\nimport { check } from \"detent\";\n\nconst request = new Request(\"https://api.example.com/users\", {\n  method: \"POST\",\n  headers: { \"Content-Type\": \"application/json\" },\n  body: JSON.stringify({ name: \"alice\" }),\n});\n\nconst result = await check(request);\n```\n\n`check` optionally takes a config path, a flag controlling\nbuilt-in schemas, and custom metadata:\n\n```ts\nconst result = await check(request, \"/path/to/config.json\", true, {\n  actor: \"code-agent\",\n  sessionId: \"abc123\",\n});\n```\n\n### Configuration\n\nAll the configuration goes to `~/.config/detent/config.json` (or\n`$XDG_CONFIG_HOME/detent/config.json` if `XDG_CONFIG_HOME` is set). Use the `DETENT_CONFIG`\nenvironment variable to specify a different path.\n\n### Matching requests\n\nAn HTTP(s) request can be represented as an object that has\nseveral well-defined properties: `protocol`, `domain`, `port`,\n`path`, `method`, `headers`, `queryParams`, `body`,\n`parsedBody` and `customMetadata`. Using this representation, the `detent` tool uses\n[JSON schema](https://json-schema.org/) to:\n\n1. Match requests to permission checks.\n2. Define the \"acceptable\" shape of a request that is subject to a permission check. \n\nSome of the fields are normalized to canonical form before matching:\n`method` is always uppercase (e.g. `\"GET\"`), `protocol`,\n`domain` and `headers` keys are always lowercase (e.g. `\"content-type\"`).\n\n`body` holds the raw request body as a string. `parsedBody` holds\na structured representation of the body and is only present when\nthe body can be parsed, which currently happens for JSON bodies\n(content type `application/json` or `*+json`). Matching against\n`parsedBody` lets schemas inspect individual fields of a request\nbody without resorting to brittle regular expressions. Support\nfor other body formats (e.g. XML, GraphQL) may be added later.\n\n#### Request schemas\n\nWe use JSON schema for matching and validating request objects. For example:\n\n```json\n{\n  \"properties\": {\n    \"method\": { \"const\": \"GET\" }\n  },\n  \"required\": [\"method\"]\n}\n```\n\nThis would match all GET requests, regardless of the domain,\npath, or anything else. Schemas must use normalized field\nvalues (uppercase for methods etc.).\n\nIn the Detent config, schemas are identified by names, like this:\n\n```json\n{\n  \"schemas\": {\n    \"github-api\": {\n      \"properties\": {\n        \"domain\": { \"const\": \"api.github.com\" }\n      },\n      \"required\": [\"domain\"]\n    },\n    \"github-read-issues-detent\": {\n      \"properties\": {\n        \"method\": { \"const\": \"GET\" },\n        \"path\": {\n          \"type\": \"string\",\n          \"pattern\": \"^/repos/imbue-ai/detent/issues(/[0-9]+)?$\"\n        }\n      },\n      \"required\": [\"method\", \"path\"]\n    },\n    ...\n  }\n}\n```\n\nNote how the `github-api` schema only matches the domain,\nwhile the `github-read-issues-detent` doesn't match the domain.\nThey are supposed to be used as scopes and permissions respectively in\n[permission rules](#permission-rules),\nbut they live in the same flat namespace.\n\nFor a complete example config that defines custom schemas, see\n[docs/example-cloudflare.json](docs/example-cloudflare.json).\n\n\n#### Custom metadata\n\n`customMetadata` is an optional object with arbitrary subfields\nthat is not derived from the request itself. It lets callers\nattach their own context (e.g. which agent is making the request)\nand write rules against it.\n\nProvided either through the library API:\n\n```ts\nawait check(request, configPath, useBuiltinSchemas, { actor: \"code-agent\", attempt: 2 });\n```\n\nor, for the CLI, through the `DETENT_CUSTOM_METADATA` environment variable holding a JSON object:\n\n```bash\nDETENT_CUSTOM_METADATA='{\"actor\":\"code-agent\"}' detent curl -s https://api.github.com/user\n```\n\nSchemas refer to it like any other property:\n\n```json\n{\n  \"properties\": {\n    \"customMetadata\": {\n      \"properties\": { \"actor\": { \"const\": \"code-agent\" } },\n      \"required\": [\"actor\"]\n    }\n  },\n  \"required\": [\"customMetadata\"]\n}\n```\n\n#### Composing schemas\n\nSchemas can build on other schemas. Every named schema (built-in\nor user-defined) is referencable as `#/$defs/<schema-name>`\nusing JSON schema's standard `$ref` mechanism. For example:\n\n```json\n{\n  \"schemas\": {\n    \"slack-but-only-for-code-agent\": {\n      \"allOf\": [\n        { \"$ref\": \"#/$defs/slack-api\" },\n        {\n          \"properties\": {\n            \"customMetadata\": {\n              \"type\": \"object\",\n              \"properties\": { \"account\": { \"const\": \"code-agent\" } },\n              \"required\": [\"account\"]\n            }\n          },\n          \"required\": [\"customMetadata\"]\n        }\n      ]\n    }\n  }\n}\n```\n\n### Permission rules\n\nOnce defined, request schemas can be combined in a two-level rules hierarchy, like this:\n\n```json\n{\n  \"schemas\": {...},\n  \"rules\": [\n    {\"github-api\": [\"github-read-issues-detent\", \"github-write-comments-detent\", ...] },\n    {\"slack-api\": [\"slack-read-all\"] }\n  ]\n}\n```\n\nIn each rule, the key defines scope (\"should a given request be\nsubject to this rule\") and each value represents a list of permissions\nallowed by this rule.\n\nThis is the meaning of the rules in the example above:\n  - When accessing the GitHub API, the only allowed actions are reading issues and writing comments in the Detent repository.\n  - When accessing the Slack API, only read actions are allowed.\n  - No other requests are allowed.\n\nNote that the scopes and permissions come from the same flat namespace of\n[request schema](#request-schemas).\nA typical rule uses a schema that only matches the domain as the scope and a\nlist of schemas that don't match the domain as the permissions,\nbut that's purely a usage pattern.\n\n### Rule resolution, default outcomes\n\nWhen a request gets checked, the rules in your config are simply\nevaluated from top to bottom. The first rule whose scope matches\nthe request determines the outcome: if the request matches any\nof the permissions in the rule, it's approved. Otherwise, it's\nrejected. Further rules are not evaluated. By default, requests\nthat don't match any rule get rejected. If you want to allow\nrequests by default, append the `{\"any\": [\"any\"]}` rule to the\nend of your rule list.\n\n### Hooks (custom executable checks)\n\nIn addition to the plain list of schemas shown above, a rule's\nvalue can be an object with `schemas` and/or `hooks`:\n\n```json\n{\n  \"rules\": [\n    {\n      \"github-rest-api\": {\n        \"schemas\": [\"github-read-issues-detent\"],\n        \"hooks\": [\"./check-actor.sh\", \"audit-log\"]\n      }\n    }\n  ]\n}\n```\n\nSemantics:\n\n- `schemas` works exactly like the plain list form: the\n  request is approved (by this gate) if any listed schema\n  matches the decomposed request.\n- `hooks` is a list of executables; the request is approved\n  (by this gate) only if all of them exit `0`.\n- When both fields are present, both must succeed (AND).\n- Hooks run before schemas.\n\nEach hook is invoked with a single argument: the path to a\ntemporary JSON file containing the decomposed request (the same\nshape used by schema validators - see the request schema fields\nlisted above). Hooks must follow detent's exit-code convention:\n\n- `0`: allowed by this hook\n- `1`: rejected by this hook\n- `2` or higher: error; the whole `detent` invocation\n  aborts with that exit code (no further rules are evaluated)\n\nHook paths are resolved at execution time, in this order:\n\n1. Absolute path: used as-is.\n2. Path containing a separator: resolved relative to the\n   directory of the config file that defined the rule.\n3. Bare name: looked up via `$PATH`.\n\nWithin a single rule, hooks run sequentially in array order.\nEvaluation short-circuits on the first non-zero exit: a `1`\nrejects the rule (no further hooks are run) and a `2+` aborts\nthe whole `detent` invocation with that exit code. When the\nlibrary API (`check`) hits a hook with exit code 2+, it throws a\n`HookExecutionError` carrying the offending hook spec and exit\ncode; the CLI re-uses that exit code.\n\n\n### Built-in schemas\n\nDetent comes with a number of preconfigured schemas out of the box that\nare automatically available and recognized in rule bodies:\n\n- `any` (to match and allow any and all requests)\n- `aws-s3` (to identify requests going to AWS S3)\n- `aws-s3-read` (to allow read operations on AWS S3)\n- `stripe-read-all` (to allow all read operations in Stripe API)\n- `google-drive-write-comments` (to allow adding comments to Google Drive items)\n- ... and many others, see [docs/builtin-schemas.md](docs/builtin-schemas.md) for the full list\n\nRun `detent dump` to see your current config together with all the\navailable built-in schemas. If you only want to list the schema\nnames, run `detent dump | jq '.schemas | keys'`.\n\nIf you don't want to use the built-in schemas, set the\n`DETENT_DO_NOT_USE_BUILTIN_SCHEMAS` environment variable to\na non-empty value.\n\n### Environment variables\n\n- `DETENT_CONFIG`: path to the config file\n- `DETENT_DO_NOT_USE_BUILTIN_SCHEMAS`: when non-empty, disables built-in schemas\n- `DETENT_CUSTOM_METADATA`: JSON object exposed to schemas and hooks as `customMetadata`\n\n\n### Including other config files\n\nUse the `include` key to split your configuration across\nmultiple files. Paths are resolved relative to the directory of\nthe config that contains the `include`.\n\n```json\n{\n  \"include\": [\"shared/example.json\", \"shared/another_example.json\"],\n  \"rules\": [\n    {\"github-rest-api\": [\"github-read-issues\"]}\n  ]\n}\n```\n\nIncluded configs are merged recursively: schemas and rules from\nall included files are collected first (in list order), then the\nincluding config's own schemas and rules are applied on top.\nThis means the parent config's schemas override equally-named\nincluded schemas, and its rules are evaluated after included\nrules. Circular includes are detected and rejected.\n\n\n## Contributing\n\nContributions of all kinds are welcome!\n\n## Disclaimer\n\nWe're providing the preconfigured schemas for convenience, but\nit's likely that some of them may not work entirely as intended.\nWe hope that the community will help us refine the built-in\npermission definitions over time. In the meantime, preferably\ndouble-check built-in definitions before using them, and when\npossible, use API tokens with reduced permission scopes.\n\nWe still think the tool is useful in its current form as a protection\nagainst accidental agent actions and the first line of defense\nagainst malicious or compromised agents.\n","readmeFilename":"README.md"}