{"_id":"@bacnh85/pi-permission","_rev":"12-1cd7cfb34a7a4fede5065e8d94a1392b","name":"@bacnh85/pi-permission","dist-tags":{"latest":"0.2.9"},"versions":{"0.1.0":{"name":"@bacnh85/pi-permission","version":"0.1.0","keywords":["pi-package","pi","permission","security","policy","allowlist","blocklist"],"license":"MIT","_id":"@bacnh85/pi-permission@0.1.0","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-permission","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"extensions":["./extensions/index.js"]},"dist":{"shasum":"01b451e640a5a5b202c849dff09076690dfe8ec7","tarball":"https://registry.npmjs.org/@bacnh85/pi-permission/-/pi-permission-0.1.0.tgz","fileCount":5,"integrity":"sha512-7m6IKCQ1YWo5nGX5IzKm2BB2QZuhgPvu1FO/ZWLj/iC0tvrcZgYSG0yDDxmPhfFhICES/4LdIYoLrxG6GfErsQ==","signatures":[{"sig":"MEUCICtev0CiiiH/wYX6G8uGXpqC5/8CluYCR6uza19XqeBQAiEAsh7Z9KI1KAIXlyY7SDnI7U/ejLsEAImt2LPUkTLMXlc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14536},"gitHead":"d85605e70d509cba6cdd414473defc5348168194","scripts":{"test":"node --test extensions/test/*.test.js"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git"},"_npmVersion":"10.9.8","description":"Granular permission system for Pi — allow/ask/deny rules per tool with wildcard patterns, external-directory boundary, and a doom-loop guard. Config-driven, opt-in companion to Pi's container-first philosophy. Inspired by OpenCode's permission config.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-permission_0.1.0_1786205309757_0.6076046775608235","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bacnh85/pi-permission","version":"0.1.1","keywords":["pi-package","pi","permission","security","policy","allowlist","blocklist"],"license":"MIT","_id":"@bacnh85/pi-permission@0.1.1","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-permission","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"extensions":["./extensions/index.js"]},"dist":{"shasum":"5df913cd368bb4ce0807823ad7c5d9a7c0e080e1","tarball":"https://registry.npmjs.org/@bacnh85/pi-permission/-/pi-permission-0.1.1.tgz","fileCount":5,"integrity":"sha512-aYj+hOKB5r0fAcS6zD1Fj58OfrIMpSCvVbWvuY4ShiQDLYUq4KIBp1TQHHEI5Bcbc9vyPEXsEveN2WBbljICDg==","signatures":[{"sig":"MEQCIFuPZdF610Yu8lebMspJC0EO0S/OZ2m+X6tvNvQvE7zvAiBxcLRtDDObeKeQIK8ZoPvZUJbCcO28sAeObVtp9YuMkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16208},"gitHead":"7831b5745aed34678f18e7c50d2a7777b853500c","scripts":{"test":"node --test extensions/test/*.test.js"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git"},"_npmVersion":"10.9.8","description":"Granular permission system for Pi — allow/ask/deny rules per tool with wildcard patterns, external-directory boundary, and a doom-loop guard. Config-driven, opt-in companion to Pi's container-first philosophy. Inspired by OpenCode's permission config.","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-permission_0.1.1_1786438827384_0.28895893926057914","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bacnh85/pi-permission","version":"0.1.2","keywords":["pi-package","pi","permission","security","policy","allowlist","blocklist"],"license":"MIT","_id":"@bacnh85/pi-permission@0.1.2","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-permission","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"extensions":["./extensions/index.js"]},"dist":{"shasum":"0bc51e369f8b234860409c5958cd7553aaced7c2","tarball":"https://registry.npmjs.org/@bacnh85/pi-permission/-/pi-permission-0.1.2.tgz","fileCount":5,"integrity":"sha512-031Wjvty3zxfHNqt9+qyivulaaEL0FA0/N04eo2XRyZsX4UJYzlHf+Vanjx27uhlmoLAxAhDTFmikDHg6FJGaw==","signatures":[{"sig":"MEUCIHzWIQ6ZUUlHRhuPJ2mjw+vteNXlz5tRj1ccB4AkBN1bAiEAjzYgXfLFReRFT5cVxOD6tTFV9suG6kyrOpwipTKSEaw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17020},"gitHead":"d7e264d6a415cdb5bffdaabae8bfc24d064ed972","scripts":{"test":"node --test extensions/test/*.test.js"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git"},"_npmVersion":"10.9.8","description":"Granular permission system for Pi — allow/ask/deny rules per tool with wildcard patterns, external-directory boundary, and a doom-loop guard. Config-driven, opt-in companion to Pi's container-first philosophy. Inspired by OpenCode's permission config.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-permission_0.1.2_1786768296699_0.9419587493498294","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bacnh85/pi-permission","version":"0.2.0","keywords":["pi-package","pi","permission","security","policy","allowlist","blocklist"],"license":"MIT","_id":"@bacnh85/pi-permission@0.2.0","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-permission","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"extensions":["./extensions/index.js"]},"dist":{"shasum":"6d48ce4cbb86ad4c8d44f16e514251b74c9624e5","tarball":"https://registry.npmjs.org/@bacnh85/pi-permission/-/pi-permission-0.2.0.tgz","fileCount":5,"integrity":"sha512-vjZTwhtHStKmlck2Z1HQy5PdvsDiVphTcoOMaqhH6VTmQ76+q8klD4Nw/mf0xTdP86NE9JZtkjjeilOFU1Lk8w==","signatures":[{"sig":"MEUCIQCweUazOzfq5T8CsjQkBo5QuCnPhD8H0LzVwpvgySxEMQIgdrf9YCUyiZGvFgOCo9KMmUKqAj1gNPrylWDTC0FozTg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25051},"gitHead":"85f036b4f8174aef38b2ce44e2b871da5697107b","scripts":{"test":"node --test extensions/test/*.test.js"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git"},"_npmVersion":"10.9.8","description":"Granular permission system for Pi — allow/ask/deny rules per tool with wildcard patterns, external-directory boundary, and a doom-loop guard. Config-driven, opt-in companion to Pi's container-first philosophy. Inspired by OpenCode's permission config.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-permission_0.2.0_1786974936108_0.45815502906694205","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bacnh85/pi-permission","version":"0.2.1","keywords":["pi-package","pi","permission","security","policy","allowlist","blocklist"],"license":"MIT","_id":"@bacnh85/pi-permission@0.2.1","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-permission","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"extensions":["./extensions/index.js"]},"dist":{"shasum":"91fd0e44d5cb1d2265157cc79b2de186cd3ecc69","tarball":"https://registry.npmjs.org/@bacnh85/pi-permission/-/pi-permission-0.2.1.tgz","fileCount":5,"integrity":"sha512-adL6G9L0XXSoT2xnieY3ehRnkAD8GeGQ0uEX+QVH+Q6K9fgm2oLsO8OnDVjvSkVcyBUgO+s1FiyA7Y1OfSak0g==","signatures":[{"sig":"MEUCIBb+e+A9JLGg3WXu5zgd8V3ZFkFAmgrnTeQ+Q7XnwCT2AiEAwbxPn7GiBp6Y6GBPiXbtwO5g/MDrsDJdPbo8l4T3Q5s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25848},"gitHead":"fc25702c6bed994da1dd5071c5ec8071bfd28393","scripts":{"test":"node --test extensions/test/*.test.js"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git"},"_npmVersion":"10.9.8","description":"Granular permission system for Pi — allow/ask/deny rules per tool with wildcard patterns, external-directory boundary, and a doom-loop guard. Config-driven, opt-in companion to Pi's container-first philosophy. Inspired by OpenCode's permission config.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-permission_0.2.1_1789204270343_0.6700330534852603","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@bacnh85/pi-permission","version":"0.2.2","keywords":["pi-package","pi","permission","security","policy","allowlist","blocklist"],"license":"MIT","_id":"@bacnh85/pi-permission@0.2.2","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-permission","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"extensions":["./extensions/index.js"]},"dist":{"shasum":"abde95cd89bcd841a090559af15f24af923478fa","tarball":"https://registry.npmjs.org/@bacnh85/pi-permission/-/pi-permission-0.2.2.tgz","fileCount":5,"integrity":"sha512-2PimOXTxTiOyJYIPzl+VVcw8kfJtA1VzLL3u46LzuGDm9j5kVa+O4ZZ9NBLqKpWq+bTTTI8HhFZ61WZw4BRByg==","signatures":[{"sig":"MEQCIH8AUQcTrHUEbxlY0ZrYoLXiUzyuOpV+D4VqXjhRa5Q0AiALlmb9sJZ85KWhvzawFdYEFPES92gxP2afwylk5pbK8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26703},"gitHead":"7139c0ec0468483e54a0e3314075cdb9a0f53138","scripts":{"test":"node --test extensions/test/*.test.js"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git"},"_npmVersion":"10.9.8","description":"Granular permission system for Pi — allow/ask/deny rules per tool with wildcard patterns, external-directory boundary, and a doom-loop guard. Config-driven, opt-in companion to Pi's container-first philosophy. Inspired by OpenCode's permission config.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-permission_0.2.2_1789399872071_0.5401429406074418","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@bacnh85/pi-permission","version":"0.2.3","keywords":["pi-package","pi","permission","security","policy","allowlist","blocklist"],"license":"MIT","_id":"@bacnh85/pi-permission@0.2.3","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-permission","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"extensions":["./extensions/index.js"]},"dist":{"shasum":"1edcc84b25e3d8abd7aa34c1d3aa469d5200ede4","tarball":"https://registry.npmjs.org/@bacnh85/pi-permission/-/pi-permission-0.2.3.tgz","fileCount":5,"integrity":"sha512-jS/40p0Lavra+TNH+yXP7p2w+4Nz5Y9ZJzTzeE21BT8kUxOipwtauWxPL1eMjOVL5FOpoqgvQDq7Al9IBUyq2Q==","signatures":[{"sig":"MEYCIQD0ToVy4NHWaK7ynQgWGH8yKKy11s10vezS9sWXNI1ziAIhAJbjdEZL0vqDF65PFRGj7fn8WOJj51tAhEOgiRPEeINe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEqh7sPA5Nq/0v6WVf1o89/oTUqXT7mW09HC8TqmRuhtAiA9y2r/oR0FWnAYGhs/nl0z5T+NRoRCz86/pNMOVHH6jA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27710},"gitHead":"fdf44f60a4ad34359a855de70f0de2edb64c7f2b","scripts":{"test":"node --test extensions/test/*.test.js"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git"},"_npmVersion":"10.9.8","description":"Granular permission system for Pi — allow/ask/deny rules per tool with wildcard patterns, external-directory boundary, and a doom-loop guard. Config-driven, opt-in companion to Pi's container-first philosophy. Inspired by OpenCode's permission config.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-permission_0.2.3_1789784426040_0.48797970967269566","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@bacnh85/pi-permission","version":"0.2.4","keywords":["pi-package","pi","permission","security","policy","allowlist","blocklist"],"license":"MIT","_id":"@bacnh85/pi-permission@0.2.4","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-permission","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"extensions":["./extensions/index.js"]},"dist":{"shasum":"452284b295313d1028638bc22dfcd991d0914f6a","tarball":"https://registry.npmjs.org/@bacnh85/pi-permission/-/pi-permission-0.2.4.tgz","fileCount":5,"integrity":"sha512-49fNOgD6SqDf7yGMwNXktfz4xfCQmhes188soKPjAsEcYk/OSSVzTWoLq7m2WzZWjGsZGinMuKd5WJdnDct0nQ==","signatures":[{"sig":"MEUCIQCvS12QxDRi3sXvQOVYipjSaLb8KL3ujEvRSGwhhl/algIgc2Rn2TCPIanheLi6qsyfgy6PTy1GFQ00ygqoY9k7rWM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEdr51fc9r+jcoxnF3XqYh4t2Ns45KXS5vStqmNnw4a8AiEA+NNLqi7U+fG6Mw2dp5pCKtLi4/YfdikhbIFaWswgQ3o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28541},"gitHead":"b5330ac3d014f92dff97a2b90cd9ebdbf0de22fd","scripts":{"test":"node --test extensions/test/*.test.js"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git"},"_npmVersion":"10.9.8","description":"Granular permission system for Pi — allow/ask/deny rules per tool with wildcard patterns, external-directory boundary, and a doom-loop guard. Config-driven, opt-in companion to Pi's container-first philosophy. Inspired by OpenCode's permission config.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-permission_0.2.4_1789962627931_0.6726860450854562","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@bacnh85/pi-permission","version":"0.2.5","keywords":["pi-package","pi","permission","security","policy","allowlist","blocklist"],"license":"MIT","_id":"@bacnh85/pi-permission@0.2.5","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-permission","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"extensions":["./extensions/index.js"]},"dist":{"shasum":"e6d412e12b142dfd2a14eab3a96b875dbba5402f","tarball":"https://registry.npmjs.org/@bacnh85/pi-permission/-/pi-permission-0.2.5.tgz","fileCount":5,"integrity":"sha512-tkaGIDn6mAPYmVF0GtWMANXG0uipKBvmfYx/ZiUezg2OMBieogvi0CTgHQR8gZS1rIg+rtNb/0TjT7a2NrKrQw==","signatures":[{"sig":"MEQCICCYba9ulAcpo3YhlHXkq/OStY+bvPTm7UXTr+vMsdWZAiAR+1SP9G2+R/5RzbVuWHct7J0RXJtK3Fo+a8K4Skp38A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCID4CukbFuuhMYfwxTPdYOVcMOiUHnPuHCSlScy9A0t+uAiEAsbVGGSsIsLOuhj4lCCY+V17+3OIk6hSMA0kn8VtndSc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29851},"gitHead":"e0ab9215e2df54e5fa42f1c6cc6f616124fdea95","scripts":{"test":"node --test extensions/test/*.test.js"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git"},"_npmVersion":"10.9.8","description":"Granular permission system for Pi — allow/ask/deny rules per tool with wildcard patterns, external-directory boundary, and a doom-loop guard. Config-driven, opt-in companion to Pi's container-first philosophy. Inspired by OpenCode's permission config.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-permission_0.2.5_1790123298486_0.7180567513058578","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@bacnh85/pi-permission","version":"0.2.6","keywords":["pi-package","pi","permission","security","policy","allowlist","blocklist"],"license":"MIT","_id":"@bacnh85/pi-permission@0.2.6","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-permission","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"extensions":["./extensions/index.js"]},"dist":{"shasum":"8cdc4698c00798c04ed13a421f9eda6059ffe12b","tarball":"https://registry.npmjs.org/@bacnh85/pi-permission/-/pi-permission-0.2.6.tgz","fileCount":5,"integrity":"sha512-cdqcj9g8MFHRRDw8SHIgS4iD8Yl3vkUt0VPZobsYCbVyltkeQl4h+/fThmZhtw43G56WCgbMfLwa5Xwpvqm6jg==","signatures":[{"sig":"MEUCIQCt/fJT9ZuoK6/eP1UKi17QzmHquwioHVSZOc1CISf4ngIgCmO220OKz2QLkGhFNUNWUMh8giyLXcSWvQbzNFN9fEw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFBvBC/umXvY19Zv519xh/AED+YtZOBKHD6BZCawGqB6AiAQBFa2HYBjXHYzDAWBeruslP2lfnWnkW1PIa4d2Uur9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31223},"gitHead":"47ee5073837a97916572d769f13d86f55d54ef00","scripts":{"test":"node --test extensions/test/*.test.js"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git"},"_npmVersion":"10.9.8","description":"Granular permission system for Pi — allow/ask/deny rules per tool with wildcard patterns, external-directory boundary, and a doom-loop guard. Config-driven, opt-in companion to Pi's container-first philosophy. Inspired by OpenCode's permission config.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-permission_0.2.6_1790209435893_0.43584448021593714","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@bacnh85/pi-permission","version":"0.2.7","keywords":["pi-package","pi","permission","security","policy","allowlist","blocklist"],"license":"MIT","_id":"@bacnh85/pi-permission@0.2.7","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-permission","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"pi":{"extensions":["./extensions/index.js"]},"dist":{"shasum":"535e60a56362fe9e4304f2277b8b81239edc0e79","tarball":"https://registry.npmjs.org/@bacnh85/pi-permission/-/pi-permission-0.2.7.tgz","fileCount":5,"integrity":"sha512-kN5MnmlqGiNcBrSMmSx1HQAhEQq3B/h3mHFdemSFJakeiVNue+5BUJQND439Tj/vOvy6p0nAeKDzquVuu/gh1Q==","signatures":[{"sig":"MEYCIQCa7nNefdnsPnbzBMHodMZACzcMk8U2jCiIEMoRFCFnwQIhAIoGB7fAQHMWSWUMLRy0Q/7uKZpBz+Yf/krJ4KCtJLjW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCe+9FvY/qxEskvYKj+If2RhcrnMU05K2llFez8L1IN7AIgRTd/v4n0AKkOPIE315EkxTDIzPw/QLfW7VhBbIdxxAY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34363},"gitHead":"96408d174879a677b06eed011e02b3b0ddaafa03","scripts":{"test":"node --test extensions/test/*.test.js"},"_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git"},"_npmVersion":"10.9.8","description":"Granular permission system for Pi — allow/ask/deny rules per tool with wildcard patterns, external-directory boundary, and a doom-loop guard. Config-driven, opt-in companion to Pi's container-first philosophy. Inspired by OpenCode's permission config.","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-permission_0.2.7_1790479411267_0.6048259115374259","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"pi":{"extensions":["./extensions/index.js"]},"_id":"@bacnh85/pi-permission@0.2.9","bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"dist":{"shasum":"27baf7f3b720b455bd31258da6e764ab1e483e13","tarball":"https://registry.npmjs.org/@bacnh85/pi-permission/-/pi-permission-0.2.9.tgz","fileCount":5,"integrity":"sha512-mtk3xnUoMrjuudMDcC9mB7JuTPjxPA8xdc83a140SB2xuIqnrvKrSy5wWpS2Wxv3n/yHWXReG1frVv/MGPGtKw==","signatures":[{"sig":"MEUCIQDWGY0GuYvNnbjwtEhH/9wFLgJ+RsEet9PjXsZ9EC6cYgIgKa3XHYMcL6Rw0L065QhbnXvV+URXJ6alWF+8dsjNSq4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCGaVrwEUr4pyABsgB81ALRG2ZaK/7XO5eyaYBKXhsuxQIgAXydei7ZBiy7v5qVU38eWi3pRzUUuGT8zRz8VLevgfI="}],"unpackedSize":38290},"name":"@bacnh85/pi-permission","gitHead":"90930b50f5fc0a4491a748ee1692db40f7ec358a","license":"MIT","scripts":{"test":"node --test extensions/test/*.test.js"},"version":"0.2.9","_npmUser":{"name":"bacnh85","email":"mail@bacnh.com"},"homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-permission","keywords":["pi-package","pi","permission","security","policy","allowlist","blocklist"],"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git"},"_npmVersion":"10.9.8","description":"Granular permission system for Pi — allow/ask/deny rules per tool with wildcard patterns, external-directory boundary, and a doom-loop guard. Config-driven, opt-in companion to Pi's container-first philosophy. Inspired by OpenCode's permission config.","directories":{},"maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-permission_0.2.9_1790555250773_0.028249344188979064"}}},"time":{"created":"2026-08-08T16:08:29.323Z","modified":"2026-09-28T00:27:31.034Z","0.1.0":"2026-08-08T16:08:29.912Z","0.1.1":"2026-08-11T09:00:27.520Z","0.1.2":"2026-08-15T04:31:36.841Z","0.2.0":"2026-08-17T13:55:36.248Z","0.2.1":"2026-09-12T09:11:10.469Z","0.2.2":"2026-09-14T15:31:12.206Z","0.2.3":"2026-09-19T02:20:26.141Z","0.2.4":"2026-09-21T03:50:28.005Z","0.2.5":"2026-09-23T00:28:18.567Z","0.2.6":"2026-09-24T00:23:55.979Z","0.2.7":"2026-09-27T03:23:31.335Z","0.2.9":"2026-09-28T00:27:30.888Z"},"bugs":{"url":"https://github.com/bacnh85/pi-extensions/issues"},"license":"MIT","homepage":"https://github.com/bacnh85/pi-extensions/tree/main/pi-permission","keywords":["pi-package","pi","permission","security","policy","allowlist","blocklist"],"repository":{"url":"git+https://github.com/bacnh85/pi-extensions.git","type":"git"},"description":"Granular permission system for Pi — allow/ask/deny rules per tool with wildcard patterns, external-directory boundary, and a doom-loop guard. Config-driven, opt-in companion to Pi's container-first philosophy. Inspired by OpenCode's permission config.","maintainers":[{"name":"bacnh85","email":"mail@bacnh.com"}],"readme":"# pi-permission\n\nGranular permission system for [Pi](https://pi.dev) — an opt-in companion to Pi's container-first philosophy for users who can't always containerize.\n\nConfig-driven `allow` / `ask` / `deny` rules per tool, with wildcard pattern matching, an external-directory boundary, and a doom-loop guard. Inspired by OpenCode's `permission` config.\n\n> Pi's default stance is *\"No permission popups. Run in a container, or build your own.\"* This package is the middle ground: a config-driven policy for users who run Pi without a container but still want guardrails.\n\n## Install\n\n```bash\npi install npm:@bacnh85/pi-permission\n```\n\n## Configuration\n\nAdd a `permission` object to `.pi/settings.json` (project), `~/.pi/agent/settings.json` (global; `PI_CODING_AGENT_DIR` overrides), or `~/.pi/agents/settings.json` — the first settings.json containing a `permission` object wins (files without one are skipped):\n\n```json\n{\n  \"permission\": {\n    \"*\": \"ask\",\n    \"bash\": { \"*\": \"ask\", \"git *\": \"allow\", \"npm *\": \"allow\", \"rm *\": \"deny\" },\n    \"edit\": { \"*\": \"deny\", \"src/*.ts\": \"allow\" },\n    \"write\": { \"*\": \"deny\", \"src/*\": \"allow\" },\n    \"read\": { \"*\": \"allow\", \"*.env\": \"deny\", \"*.env.*\": \"deny\" },\n    \"external_directory\": { \"~/projects/personal/*\": \"allow\" }\n  }\n}\n```\n\n### Actions\n\n| Action | Behavior |\n|--------|----------|\n| `allow` | Runs silently, no prompt |\n| `ask` | Prompts via the Pi UI (**Allow once / Allow for this session / Add to permanent allowlist / Deny**). \"Allow for this session\" skips prompts for the exact same call subject until the session ends; \"Add to permanent allowlist\" writes the `allow` rule into settings.json. Tools without a command/path subject get only Allow once/Deny. Dismissing the dialog blocks. Session promotions never override an explicit `deny`. |\n| `deny` | Blocks immediately |\n\n### Patterns\n\n- `*` matches zero or more of any character (including `/`)\n- `?` matches exactly one character\n- Everything else is literal\n- **Last matching rule wins** (OpenCode semantics)\n- `~` and `$HOME` expand at the start of path patterns\n\n### Rule keys\n\n| Key | Matches |\n|------|---------|\n| `bash` | the shell command |\n| `read` / `write` / `edit` | the file path |\n| `grep` / `find` / `ls` | the path (pattern-only searches have no subject) |\n| `external_directory` | deny-gate for paths outside the project cwd |\n| `*` | global default |\n\n## Flags\n\n| Flag | Description |\n|------|-------------|\n| `--yolo` | Auto-approve all `ask` prompts (explicit `deny` rules still enforced) |\n| `--auto` | Alias for `--yolo` |\n\n## Doom-loop guard\n\nBlocks the 3rd identical tool call in a row. Cheap insurance against model loops. Always on when `pi-permission` is configured.\n\n## Default security\n\nBy design, when no rule matches, `pi-permission` has **no opinion** (allows). This honors Pi's philosophy — the extension only acts when you've opted into rules. To lock down, set a `\"*\": \"ask\"` or `\"*\": \"deny\"` default.\n\nThe `.env` deny pattern (OpenCode's default) is a good baseline:\n\n```json\n{ \"read\": { \"*\": \"allow\", \"*.env\": \"deny\", \"*.env.*\": \"deny\", \"*.env.example\": \"allow\" } }\n```\n\n## Why\n\nPi's *\"no permission popups\"* philosophy is clean but binary: containerize, or trust everything. Many users run Pi locally without a container and still want to prevent `rm -rf`, protect `.env`, or restrict writes to `src/`. This package provides that middle ground, opt-in.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}