{"_id":"pi-claude-supervisor","_rev":"23-fcb8bc87eea9b79868fec49b951ff654","name":"pi-claude-supervisor","dist-tags":{"latest":"0.10.0"},"versions":{"0.2.0":{"name":"pi-claude-supervisor","version":"0.2.0","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.2.0","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"531ecf06a03c08f0455f67c4d3f49c415a233875","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.2.0.tgz","fileCount":25,"integrity":"sha512-5Xs1Ub9o5TjBG7iaKlj9uUP5g2a7W6FQKZWRcLVBF7mcX567+FvsQXW7CnXEb1scrfyFRF3Z7XXh/yKNmLHy6Q==","signatures":[{"sig":"MEYCIQCvf9EDFRxz2SRuq6GnWB0Tz6j21XL7hZAj5MCD2lQEYwIhAJufT96vdvhSmfNTbXQybrUW/7hAkEQ1/x6VklqNp6y7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":198771},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.2.0.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.2.0.tgz","_integrity":"sha512-5Xs1Ub9o5TjBG7iaKlj9uUP5g2a7W6FQKZWRcLVBF7mcX567+FvsQXW7CnXEb1scrfyFRF3Z7XXh/yKNmLHy6Q==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.2.0_1789218780462_0.4605979744301647","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"pi-claude-supervisor","version":"0.2.1","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.2.1","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"0b5b14bb4812180a35e7c093274686cc7b731b48","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.2.1.tgz","fileCount":25,"integrity":"sha512-Dw2BZCOOW0X0sjRB2J9qjBJiKQ/N0gCEgs9jfm3goIgaTYS1hZS+tzAjxUZz6GCfQvQq/8nK8hxVDAxMpJxYuA==","signatures":[{"sig":"MEUCIQDeY5sf8hw0d6VChRICkSehkJo3spkidoF5MY5Ozxw4gAIgcbrnXCQQT0ZwQPG5RsucLY+5VWqhjJN9n7hoYQhTx7o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":199169},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.2.1.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.2.1.tgz","_integrity":"sha512-Dw2BZCOOW0X0sjRB2J9qjBJiKQ/N0gCEgs9jfm3goIgaTYS1hZS+tzAjxUZz6GCfQvQq/8nK8hxVDAxMpJxYuA==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.2.1_1789222077577_0.5673259822125618","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"pi-claude-supervisor","version":"0.2.2","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.2.2","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"7fd51d07451cc043a8769fcefe6b256f2d299c27","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.2.2.tgz","fileCount":25,"integrity":"sha512-tejLrjDYXXDgU6agtzTJ8URv8jk7Qf8Q7iHe4T/0+Ewsk/U7H8P4IpmuAq/Qput9clAMGy664UAZiERp+KnC5w==","signatures":[{"sig":"MEUCIQCIS7ww766ruX89oSX2JrNAu9uSFEM1m70MuvWfiboB4wIgaT+vn4q+DF9tLNo2nrToxRIX+EId0cdw7Z9APEnguwU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":199811},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.2.2.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.2.2.tgz","_integrity":"sha512-tejLrjDYXXDgU6agtzTJ8URv8jk7Qf8Q7iHe4T/0+Ewsk/U7H8P4IpmuAq/Qput9clAMGy664UAZiERp+KnC5w==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.2.2_1789226313071_0.36078314136353007","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"pi-claude-supervisor","version":"0.3.0","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.3.0","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"d2eca3b29f9480f5308a763083ec0f8ccf9a8af0","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.3.0.tgz","fileCount":27,"integrity":"sha512-W5MOvut5Babo8bODH+sl/KnTKjaLJqnw7Wu8ot5aiqhd/3mXeJIze05+AyRck5vdi6BK2k/cgiWq6iEQRdX+OA==","signatures":[{"sig":"MEQCICDI4URpzfkZvXxFk/98EhHLunGnOwx7h4WSmzCf/+VIAiB1b1zPM9+HQewxlRLxGNNzYq4VeLy0d3s/Dtl3A7zL6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":264108},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.3.0.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.3.0.tgz","_integrity":"sha512-W5MOvut5Babo8bODH+sl/KnTKjaLJqnw7Wu8ot5aiqhd/3mXeJIze05+AyRck5vdi6BK2k/cgiWq6iEQRdX+OA==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.3.0_1789277832718_0.030336847124360133","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"pi-claude-supervisor","version":"0.4.0","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.4.0","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"684525e6dc620d7eda5b25b305eb797ae822f2cd","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.4.0.tgz","fileCount":28,"integrity":"sha512-0tQ1k/fqTwLqSkaDgTQgjzOQxnzkeljrLjcmGk+rl/+uVmXuXTZ/iCDdACTFTIgK2S6Pje3Y0VPF9l3ifxhrcA==","signatures":[{"sig":"MEQCIBqt2d5IrPGKyM0OptEbtgtLN6qWAZKNqzaNHDoPxEaqAiBlyiNAqYOj7arYUJ1dxItD3jimBFMOqtkWRvHYne7RPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":299925},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.4.0.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.4.0.tgz","_integrity":"sha512-0tQ1k/fqTwLqSkaDgTQgjzOQxnzkeljrLjcmGk+rl/+uVmXuXTZ/iCDdACTFTIgK2S6Pje3Y0VPF9l3ifxhrcA==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.4.0_1789323403590_0.6723910626075456","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"pi-claude-supervisor","version":"0.4.1","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.4.1","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"efd7a431012663c6929da4f3c0cc4829deb312ad","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.4.1.tgz","fileCount":28,"integrity":"sha512-Wbhcs54DJ675HixMMiuh2DY9qjUjwoZb8RtpKf0r8dTBvjZ/+lI7G3QG1MoYgXUAxZrG3PCZht45R0ZVy+Na0w==","signatures":[{"sig":"MEQCIDYuZTwNKjDUQOmStpzyQS2VWLfJZGnQYWrHf4tKv8lwAiAql+6P2Y6CZdB1eL0V4Mq8E95aT0s/FSw9K9l48a+88w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":303376},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.4.1.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.4.1.tgz","_integrity":"sha512-Wbhcs54DJ675HixMMiuh2DY9qjUjwoZb8RtpKf0r8dTBvjZ/+lI7G3QG1MoYgXUAxZrG3PCZht45R0ZVy+Na0w==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.4.1_1789355034674_0.12350395396458969","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"pi-claude-supervisor","version":"0.5.0","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.5.0","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"8d675d034c9a2b89d28c372d110fb3d3d01c64de","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.5.0.tgz","fileCount":30,"integrity":"sha512-62XjGZap/hh1+9lYU0+zoQJIcqrfRFcUQLQ9tD2KgtjolEuk8UuZrOYIo0AjTWUfWCgWQb4ckLlybkW1eFesrQ==","signatures":[{"sig":"MEQCIEWxiwRdEioJ03f/52+rPRkM55JtDqPl3dNrwav+kHsGAiBz8brb1FCWg8fvnpPTMi1+ydViXlLukhDxSRyZGDqZbA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":346966},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.5.0.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.5.0.tgz","_integrity":"sha512-62XjGZap/hh1+9lYU0+zoQJIcqrfRFcUQLQ9tD2KgtjolEuk8UuZrOYIo0AjTWUfWCgWQb4ckLlybkW1eFesrQ==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.5.0_1789367415131_0.08821215685344774","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"pi-claude-supervisor","version":"0.5.1","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.5.1","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"8980312928c508c0a95dbb51fd817c3d20ef5be1","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.5.1.tgz","fileCount":32,"integrity":"sha512-yC3+MeHLQEofjqpFnrGHi++nSr4E7nvAXai7+CnzHcOBsis+oAVusycx4BNc4g7LoLPGexWCz8OD2Bsjo0z3Jg==","signatures":[{"sig":"MEUCICuSAl938M5NMTXz3Bu8uSXulBghtqMHGHmeT0tCpd0pAiEAnXMsFCugyp7cY0k7Ur0lPFebKrU5/rquqn/vyFV7t2g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":384953},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.5.1.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.5.1.tgz","_integrity":"sha512-yC3+MeHLQEofjqpFnrGHi++nSr4E7nvAXai7+CnzHcOBsis+oAVusycx4BNc4g7LoLPGexWCz8OD2Bsjo0z3Jg==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.5.1_1789379562268_0.6668151667270623","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"pi-claude-supervisor","version":"0.5.2","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.5.2","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"a76dc122b5adbbc1019c56fb5381a0c4ddf9ae8a","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.5.2.tgz","fileCount":33,"integrity":"sha512-qVFeFaZvccJsnw+0ps+3LoaKFCJi0yaBdWpMk9ad+suB2mCecA2ufAzILFa994Za//GmEIiD+/2iXoJnyl7v0g==","signatures":[{"sig":"MEUCIQC5p73cekNujVgO/rTVVWgqLBaeEsBaqh3M78t/wUD6jgIgDI+s4F5FKQoaWQlP+ALYyd/i7itDJPl0OS+Et9neEBc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":437642},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.5.2.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.5.2.tgz","_integrity":"sha512-qVFeFaZvccJsnw+0ps+3LoaKFCJi0yaBdWpMk9ad+suB2mCecA2ufAzILFa994Za//GmEIiD+/2iXoJnyl7v0g==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.5.2_1789398226516_0.528556788164003","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"pi-claude-supervisor","version":"0.5.3","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.5.3","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"dce7e263c67b82cda4e3255389330560ac76ecd4","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.5.3.tgz","fileCount":34,"integrity":"sha512-E8GzZlkY+ywJcGCA02orcwOKNUzGz2e2I721s6/Y53Xurjclb56id3JtdJb+3Q19HbrfgpmpgobTQ+s6/s/zMg==","signatures":[{"sig":"MEUCIQDKdQtrdZ8h17aesx0idhLE42YZjZl2KP3gXkP26f9QTwIgEO8gXADONPwOZExG8Myrz+EwMYsYF5sI08LWJtVJ0NQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDhO32yrYVU0xyzsE8al0NEPQB6RStxKMOtI3j5sf9PrAIgYFSoq9Ho6v6i1B7d+EXqDRccYg0DWG85+jDMXi67S9Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.5.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":506255},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.5.3.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.5.3.tgz","_integrity":"sha512-E8GzZlkY+ywJcGCA02orcwOKNUzGz2e2I721s6/Y53Xurjclb56id3JtdJb+3Q19HbrfgpmpgobTQ+s6/s/zMg==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.5.3_1789444909428_0.9991381500798895","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"pi-claude-supervisor","version":"0.5.4","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.5.4","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"24d2b4c34946595a7d435d8995042264aa61648c","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.5.4.tgz","fileCount":35,"integrity":"sha512-rR3aaxjsdQDbH4teH//7g66kQ3sqjmBuuRzMJlgS7TYchPzVTpZQG/rDNJ0gsdsrrX3SlC72b3ici+mLViDZMw==","signatures":[{"sig":"MEUCID+Ou3YKwubElVdA/cZS98LOl3DfL6UwlkOAcgqjw6yjAiEA9X4JiBwJRoOSaBM3j+v4/k8AgGT4C5SP4E97PH6QOq4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDlQyGsJrMi9oxE2c+kU6X8C1syyLFxRKj1uSbEG+tdwwIhAInL+CuHUTsOR+TjqYrLEmy7Jo3/+stZALFiXISPupq5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.5.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":577646},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.5.4.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.5.4.tgz","_integrity":"sha512-rR3aaxjsdQDbH4teH//7g66kQ3sqjmBuuRzMJlgS7TYchPzVTpZQG/rDNJ0gsdsrrX3SlC72b3ici+mLViDZMw==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.5.4_1789488372459_0.8211575778453089","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"pi-claude-supervisor","version":"0.5.5","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.5.5","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"c0fae8bb9a91f58b1fd6fa6654b312fddeb6bde0","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.5.5.tgz","fileCount":35,"integrity":"sha512-zC3cR9w9fnqyMUx4nvbUh1N82Fb3zu2W1wgjUoXluemTXSIdGNYqmvlJxMZ0qK1tAJJpbyekMVQws1lsdnz0ZA==","signatures":[{"sig":"MEYCIQD6y5vmVuUMiNqJbAyjJvFMgrtC6dkRg2JxRP7sIkZ0YQIhAMqBHuOszauluA7plvLXFwGfBFCHdqlpx3FBLscva76y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD6i51H5wBUKPL4yF3xpRjVC/uJLGxSdToVtEfc2MLingIhAI/Z2q5mf+ugzNYwNwF3i8gY8Sunf2hioK1FrwlIY8dR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.5.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":578374},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.5.5.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.5.5.tgz","_integrity":"sha512-zC3cR9w9fnqyMUx4nvbUh1N82Fb3zu2W1wgjUoXluemTXSIdGNYqmvlJxMZ0qK1tAJJpbyekMVQws1lsdnz0ZA==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.5.5_1789490632887_0.636497224842181","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"pi-claude-supervisor","version":"0.6.0","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.6.0","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"708d1efb4c8f5ddd2d80441c3974ec2fcad3e9bf","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.6.0.tgz","fileCount":35,"integrity":"sha512-b58vZetPuA3g+I6oh5RatYgYh3kfoxvjPLO3Lh6BRTJQCC4JCmISzVX+BhWHFAPk9yG88OWPihSHjB401YGAYg==","signatures":[{"sig":"MEUCIH85DFz67yQkHtGxlV5Ef+OTflm0ngUCdiKEqzxa0P9SAiEAshplvvIsR0h9sIxnGp5UwbP9B/B20hVp359nBoMqaKQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBPzx5luzh0iXouvzpLt8uFj7RFSzgRqh7RWMTteubWvAiA7ezNzLtBoST2tC9n/5+E4UtPAEC82GiJAwa2WwivBsQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":638598},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.6.0.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.6.0.tgz","_integrity":"sha512-b58vZetPuA3g+I6oh5RatYgYh3kfoxvjPLO3Lh6BRTJQCC4JCmISzVX+BhWHFAPk9yG88OWPihSHjB401YGAYg==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.6.0_1789562854712_0.6442226508717328","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"pi-claude-supervisor","version":"0.7.0","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.7.0","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"c412e84281e4b5b35d2a32f45f36a8307bd65455","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.7.0.tgz","fileCount":43,"integrity":"sha512-m6vmUN2nGbLb1aj4f/DjzPmIqI/Q4V156tgQUeUIuRU/jf+daGXuFBSHfbK7tsVO0uDzAG6B6YcJZsW61rxtjA==","signatures":[{"sig":"MEQCIQD+cLSgdeeFnSGhd6jlwGmiI+zy5d/gwEcD9FIEwosF8AIfbZtPNuLfcW1ylwHSV2y8wZ+erHUoR8GrOw8Uzonncw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHazuhpzndv7zN1f15cFuLObvyaFaHBe4ghGqbxxpnJaAiEAqgxgEpzAVz3qk4avCQl7fLGnr3DtL8wHFTmDStdOBSw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":853219},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.7.0.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.7.0.tgz","_integrity":"sha512-m6vmUN2nGbLb1aj4f/DjzPmIqI/Q4V156tgQUeUIuRU/jf+daGXuFBSHfbK7tsVO0uDzAG6B6YcJZsW61rxtjA==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.7.0_1789637108672_0.8360889332375634","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"pi-claude-supervisor","version":"0.7.1","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.7.1","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"69c355c9b6411a03b00d02ce6c573189b66933b6","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.7.1.tgz","fileCount":43,"integrity":"sha512-yuk+3KdsWe5ylbgCQgfS9ddjrGwGyN9kg1vD20bHq9nnY3pW+0rhNk9irbRwSF7A4x6K4icfMR2+f+H5C2v0NQ==","signatures":[{"sig":"MEUCIEffayqn3RWZeZQLOLYfHnYDtwdLM0oHxd6Phny7yyFVAiEAl9p44MQSQSMNcqIsgMSq3DMfXi3n6EA/zWgBbf2kF2U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEBIkEzDt1BOEvS+Rh03zcBn5oa7Gp1MCV7YmLd6RWkvAiEA82Ie0zlCIbFvTg+Y7p1Y2di5HxpvweCazuJ2ODK8Vw0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":868164},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.7.1.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.7.1.tgz","_integrity":"sha512-yuk+3KdsWe5ylbgCQgfS9ddjrGwGyN9kg1vD20bHq9nnY3pW+0rhNk9irbRwSF7A4x6K4icfMR2+f+H5C2v0NQ==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.7.1_1789644098368_0.6153315626977718","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"pi-claude-supervisor","version":"0.7.2","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.7.2","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"0f38920589fce00e7a94a2d9761a680dcf397d75","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.7.2.tgz","fileCount":43,"integrity":"sha512-iJNb7MrzRPPlQs54kd+19b/aRvx9dOjjAtHiwy7a52hwd/NrK8ma5ONVzBovPs1hEASTQzj6QuSE87mykbiLOQ==","signatures":[{"sig":"MEYCIQCnPDCZEl3o60X3pkmIKg2+PGwAlc+qSrvvu6Yw4zRFYgIhAPYVvQmcxUGxRzQbXmn6kdUhGTXiV+bBuViiQmP1mrpI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD56jxAInnRxiOB18yExomClxQvXZkGtNbbJfX3E4wsbgIhAJYdUZV1u/+em3CWm2hPK8iZjV6IrXMoh/evki5LgFAK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":874832},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.7.2.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.7.2.tgz","_integrity":"sha512-iJNb7MrzRPPlQs54kd+19b/aRvx9dOjjAtHiwy7a52hwd/NrK8ma5ONVzBovPs1hEASTQzj6QuSE87mykbiLOQ==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.7.2_1789652964355_0.5552273750317895","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"pi-claude-supervisor","version":"0.7.3","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.7.3","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"f9496b3dc573f0fee378f23cc0c7e776fb051a1a","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.7.3.tgz","fileCount":43,"integrity":"sha512-qAFtQ0rinX74AlNkOFz4Q4JKjNNx4igxaOZu9blu8UQXLDZ32vvkwXS3CujmgDFuRS/6d3PoWAs0MBq73r6E+w==","signatures":[{"sig":"MEUCIQCGF+BWoQbAcKs04OK31vjnMmPeLrGQ4LTffbhkX+G2/wIgC0IJDkJY1HAhf+d7xd0Na12Nnj6tXkTSzYeMX4E1fng=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCw/ZK50ayKcpDAuaZvpv+GOAGEdU6tkYwUdRBXsBiQaAIhAOoGxUrhTl7GqHv5XGFzRmId0ecaJ8UPgF3og/v0USyK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":880831},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.7.3.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.7.3.tgz","_integrity":"sha512-qAFtQ0rinX74AlNkOFz4Q4JKjNNx4igxaOZu9blu8UQXLDZ32vvkwXS3CujmgDFuRS/6d3PoWAs0MBq73r6E+w==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.0","typebox":"1.3.30","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.7.3_1789657253651_0.1273045900942691","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"pi-claude-supervisor","version":"0.8.0","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.8.0","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"b46cadbaa7ebc33367e79107b4a14aac3bfe719d","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.8.0.tgz","fileCount":43,"integrity":"sha512-rMPZx7TmjM++oGUBrhvEz63MVmbV25676q0Bhih95ZDKagKlzTRxjuHPEP+97SiUCXXUoYvkqnClBUDFGtOIGQ==","signatures":[{"sig":"MEQCIHENFSzCiecsNkNaEAFon3Qowq+XlkdOtvL05jqwvPPDAiASRLPD4XZaMMsgclidgqn43+/SLrnzCJa/Qx9dT08zng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDMW1li/HY10caxrVTxw9gnozFzJo0aZIpPs/vqWhD9bAiAHopsI/XqR0icXVOf0FFhbnPl3oBdAtQmBYcdD2n7DlA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":916223},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.8.0.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.8.0.tgz","_integrity":"sha512-rMPZx7TmjM++oGUBrhvEz63MVmbV25676q0Bhih95ZDKagKlzTRxjuHPEP+97SiUCXXUoYvkqnClBUDFGtOIGQ==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.1","typebox":"1.3.32","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.8.0_1789870344507_0.44542199942660754","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"pi-claude-supervisor","version":"0.8.1","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.8.1","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"996264d951cebbcaef6c27817ead372b170f6336","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.8.1.tgz","fileCount":43,"integrity":"sha512-L1FmW3kuc0FCiua+eYZ5fQ3Yki001lBFY0RL9lNjp70xlZa6hHAt4xDiGd/OlxOyXqQsiElO/Pp/hp6yxD2DmQ==","signatures":[{"sig":"MEYCIQDC+N2lKuemyrBm4RT1kWXlAV3FEFgz2bkNf6lvrUZ+zQIhAIOjwZfHgrICYaPnow9oEQsRWBK8JyeGgJiUa4ODHzTt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFkyuRVjJWID9+pZicfXwt8iUK31sDuAEynVRvzryWw3AiBoFf5kAOjXth8gcQn66ivnqKG+NaOtFvMkl9xV9QnUJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":922420},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.8.1.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.8.1.tgz","_integrity":"sha512-L1FmW3kuc0FCiua+eYZ5fQ3Yki001lBFY0RL9lNjp70xlZa6hHAt4xDiGd/OlxOyXqQsiElO/Pp/hp6yxD2DmQ==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.1","typebox":"1.3.32","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.8.1_1789878563970_0.07568054915170053","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"pi-claude-supervisor","version":"0.9.0","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.9.0","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"491db7fffdc377bc0c3383c79e590ef12cd13419","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.9.0.tgz","fileCount":43,"integrity":"sha512-ud8mYUM5p5UXbyLdafTln2fq+RhcD8qREJD3uOCyNmVKlnvxO/QC6kO2z/AbyLubevOO6X6XTBk9chpmgftUUQ==","signatures":[{"sig":"MEYCIQCqAKeiltfqsU8lTq0SYpVT4MzCR3pHaXo7U71Dx22RDAIhAOCAeMJ/rLt1uNEAcEBn1qUIDJYZZdJs7/11twQ9sUDA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFWA/lZid6YGg2eWl3FsVa/Dtd1dSsRa30A//TmnvU7dAiAHLzKgJnPSbdl6iOiZYT8WA4gVZZKlC9L6ZNLjBILw3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1020829},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.9.0.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.9.0.tgz","_integrity":"sha512-ud8mYUM5p5UXbyLdafTln2fq+RhcD8qREJD3uOCyNmVKlnvxO/QC6kO2z/AbyLubevOO6X6XTBk9chpmgftUUQ==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.1","typebox":"1.3.32","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.9.0_1789908413880_0.6731724933140799","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"pi-claude-supervisor","version":"0.9.1","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.9.1","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"d4f6b60943b8a0d5ae699bfe74ecc1f1c5476a4f","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.9.1.tgz","fileCount":44,"integrity":"sha512-ygOemgqz7RKXjVQhYPcs93vbn9cByjhbxLp4pStO4uraJ69HcKq/5aBqx//vGEVlhlMeziH4T/I211zvYU1FKA==","signatures":[{"sig":"MEQCIDviCfXNSZDMJbpTrXEely6yoTiGr3cisbGbdrcNzz6qAiBoeaT7kBDz6+xMMUyeqzFMUwCeaOjaVCqs+/b47m348Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHbh3cw92mJlTVSH51QM1I9Lz7ubJciCSHjdAHSz98MBAiA7jgpmDJ18mdmitpihv6zyQ7h7xkiyGroL7k7TYdtkNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1067594},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.9.1.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.9.1.tgz","_integrity":"sha512-ygOemgqz7RKXjVQhYPcs93vbn9cByjhbxLp4pStO4uraJ69HcKq/5aBqx//vGEVlhlMeziH4T/I211zvYU1FKA==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.21.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.1","typebox":"1.3.32","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.9.1_1790215121241_0.9070405004580149","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"pi-claude-supervisor","version":"0.9.2","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"license":"MIT","_id":"pi-claude-supervisor@0.9.2","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"homepage":"https://github.com/btnalit/pi-claude-supervisor","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"5f0ad2aff5e6bcac1f2ee4d363bfb39aaad0446a","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.9.2.tgz","fileCount":44,"integrity":"sha512-j+05xCgKkGZZSBu5w1F4sQ6RBuQ6094V/5Bd2rXqTkyR+Ru1NV3GEnMGcq8lYlp/+aDui0kL9few+FnlQJyy6w==","signatures":[{"sig":"MEUCIDrAZ5B/ICiUvAja27jYjhEBF1W/ZrqiRjLAjUiBpiGjAiEAwRzYCDDZsIayF8w0QSAuk/Y/A8bIpAb7DuCZLtgihFg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFVqRfIEoVzrsHotjpr/qCjwOMGYeROlwAB1kgeDyTwKAiEA/N+Q/E0WoSV0xI/5ofFeE6+poACcoMRVsXLlQZnxzh8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.9.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1079748},"type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.9.2.tgz","engines":{"node":">=22.19"},"scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","spike:decision":"node scripts/spike-decision.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.9.2.tgz","_integrity":"sha512-j+05xCgKkGZZSBu5w1F4sQ6RBuQ6094V/5Bd2rXqTkyR+Ru1NV3GEnMGcq8lYlp/+aDui0kL9few+FnlQJyy6w==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"_nodeVersion":"24.21.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.1","typebox":"1.3.32","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-claude-supervisor_0.9.2_1790223574562_0.5189347363826584","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"pi":{"extensions":["./src/index.ts"]},"_id":"pi-claude-supervisor@0.10.0","bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"dist":{"shasum":"9218db43e7b64ed3e085a1ea24089676f3f1dacc","tarball":"https://registry.npmjs.org/pi-claude-supervisor/-/pi-claude-supervisor-0.10.0.tgz","fileCount":46,"integrity":"sha512-lNjj7Ms4Q6jJhOQZeNSCqlHeWFJjyLc48aO1WbIQ1+1vSBXG15qf3lSTwVeB9PXT4u0Vs3BQ2J7X9pxlZU8IMw==","signatures":[{"sig":"MEQCIDJx/AAVIJ3DkkxCiTFIuGjVr05lq7NUZVobgnuVuKsvAiB81ME+3HLWDQxE5mgGXU9+Y7YaXEafxKaGJf1s3M6KYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEtjqR2kFsadH0JmYYsQuQv1zrVDKjbt+x7bNSfLPdwdAiEAs6C4RECfemmehpvR6dHymXefuTOZDrZCNTpxxwLnn3o="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-claude-supervisor@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1216363},"name":"pi-claude-supervisor","type":"module","_from":"file:/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.10.0.tgz","engines":{"node":">=22.19"},"license":"MIT","scripts":{"test":"node --test \"src/**/*.test.ts\" \"scripts/*.test.mjs\"","build":"node scripts/build-package.mjs","check":"npm run typecheck && npm test && npm run check:package && npm run check:docs && npm run check:automation","test:pi":"node scripts/test-pi.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/check-docs.mjs","spike:tmux":"node scripts/spike-claude-tmux.mjs","test:install":"node scripts/test-install.mjs","check:package":"node scripts/check-package.mjs","spike:signals":"node scripts/spike-claude-signals.mjs","spike:decision":"node scripts/spike-decision.mjs","check:workflows":"bash scripts/check-workflows.sh","spike:transport":"node scripts/spike-claude-transport.mjs","check:automation":"node scripts/check-automation.mjs","spike:automation":"node scripts/spike-claude-automation.mjs","spike:permissions":"node scripts/spike-claude-permissions.mjs","spike:tmux-interactive":"node scripts/spike-claude-tmux-interactive.mjs"},"version":"0.10.0","_npmUser":{"name":"btnalit","email":"btnalit@live.com"},"homepage":"https://github.com/btnalit/pi-claude-supervisor","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"_resolved":"/home/runner/work/pi-claude-supervisor/pi-claude-supervisor/dist/pi-claude-supervisor-0.10.0.tgz","_integrity":"sha512-lNjj7Ms4Q6jJhOQZeNSCqlHeWFJjyLc48aO1WbIQ1+1vSBXG15qf3lSTwVeB9PXT4u0Vs3BQ2J7X9pxlZU8IMw==","repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"_npmVersion":"11.19.0","description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","directories":{},"maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"_nodeVersion":"24.21.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"2.9.1","typebox":"1.3.32","typescript":"7.0.2","@types/node":"22.20.1","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-claude-supervisor_0.10.0_1790246271657_0.876140283868055"}}},"time":{"created":"2026-09-12T13:13:00.279Z","modified":"2026-09-24T10:37:52.081Z","0.2.0":"2026-09-12T13:13:00.616Z","0.2.1":"2026-09-12T14:07:57.706Z","0.2.2":"2026-09-12T15:18:33.205Z","0.3.0":"2026-09-13T05:37:12.905Z","0.4.0":"2026-09-13T18:16:43.751Z","0.4.1":"2026-09-14T03:03:54.819Z","0.5.0":"2026-09-14T06:30:15.270Z","0.5.1":"2026-09-14T09:52:42.402Z","0.5.2":"2026-09-14T15:03:46.641Z","0.5.3":"2026-09-15T04:01:49.510Z","0.5.4":"2026-09-15T16:06:12.557Z","0.5.5":"2026-09-15T16:43:52.998Z","0.6.0":"2026-09-16T12:47:34.788Z","0.7.0":"2026-09-17T09:25:08.787Z","0.7.1":"2026-09-17T11:21:38.466Z","0.7.2":"2026-09-17T13:49:24.478Z","0.7.3":"2026-09-17T15:00:53.776Z","0.8.0":"2026-09-20T02:12:24.618Z","0.8.1":"2026-09-20T04:29:24.047Z","0.9.0":"2026-09-20T12:46:53.986Z","0.9.1":"2026-09-24T01:58:41.340Z","0.9.2":"2026-09-24T04:19:34.668Z","0.10.0":"2026-09-24T10:37:51.748Z"},"bugs":{"url":"https://github.com/btnalit/pi-claude-supervisor/issues"},"license":"MIT","homepage":"https://github.com/btnalit/pi-claude-supervisor","keywords":["pi-package","pi","pi-agent","claude-code","supervisor","worker"],"repository":{"url":"git+https://github.com/btnalit/pi-claude-supervisor.git","type":"git"},"description":"A policy-gated Pi supervisor for observing and verifying Claude Code workers.","maintainers":[{"name":"btnalit","email":"btnalit@live.com"}],"readme":"# pi-claude-supervisor\n\n[![CI](https://github.com/btnalit/pi-claude-supervisor/actions/workflows/ci.yml/badge.svg)](https://github.com/btnalit/pi-claude-supervisor/actions/workflows/ci.yml)\n[![npm](https://img.shields.io/npm/v/pi-claude-supervisor)](https://www.npmjs.com/package/pi-claude-supervisor)\n[![MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSE)\n\nEnglish · [简体中文](README.cn.md)\n\n## What it is\n\npi-claude-supervisor is a standard [Pi](https://pi.dev) agent extension package that\nsupervises Claude Code for unattended local development. Pi owns the task's\nlifecycle, state machine, policy decisions, acceptance checks, and an\nindependent Review step; Claude Code is the Worker that does the editing. The\nextension is a single `pi install`: Pi discovers and loads it itself, there is\nno separate build or binary, and there is nothing to configure inside Pi\nbeyond environment variables.\n\nThere is a hard boundary the Worker can never cross, regardless of its own\npermission settings: it may not push to a remote, merge into `main` or an\nintegration branch, open a pull request, or run a remote CLI mutation;\n`.git` metadata writes and destructive rewrites of protected branches are\ndenied outright. Everything else — edits, tests, shell commands, local\ncommits — follows the policy you configure. The extension itself never\nmerges, deploys, releases, or publishes anything at runtime.\n\nHow the loop works, once a task starts:\n\n- The Worker works a turn; when it stops (`turn_completed`), Pi's Decision\n  Worker — a persistent Pi session with read-only tools — chooses to\n  continue, redirect, answer a question, verify, stop, or park the task.\n- `verify` runs the acceptance checks (the default `git diff --check`, or the\n  checks from a `--spec` file).\n- An independent Reviewer — a fresh, read-only Pi session — returns pass,\n  revise, or human.\n- `revise` sends the Worker a bounded repair turn (up to `maxRepairRounds`);\n  a pass promotes the work to a `completed` candidate.\n- Unresolvable work is parked as `blocked` (a non-publishable candidate, not\n  a crash); crashes and timeouts become `failed`.\n- Every terminal state emits a candidate notice, in the Pi UI and optionally\n  to a webhook (WeCom or generic JSON, with retries).\n\n## Quick start\n\nRequirements: Pi 0.85+, Node.js 22.19+, Claude Code 2.1.270+ (interactive\nhooks verified on 2.1.273), Linux for the cgroup and tmux features.\n\nInstall it like any other Pi extension:\n\n```text\npi install npm:pi-claude-supervisor\n```\n\nThat's the whole installation — Pi loads the package's `./src/index.ts`\nextension directly and registers the `/supervise` command. Configuration is\nenvironment variables only, set before starting Pi (or in\n`~/.config/pi-claude-supervisor/env`):\n\n```bash\nexport PI_CLAUDE_SUPERVISOR_MODE=auto\nexport PI_CLAUDE_SUPERVISOR_TRANSPORT=tmux\n# Optional: candidate/failure notifications\nexport PI_CLAUDE_SUPERVISOR_HUMAN_WEBHOOK_URL='https://example.invalid/webhook'\nexport PI_CLAUDE_SUPERVISOR_HUMAN_WEBHOOK_FORMAT=generic\n```\n\nThen, inside any Pi session:\n\n```text\n/supervise start implement the requested change\n/supervise adopt-tmux my-tmux-session implement the requested change\n/supervise start --deadline 8h a large multi-worktree change\n```\n\nBoth accept `--spec <file>` and `--deadline <duration>` (`8h`, `90m`, `0` for\nno deadline) ahead of the task text.\nWatch a task with `/supervise status <task-id>` or `/supervise sessions`; for\na tmux transport, attach directly with the `tmux -S <socket> attach -t\n<session>` command each of these prints. `/supervise stop <task-id>` closes\nthe task; on the interactive tmux transport a completed task instead leaves\nthe session open for you by default (see below).\n\n## Modes and transports\n\n`PI_CLAUDE_SUPERVISOR_MODE=auto` (or `PI_CLAUDE_SUPERVISOR_AUTOMATION=1`)\nenables automatic supervision — the Decision Worker/Reviewer loop above.\nWithout it, `/supervise` still exposes its commands, but a Worker runs\nwithout that loop.\n\n| Transport | `TRANSPORT` | `TMUX_MODE` | What the Worker runs as | Use it when |\n| --- | --- | --- | --- | --- |\n| Interactive tmux | `tmux` | `interactive` (default) | The real, unmodified Claude Code TUI in a tmux pane, driven by Claude Code hooks | You want to watch or occasionally type into the exact session Claude uses |\n| Headless JSONL | `jsonl` (default in `auto` mode) | – | `claude -p --input-format stream-json`, no terminal | Every permission-relevant command must be visible to the Supervisor |\n| tmux bridge | `tmux` | `bridge` | Claude's stream-json protocol, rendered into a tmux pane | A visible pane with the older structured (pre-hook) transport |\n| Manual (process-pipe) | `process-pipe` (default when `MODE` is unset) | – | The worker's stdin/stdout as plain text | Exposing the commands without automatic supervision |\n\n## Interactive tmux mode (hooks)\n\n`PI_CLAUDE_SUPERVISOR_TRANSPORT=tmux` defaults to running the real,\nunmodified Claude Code TUI in the tmux pane — the same interface you would\nsee running `claude` yourself — instead of the structured stream-json\nbridge. You can attach to the printed `attach=...` command at any time and\nwatch, or type into the session yourself; Pi reports its events through\nClaude Code's own hooks rather than scraping the screen.\n\nWhen the extension loads with `PI_CLAUDE_SUPERVISOR_TRANSPORT=tmux` in\ninteractive mode (the default `TMUX_MODE`), it automatically installs a small\nrelay command for the eight Claude Code hook events it uses into\n`~/.claude/settings.json` (or `$CLAUDE_CONFIG_DIR/settings.json`) — idempotent,\nand announced once in the Pi UI. Set\n`PI_CLAUDE_SUPERVISOR_AUTO_INSTALL_HOOKS=0` to opt out; `/supervise\nuninstall-hooks` removes the entry, and `/supervise install-hooks` remains\navailable to install it by hand. The relay is a ~1ms no-op in any Claude\nsession no Supervisor is listening for. An owned `/supervise start` does not\ndepend on this at all — it passes its own `--settings` file — but\n`/supervise adopt-tmux` runs inside your normal Claude Code configuration and\nneeds the relay installed there.\n\n```text\n/supervise start <task>\n/supervise adopt-tmux <tmux-session> <task>\n```\n\nPi intervenes when Claude stops a turn (`Stop`; an API/model failure mid-turn\narrives as `StopFailure` and is treated as an errored turn the Decision\nWorker can retry, and a minute of idle prompt with no stop signal closes the\nturn as a safety net), when Claude is about to show you a real permission\nprompt (only then — every ordinary tool call is otherwise left to your own\nClaude Code permission mode), when Claude asks `AskUserQuestion` (the\nDecision Worker picks an answer and Claude continues with it as ordinary\ntext, exactly as in headless mode), and when the session exits. Before that\nprompt, a `PreToolUse` veto point only ever denies a known direct remote\npush/merge/PR or other destructive/protected-branch operation (or forwards an\n`AskUserQuestion`); it never second-guesses a normal edit, read, or local\ncommand — those reach your own permission mode with no decision from Pi at\nall.\n\n**What this means for the boundary.** Interactive mode deliberately skips the\nheadless-mode check that refuses inherited `Bash` pre-authorization or an\n`auto`/`bypassPermissions` mode in your Claude settings: your own\nconfiguration governs what Claude may do without asking, exactly as when you\nrun Claude yourself. Anything your settings already allow never reaches the\nDecision Worker; its judgment applies only where Claude would have asked\n*you*. The hard boundary (remote push/merge/PR, remote CLI mutation, `.git`\nwrites, destructive protected-branch rewrites) is enforced by `PreToolUse`\nregardless of permission mode — verified against `auto` mode on Claude Code\n2.1.273 — and is the only guarantee this mode makes beyond your own\nsettings. Use headless (`bridge`) mode when every `Bash` call must be visible\nto the Supervisor.\n\n**Adopting an idle session.** `adopt-tmux` types the task into the session\nonly when Claude is idle at its prompt; a session caught mid-turn keeps its\ncurrent work and is judged on its next `Stop` instead.\n\n**Human coexistence.** If you type into the attached session, automation\npauses (`human_takeover`, visible as a warning) until you run `/supervise\nresume-auto <task-id>`; the turn that completed while you were driving is\nreplayed to the Decision Worker at that point, so nothing already finished is\nlost. If you type and walk away, the pause lifts on its own once the Worker has\nsat idle for `HUMAN_IDLE_RESUME_MS` (default 30 minutes) after both your last\nprompt and the end of your last turn (`automation_auto_resumed`); a turn left\nwaiting mid-way (a Claude dialog, say) is reported once instead. An explicit\n`/supervise takeover`, and a recovered task until you resume it, waits for\n`resume-auto`.\n\n**Completion hands the session back.** Unlike other transports, a completed\ntask by default disconnects Pi from the session instead of closing it, so you\ncan keep working in the same window or review what Claude did; `/supervise\nstop <task-id>` closes it explicitly, and a blocked or failed candidate still\nstops the Worker as usual. Set\n`PI_CLAUDE_SUPERVISOR_CLOSE_WORKER_ON_COMPLETION=1` to restore the old\nclose-on-completion behavior. The hand-back is clean, not a bare disconnect:\nbefore reporting the candidate ready, Pi moves every process out of its\nprivate cgroup into its parent (instead of killing them) and stops the\nguardian process, and the tmux server and pane are left alone — the session\nsurvives a Pi restart with nothing left owing it. Afterward it is an ordinary\ntmux session with no Supervisor attached; `tmux -S <socket> attach -t\n<session>` reaches it directly, and `/supervise adopt-tmux` can babysit it\nagain exactly as it would any other externally created session.\n\n**Cost accounting limits.** The TUI's `Stop` hook has no `total_cost_usd` or\ntoken `usage` (that only comes from Claude's own `result` stream-json record,\nwhich the TUI does not emit), so cost tracking in interactive mode only\ncounts turns, not dollars; `--max-budget-usd` is also unavailable (Claude\nCode only enforces it under `-p`) and is not passed to an interactive launch.\nSet `autonomy.maxWorkerCostUsd` expecting it to have no effect in interactive\nmode, or use bridge/jsonl mode when a hard cost cap matters.\n\n**Trust dialog.** The very first time Claude Code runs in a given directory\nit shows its own one-time \"do you trust this folder\" dialog before any hook\nfires. For a session that `/supervise start` launched, the launcher accepts\nit automatically — only when the pane's directory is the task directory. An\nadopted session was started by you, so you already answered it.\n\n## Headless mode (JSONL)\n\n`PI_CLAUDE_SUPERVISOR_TRANSPORT=jsonl` runs Claude as `claude -p\n--input-format stream-json`, with no terminal at all; it is the default\ntransport once `PI_CLAUDE_SUPERVISOR_MODE=auto` is set. Every permission\nrequest Claude makes is answered by the Supervisor — the deny list, routine\nin-cwd edits, and read-only/local-dev shell commands are answered by policy\nalone, and everything else goes to the Decision Worker. `worker_usage`\nevents carry full token and cost accounting from Claude's own `result`\nrecords, so `--max-budget-usd` and the token/cost reporting below both work\nas expected. Use this transport when nothing should ever run without the\nSupervisor being able to see it, or when you don't need to attach.\n\n## Safety boundary\n\n- Always denied, regardless of policy or permission mode: remote push,\n  merge/PR into `main` or an integration branch, other remote CLI mutations,\n  `.git` metadata writes, and destructive rewrites of protected branches\n  (`reset`, `update-ref`, `symbolic-ref`, or a delete/move/force `branch`).\n  A shell argument the policy cannot see through (`$VAR`, `$(…)`, a glob)\n  is vetoed, best-effort, only on the commands where it could reach that\n  boundary — git, gh, npm/pnpm/yarn, curl/wget/ssh, a nested `claude`, or an\n  interpreter/runner such as `eval`, `sh -c`, `xargs`, `find -exec`. A quoted\n  heredoc body is judged by its consumer: a shell runs it, `cat > file` or\n  `git commit -m` stores it. Everything else (`for f in …; do echo \"$f\"`,\n  `rm -rf ./dist`, a Write to Claude's own scratchpad) follows the configured\n  policy — Claude's own permission mode governs it, as when you run Claude.\n- Also always denied: the **delete floor**. A Bash `rm`/`rmdir`/`unlink`/\n  `shred`/`mv`/`rimraf`/`find -delete`/`git clean -C …`/`rsync --delete` —\n  wherever it stands in the statement, so behind any wrapper, and inside\n  quoted scripts (`sh -lc '…'`, `trap '…'`), `$(…)` and text piped into a\n  shell — may only reach paths inside the task directory, its extra write\n  roots or the temp directory. Refused: a target the policy cannot read\n  literally (`$(pwd)/..`, an unknown `$VAR`), one after an unresolvable `cd`,\n  one fed by `xargs`; the task directory itself or anything containing it; a\n  whole temp/write root; `.git`, hidden-entry globs (`.*`), globs followed by\n  `..`, an unfiltered `find .`; `git prune`, `git gc --prune`,\n  `git reflog expire`. Ordinary cleanup (`rm -rf dist node_modules .cache`,\n  `rm -f src/*.js`, `find . -name '*.pyc' -delete`, `d=$(mktemp -d); rm -rf\n  \"$d\"`, `rm -f .git/index.lock`) is untouched. Not covered: deletes run by an\n  interpreter or script file, overwrites (`cp`, `ln -sf`, `>`), and\n  `git reset --hard` outside protected branches.\n- `autonomy.permissionAuthority` (`policy` | `hybrid` default |\n  `decision-worker`) controls who answers a permission request — every\n  request in headless mode, and in interactive tmux mode only those Claude\n  would otherwise have shown you as a prompt: `hybrid` answers routine\n  in-cwd edits and local read-only/dev shell commands from policy alone, and\n  sends every ambiguous request to the Decision Worker (a policy denial is\n  always applied directly).\n- **Baseline, not branch.** Any branch, including `main`, may be supervised;\n  the candidate only has to descend from the recorded baseline commit\n  (`merge-base --is-ancestor`). A branch change mid-task is recorded\n  (`worker_branch_changed`), not rejected, and a candidate on a protected\n  branch is reported in its notice (`branch`, `protectedBranch`), not parked.\n  `checkout`/`switch` onto `main` is allowed; only a destructive rewrite of a\n  protected branch name is denied. Claude Code's own \"branch first if you're\n  on the default branch\" guidance is advisory, not enforced.\n- Worker commands launch without a shell. Automatic mode admits only the bare\n  `claude` command name and pins an operator-owned, non-writable executable\n  path (`PI_CLAUDE_SUPERVISOR_TRUSTED_CLAUDE` to pin one explicitly).\n- On Linux, a cgroup v2 boundary cleans up every descendant, including\n  `setsid()` descendants; `required` mode fails closed instead of falling\n  back.\n- A wall-clock deadline (4 hours by default, `--deadline 8h` per task or\n  `DEADLINE_MS`) bounds a task. Reaching it does not kill the work: the\n  Decision Worker is warned ahead of time (`DEADLINE_WARNING_MS`, 15 min) and\n  told to steer the Worker to a wrap-up, and once the deadline passes a\n  close-out window opens (`DEADLINE_GRACE_MS`, 30 min) in which an idle Worker\n  is verified and reviewed instead of stopped, a `wait` decision is no longer\n  honored, and a repair round tells the Worker how long it has left. Only when\n  the close-out window has also elapsed is the Worker stopped outright\n  (`worker_watchdog_timeout`), and on an adopted interactive session that stop\n  is a release: Claude keeps running, unsupervised. The close-out belongs to\n  automatic tasks; a manual task is stopped at the deadline as before, and\n  `DEADLINE_GRACE_MS=0` restores that for automatic ones too. A 20-minute\n  no-output watchdog (`NO_OUTPUT_TIMEOUT_MS`, counted from the Worker's last\n  output or the Supervisor's last message to it) stops a Worker that falls\n  silent mid-turn; an automatic Worker that is merely idle that long (waiting on\n  background work that never came back) is verified instead\n  (`worker_idle_timeout`), and a Worker under human takeover is never timed out.\n- Acceptance checks, evidence collection, and the Reviewer share an abort\n  signal, so a stop or shutdown does not wait for a full command or model\n  timeout.\n- Only one cwd lease is held per task; concurrent tasks need separate\n  worktrees.\n\n## Publishing a verified candidate\n\nBy default a task ends at a **verified local candidate**: acceptance and the\nindependent Reviewer pass, and the Worker never had remote authority at any\npoint. `REMOTE_AUTHORITY=push` (or `--remote push`) adds a **publish phase**\nafter that verdict: the Supervisor records the verified commit, grants a narrow\none-shot authority, and asks the Worker to push its own branch. `pr` also lets\nit open a pull request. The Worker performs the push — the Supervisor never\ndoes — and the Supervisor then confirms it read-only (`git ls-remote`, and\n`gh pr list` for `pr`) before completing the task; the candidate notice carries\nthe pull request URL. A publish that cannot be confirmed blocks the candidate,\nwhich stays deliverable locally.\n\nThe grant is deliberately unforgiving, and both commands are matched literally —\nan option nobody reviewed is refused rather than assumed harmless. It admits\nexactly `git -C '<task directory>' -c core.hooksPath=/dev/null -c push.followTags=false push <remote> <verified commit>:refs/heads/<branch>`,\nwith no other option. The refspec names the **verified commit**, not the branch:\ngit pushes exactly that object, so a commit the Worker makes during the publish\nturn stays local (\"Everything up-to-date\") instead of riding the grant. `-C` is\n**required, absolute and byte for byte the task directory** — no normalization,\nno realpath — because Claude's Bash tool keeps its working directory between\ncalls and `cd` is ordinary local work, so without it the grant could be spent\nin any other clone, and every looser comparison had a spelling the Supervisor\nresolved one way and git another (`.` against the Supervisor's cwd,\n`/proc/self/cwd`, and `<cwd>/link/..`, which Node's own realpath collapses\nlexically while the kernel follows the link). The instruction spells the exact\ndirectory, so no other spelling is needed. The hooks path is **pinned** on that one command so no\n`pre-push` hook a Worker could have installed (by any door: `git init\n--template=`, an archive, a `chmod`) runs inside the granted push with the\nWorker's credentials, and `push.followTags=false` is pinned so a\n`followTags=true` set through any file the policy never sees cannot make the\none push also plant a tag the grant never named (a tag is what release\nautomation keys on). Both are ref and hook selection, not transport, so they\noverride no legitimate per-repository setting. For `pr` a `gh pr create --repo <pinned remote URL>\n--head <candidate branch> …` limited to title, body, base, draft, assignee and\nlabel: the pull request opens in the granted remote's repository, full stop —\nwithout `--repo`, gh picks a base repository from the remotes (`upstream` on a\nfork) that the grant never named and the confirmation never reads. The\nrepository is the `host/owner/repo` behind the remote's URL (an SSH-config host\nalias is translated through `ssh -G`, as gh does); a remote whose URL is not\none — a local path, an alias with no translation — gets no `pr` grant. Every\nword the grant supplies is shell-quoted, so a branch named `feat/$ticket` still\nround-trips through the policy.\n\nThe grant is only issued for a commit that *is* the verified tree: the working\ntree must be clean (untracked files included — a new file may be part of the\nverified behavior), and HEAD must not have moved since the evidence the Reviewer\njudged was read. The repository's Git directory must be its own `.git` or a linked worktree's\n`.git/worktrees/<name>` (not a `--separate-git-dir` pointer). A dirty tree first costs a repair round asking the Worker to\ncommit what belongs to the candidate; only when none is left, or when HEAD\nmoved, does the task end at the local candidate with a `not published:` reason\ninstead of a grant. A remote that cannot be reached at confirmation time leaves\nthe publish *unconfirmed* (the candidate stays deliverable), never \"refuted\".\n\nRefused with or without a grant: every push option (`-u`, `--force`,\n`--force-with-lease`, `--delete`, `--mirror`, `--all`, `--tags`, `--no-verify`,\n`--push-option`, `--receive-pack`, …), any `-c` but the two pins (in that order), a\nbranch or `HEAD` as the refspec source, a bare `git push`, another remote,\nbranch or commit, a protected branch, a shell wrapper (`sh -c`, and a heredoc\npiped into a shell), a dynamic word, a second statement, `git push` without\n`-C`, a `-C` that is not the task directory byte for byte (another directory, a\nrelative path, `/proc/self/cwd`, a symlink or `..` inside it),\n`gh pr create` without `--repo <pinned URL>` or without `--head <candidate\nbranch>` (a `--head` swallowed as another option's value does not count),\n`gh pr create --body-file/-F/--template` (which would post the contents of an\narbitrary local file), `--web`, another `--repo`, `gh pr merge`, `gh api`,\n`gh release` and `npm publish`. Changing the repository's remotes (`git remote\nset-url|add|rename|…`, behind git's own `--git-dir`/`--work-tree` options or\n`remote`'s own `-v` too) is denied outright, and so is reconfiguring where a\npush goes or what runs during it — `git config` writes to `remote.*`,\n`url.*.insteadOf`, `push.*`, `credential.*`, `http.*`, `include.path`/\n`includeIf.*`, `init.*`, `core.sshCommand` or `core.hooksPath`, `git config\n--edit`, `git init --template=…`, `git init|clone --separate-git-dir=…`, and any statement that names `.git/config` or\n`.git/hooks` unless it plainly only reads (`cat`, `grep`, `ls`, …) — so the\ngranted remote cannot be repointed underneath the confirmation, which pins both\nthe fetch and the push URL and scrubs `GIT_DIR`/`GIT_CONFIG_*` from its own\nenvironment. Behind all of that sits one rule the text guards do not need:\nthe remote's resolved fetch and push URLs — **every** one of them\n(`git remote get-url --all` / `--push --all`; git pushes to each `pushurl`,\nnot only the first it prints), rewrites applied — are recorded when the task\n**starts**, before the Worker runs a command, and required unchanged both\nwhen the grant is issued *and* at the moment the granted push is authorized.\nSo a `pushInsteadOf`, `pushurl` or extra destination added during the task by\n*any* means (`~/.gitconfig`, a script, an include the policy never saw), even\nas the first command of the publish turn, refuses the push and revokes the\ngrant, while an operator's pre-existing rewrite, already in the baseline, is\nnot. A recovered task keeps its recorded baseline and never takes a new one;\na remote that could not be resolved at the first start is recorded as such and\nnever granted. This is a policy over the command text: a script the Worker writes\nand runs is outside what it can see, as [autonomy-target.md](docs/autonomy-target.md)\nsays of every text-level rule; absolute isolation is the host boundary's job.\n\nThe grant is **one-shot**: it is revoked the moment the publish turn completes,\nnot when the next decision arrives, and it is pinned to the remote's URL as well\nas its name. A Worker that changes the tree during that turn voids it and is\nre-verified in full — an edit left uncommitted counts as a change, exactly like a new\ncommit; because the grant named the commit, the notice can say whether the\nverified commit landed before the tree moved on. Before verification a refused push says the grant is coming\nrather than leaving the Worker to guess, and a task that ends without a\nconfirmed publish says so in its candidate notice instead of reporting a bare\n\"ready\".\n\n## Task specs\n\n`--spec file.json` accepts:\n\n```json\n{\n  \"goal\": \"Implement the requested change\",\n  \"scope\": [\"src/\"],\n  \"constraints\": [\"Keep the public API compatible\"],\n  \"forbidden\": [\"Do not publish artifacts\"],\n  \"acceptance\": [\n    { \"id\": \"tests\", \"name\": \"tests\", \"command\": \"npm\", \"args\": [\"test\"], \"required\": true, \"timeoutMs\": 120000 }\n  ],\n  \"maxRepairRounds\": 3,\n  \"autonomy\": {\n    \"unattended\": true,\n    \"requireLocalCommit\": true,\n    \"maxDecisionRetries\": 4,\n    \"permissionAuthority\": \"hybrid\",\n    \"maxWorkerCostUsd\": 20\n  }\n}\n```\n\nChecks always run with argv, never through a shell. A plain-text task (no\n`--spec`) becomes a `goal` with the default `git diff --check` acceptance\ncheck (120s timeout) and the env autonomy defaults below.\n\n## Configuration reference\n\nEnvironment variables (or `~/.config/pi-claude-supervisor/env`), all prefixed\n`PI_CLAUDE_SUPERVISOR_`; see `.env.example` for a template. The env file takes\n`KEY=value` lines, optionally prefixed with `export ` and followed by a\n` # comment`. A numeric, duration or boolean value that is out of range or\nunparsable keeps the default and is reported once as a\n`pi-claude-supervisor: ignoring …` warning.\n\n| Variable | Default | Meaning |\n| --- | --- | --- |\n| `MODE` | unset (manual) | `auto` enables automatic supervision (Decision Worker + Reviewer loop) |\n| `AUTOMATION` | unset | `1` is equivalent to `MODE=auto` |\n| `TRANSPORT` | `jsonl` in auto mode, `process-pipe` otherwise | `jsonl` \\| `tmux` \\| `process-pipe` (manual only) |\n| `TMUX_MODE` | `interactive` | `interactive` (real TUI via hooks) \\| `bridge` (stream-json in a pane) |\n| `AUTO_INSTALL_HOOKS` | `true` | Interactive tmux mode only: automatically install the hook relay into the user's Claude settings on load; `0` opts out |\n| `CLOSE_WORKER_ON_COMPLETION` | `false` | Interactive tmux only: close the Worker/session on completion instead of leaving it open |\n| `CGROUP_MODE` | `auto` | `off` \\| `auto` \\| `required`; automatic mode always uses `required` on Linux; `required` is rejected for a manual (non-automatic) tmux Worker |\n| `TMUX_SOCKET` | unset (default tmux server) | Socket path for adopting a non-default tmux server |\n| `WORKER` | `claude` | Worker command; may include arguments |\n| `NODE` | unset (resolved from `PATH`) | Explicit `node` executable path, for a Bun-compiled Pi |\n| `TRUSTED_CLAUDE` | unset | Pins the expected resolved Claude executable identity explicitly |\n| `STATE_DIR` | `~/.pi/agent/claude-supervisor` | Supervisor state directory |\n| `CWD_LEASE_DIR` | `<state>/cwd-leases` | Shared cwd-lease registry directory |\n| `WORKER_ENV` | unset | Comma-separated list of env vars to pass through to manual workers |\n| `HUMAN_WEBHOOK_URL` | unset | Outbound candidate/failure notification endpoint |\n| `HUMAN_WEBHOOK_FORMAT` | `generic` | `wecom` \\| `generic` |\n| `HUMAN_WEBHOOK_SECRET` | unset | HMAC signing secret; sent as the `x-pi-supervisor-signature` header |\n| `UNATTENDED` | `true` | Task runs without a synchronous human callback |\n| `REQUIRE_LOCAL_COMMIT` | `true` | Require a local commit on the candidate's branch before completion |\n| `MAX_DECISION_RETRIES` | `4` (0–10) | Retries of a Decision Worker call that times out or fails for a reason waiting does not fix (a prompt that is too long, a corrupted session); waits 15s, 45s, then 60s. A transient provider or network outage (429/529, 5xx, resets) on a completed turn is waited out instead, one attempt a minute; rejected credentials, billing and a missing model park at once |\n| `PERMISSION_AUTHORITY` | `hybrid` | `policy` \\| `hybrid` \\| `decision-worker` |\n| `REMOTE_AUTHORITY` | `none` | `none` \\| `push` \\| `pr`; grants the publish phase after verification passes. `--remote` overrides it per task |\n| `REMOTE_NAME` | `origin` | The single remote a publish grant may name |\n| `WORKER_MAX_BUDGET_USD` | unset | Hard cap passed as `--max-budget-usd`; unavailable to interactive tmux |\n| `WORKER_MODEL` | unset (Claude's own default) | `--model` for the Claude Worker |\n| `WORKER_AUTOCOMPACT_TOKENS` | `200000` in automatic mode | Per-turn context bound; `0` keeps Claude's own default |\n| `WORKER_MCP_CONFIG` | unset | Path passed as `--strict-mcp-config --mcp-config`, restricting the Worker's MCP servers |\n| `DECISION_MODEL` | unset (Pi's default) | `provider/model-id` for the Pi Decision Worker, as listed by Pi |\n| `REVIEWER_MODEL` | unset (Pi's default) | `provider/model-id` for the independent Reviewer |\n| `DECISION_COMPACT_TOKENS` | `60000` | Proactively compacts the persistent Decision Worker session past this size; `0` disables it |\n| `PROGRESS_HEARTBEAT_MS` | `60000` | Minimum interval between repeated progress notifications for the same phase |\n| `DECISION_SESSION_RETENTION_DAYS` | `30` | Prunes closed Decision Worker session records older than this; `0` keeps forever |\n| `EVIDENCE_MAX_BYTES` | `1048576` (1 MiB) | Maximum repository evidence bytes collected per task |\n| `EVIDENCE_MAX_UNTRACKED_FILES` | `512` | Maximum untracked files collected as evidence per task |\n| `REVIEW_TIMEOUT_MS` | `10m` (30s–1h) | Total independent Reviewer budget per round; a provider error is retried with a fresh session while budget remains |\n| `DEADLINE_MS` | `4h` | Wall-clock budget per task, measured from its start — time Pi was down counts too, so `recover --extend` grants a fresh budget (`8h`, `90m`, `2h30m` or ms; 5m–7d); `0` (or `0m`) disables it; `--deadline` overrides it per task |\n| `DEADLINE_GRACE_MS` | `30m` | Close-out window after the deadline for automatic tasks: an idle Worker is verified instead of stopped; `0` restores the immediate stop |\n| `DEADLINE_WARNING_MS` | `15m` | How long before the deadline the Decision Worker is warned and re-asked; `0` disables the warning |\n| `NO_OUTPUT_TIMEOUT_MS` | `20m` | Stop a Worker that has produced no output for this long; `0` disables the check |\n| `HUMAN_IDLE_RESUME_MS` | `30m` | After you type into a supervised session, resume automation once the Worker has been idle this long after your last prompt and the end of your last turn (1 minute to 24 hours); `0` keeps the pause until `resume-auto`. Never applies to an explicit takeover |\n| `EVENT_LOG_MAX_BYTES` | `67108864` (64 MiB) | Rotates `events.jsonl` at this size; 5 rotated files are kept |\n\n## Recovery, leases and state\n\nAfter an unclean Pi restart, `/supervise sessions` lists recoverable tasks;\n`/supervise recover [--takeover] <task-id>` restores the Decision Worker\ncontext and starts a new Claude Worker. It never silently resumes or\nduplicates work. Add `--takeover` only once the lease proves the old\nWorker's process group is gone and its cgroup is a real, readable empty\nboundary (and, for tmux, that the private tmux session is also gone);\nmissing or unverifiable evidence is refused rather than reclaimed.\n`/supervise recover` does not persist whether the original task was\ninteractive — it derives that from the current `TRANSPORT`/`TMUX_MODE`\nconfiguration at recovery time, so do not change either between starting a\ntask and recovering it.\n\nA task that stopped at its wall-clock deadline is listed with `deadline=expired\n… ago`. Plain `recover` refuses it; `recover --takeover --extend <duration>\n<task-id>` grants that much budget from now (the recovered Supervisor persists\nthe new deadline), and `--extend 0` opens the close-out at once, so the fresh\nWorker's first watchdog tick verifies and reviews the repository as it stands\nand any repair round tells it how long it has. With `--extend` the recovered\ntask goes straight back to automation: a real extension sends the fresh Worker a\ncontinuation of the original task (telling it to inspect the earlier work first),\nand `--extend 0` needs none. A plain `recover` still leaves the Worker idle under\ntakeover — send it a continuation, then `resume-auto`. A record nobody will recover is\ndropped with `/supervise discard <task-id>` (its session file is kept until\nretention pruning).\n\nEvery task holds one cwd lease under `CWD_LEASE_DIR`; concurrent tasks need\nseparate worktrees. A lease record that cannot be read (corrupt JSON,\nunexpected shape) is quarantined instead of blocking other lookups, and\n`/supervise sessions` lists the current quarantined records so an operator\ncan inspect and clean them up.\n\nEvents are append-only JSONL in `<STATE_DIR>/events.jsonl`, with\n`worker_output` size-capped and the log rotated past `EVENT_LOG_MAX_BYTES`.\nThe Decision Worker session for each task is persisted as its own JSONL file\nunder the state directory, pruned by `DECISION_SESSION_RETENTION_DAYS`.\n\n## Notifications\n\nEvery terminal state (`completed`, `blocked`, `failed`) emits a candidate\nnotice in the Pi UI and, if `HUMAN_WEBHOOK_URL` is set, to a webhook in\neither `wecom` or `generic` JSON form, signed with `HUMAN_WEBHOOK_SECRET`\nwhen set. A parked candidate that asked a question sends a separate \"needs\nyou\" notice; a human takeover (you typed into the session) only shows an\nin-UI hint, since you are already there. Either notice includes an\n`attach` field with the literal `tmux -S <socket> attach -t <session>`\ncommand when it concerns a tmux session, and a usage summary\n(`CandidateNotice.usage`: cost, worker turns/tokens, Pi tokens, decision and\nreviewer call counts). Webhook delivery retries transient errors (network,\n429/5xx). Notifications are outbound-only: receiving one does not grant any\napproval, and a webhook cannot push commands back into Pi — use `/supervise\nsend`/`approve`/`takeover` for that.\n\n## Token usage and cost controls\n\nMeasured on one real unattended review task (29 minutes wall clock):\n\n| Component | Turns/calls | Tokens | Cost |\n| --- | --- | --- | --- |\n| Claude Code Worker | 70 turns | 15.5M cache-read + 370k cache-write + 100k output | $18.46 |\n| Pi Decision Worker | 30 model calls | ~1.0M (91k uncached + 914k cache-read) | $0.04 |\n\nAlmost all of the money goes to the Worker, not the Supervisor's own Decision\nWorker or Reviewer calls. In this run the Worker averaged ~220k tokens of\ncontext per turn because it ran as a single long `-p` session under a\n1M-token window that never compacted; a trivial Claude Code turn costs\nroughly 24k prompt tokens for its system prompt alone, regardless of which\nMCP servers are configured. Of the 30 Decision Worker calls, 28 were\npermission requests, and the Decision Worker overrode the deterministic\npolicy 4 times (denying downloads and writes outside the task directory) —\nthis is why `hybrid` is the default `permissionAuthority`, not `policy`.\nReplaying those 28 requests through the shipped `isRoutinePermission`\nclassifier answers 4 of them locally; that task was dominated by inline\n`node -e` scripts and `$(...)` substitutions, which are never routine. An\nordinary implementation task is mostly in-cwd `Edit`/`Write`, `npm test` and\n`git status/diff/add/commit`, all of which are routine, so its Decision\nWorker call count drops much further.\n\nKnobs, with their defaults and trade-offs:\n\n- `PERMISSION_AUTHORITY` (`policy` | `hybrid` default | `decision-worker`):\n  `hybrid` answers routine in-cwd file edits and local read-only/dev shell\n  commands from the deterministic policy alone (`isRoutinePermission` in\n  `src/policy.ts`) and still sends every ambiguous request, and every policy\n  denial, to the Decision Worker. This mainly buys latency and a smaller\n  Decision Worker context, not dollars: the 30 calls above already cost\n  $0.04.\n- `WORKER_MODEL` / `--model`: roughly a 5x price difference between Opus- and\n  Sonnet-class models. This is the single largest lever on the actual bill,\n  and it is the operator's choice; the Supervisor does not pick it for you.\n- `WORKER_AUTOCOMPACT_TOKENS` (default 200000 in automatic mode; `0` keeps\n  Claude's own default): bounds context per Worker turn so a long session\n  does not keep accumulating ~220k-token turns. Worth tens of percent, at\n  the cost of some context quality.\n- `WORKER_MAX_BUDGET_USD` / `autonomy.maxWorkerCostUsd`: a hard cap passed to\n  Claude as `--max-budget-usd` and re-checked by the Supervisor against the\n  cumulative Worker `result` cost. It is a cap, not a saving; a task that\n  hits it is parked with its evidence.\n- `WORKER_MCP_CONFIG` (`--strict-mcp-config --mcp-config`): restricts the\n  Worker to only the listed MCP servers. It bounds what the Worker can\n  reach, not the ~24k-token fixed overhead of an ordinary turn.\n- `DECISION_MODEL` / `REVIEWER_MODEL` (`provider/model-id`, for example\n  `anthropic/claude-haiku-4-5-20251001`): the Pi Decision Worker and\n  Reviewer models. Pi-side usage was already a few cents in this run, so a\n  cheaper model here mostly buys latency, not headline savings.\n- `DECISION_COMPACT_TOKENS` (default 60000; `0` disables): proactively\n  compacts the persistent Decision Worker session once its estimated context\n  passes this threshold, and re-sends the startup instructions once on the\n  next prompt after compaction.\n\nThe Supervisor records what it spends rather than estimating it after the\nfact: every Worker `result` record becomes a `worker_usage` event, every\nDecision Worker/Reviewer model call becomes a `pi_usage` event, and both\naccumulate into `session.usage` (`SupervisorTokenUsage`). `/supervise status\n<task-id>` prints a `cost=… workerTurns=… workerTokens=… piTokens=…\ndecisionCalls=… reviewerCalls=…` summary; progress notifications carry\n`SupervisorProgress.costUsd`/`.piTokens`, and a candidate notification\ncarries the same summary through `CandidateNotice.usage`, which the generic\nwebhook serialises as a numeric `usage` object and the WeCom format renders\nas two extra lines.\n\nNone of this changes what a task actually costs beyond the Worker model and\nbudget choice; the Supervisor-side changes here mainly cut Decision Worker\ntokens and latency, which were cents to begin with. For a cost-sensitive\nunattended run, a reasonable starting point is a Sonnet-class `WORKER_MODEL`,\nan explicit `WORKER_MAX_BUDGET_USD` per task, the default `hybrid` permission\nauthority, and a Haiku-class `DECISION_MODEL`.\n\n## Development\n\nContributing to the extension itself (not required to use it):\n\n```bash\nnpm ci --ignore-scripts\nnpm run check\nnpm run build\nnpm run test:pi\nnpm run test:install\n```\n\nSome tests validate the trusted-executable and protected-branch boundaries\nagainst the real checkout, so they must run from a non-protected branch and\nfrom a path that is not group/world-writable.\n\nSee [architecture](docs/architecture.md), [testing](docs/testing.md), and\n[releasing](docs/releasing.md) for more detail; `docs/autonomy-target.md`\nrecords the confirmed unattended-development target this project is built\naround, and [`docs/optimization-roadmap.md`](docs/optimization-roadmap.md) (in\nChinese) proposes the post-0.9.2 optimization roadmap.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","readmeFilename":"README.md"}