{"_id":"anon-pi","_rev":"45-95b1f9e393cd94682f530757c4c13a6e","name":"anon-pi","dist-tags":{"latest":"0.31.0"},"versions":{"0.1.0":{"name":"anon-pi","version":"0.1.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.1.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"6aa356f58f6a1ced8703dad29c3d276ac9a78078","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.1.0.tgz","fileCount":19,"integrity":"sha512-UfB4/0FqgkxWUDQwtCSpez/k21caS5AIONNEuTycoGQP3v3ggCvkrNBbV4PT68CCZfda5/EDwD+APSEqOTgUMA==","signatures":[{"sig":"MEUCIG99B0w65LJnPWgekM4gk23uuVa2V9bstuo9BPX8VprTAiEAutbt8HMfm6yMhP0dDXskXgRZveT978NteeiiCUHtFqY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87771},"type":"module","_from":"file:anon-pi-0.1.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"6a7d5ac1163f78e6d966306db502a2acc93e0f0d","scripts":{"dev":"as-soon -w src pnpm build","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"wighawag","email":"npmdev1234567890@gmail.com"},"_resolved":"/tmp/a55dc4027778007d19a42dcd8206c485/anon-pi-0.1.0.tgz","_integrity":"sha512-UfB4/0FqgkxWUDQwtCSpez/k21caS5AIONNEuTycoGQP3v3ggCvkrNBbV4PT68CCZfda5/EDwD+APSEqOTgUMA==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.6.2","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.11.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.1.0_1783002349806_0.7335054930996696","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"anon-pi","version":"0.1.1","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.1.1","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"ea7c3db0fcc126f66bf34ffbf72326f115adc23f","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.1.1.tgz","fileCount":19,"integrity":"sha512-hepUpQ5z7d79F3TphLXByHLjQFSqV28+2d0jBspAU+lhwih3uXSTNvzQKFI1qDcAQ+MUFDPn5PJpXavw4TBIng==","signatures":[{"sig":"MEUCIEqSudTUUxmjPQMJFCw2djjXVyvxlGxziMaJVpWURP30AiEAyfunQYJ4w2auZ5649t1pQtgHr/qCtqZ2A+BT/o4HYI0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90204},"type":"module","_from":"file:anon-pi-0.1.1.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/3c760e2d8742d85ae1d0234936170c05/anon-pi-0.1.1.tgz","_integrity":"sha512-hepUpQ5z7d79F3TphLXByHLjQFSqV28+2d0jBspAU+lhwih3uXSTNvzQKFI1qDcAQ+MUFDPn5PJpXavw4TBIng==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.1.1_1783005343079_0.23071692788198161","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"anon-pi","version":"0.2.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.2.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"79eb6ae787aa366a6cc916d40d06680be39144e7","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.2.0.tgz","fileCount":20,"integrity":"sha512-GL8cfWabaoKJUmYE3UI8gRf6lmir8yXFCFo8Tap3sufb/IzoRUlMGg01114KSiMEzVT7al3pNiqu9lAnNW0+sQ==","signatures":[{"sig":"MEUCIQD3682qDyhtOdGrSNIPjIk/MD7VFZBUAAz5ZzSVidhuowIgaQ/susDznICOT/xzcMY0uQBtQYazfjWliVIjTW5O1Sw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":115453},"type":"module","_from":"file:anon-pi-0.2.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/80d19e71d68c8414d6283c424c44b84a/anon-pi-0.2.0.tgz","_integrity":"sha512-GL8cfWabaoKJUmYE3UI8gRf6lmir8yXFCFo8Tap3sufb/IzoRUlMGg01114KSiMEzVT7al3pNiqu9lAnNW0+sQ==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.2.0_1783008748178_0.7832210184429378","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"anon-pi","version":"0.3.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.3.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"cf3074fd4e939426986a3dbc6e70fa3ed3fdf21b","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.3.0.tgz","fileCount":20,"integrity":"sha512-lfWBoU+EpeSKNoFA9VX/smrOcBT6pxTtdydgYkjJuUxr/UM/gc908xWDy2MMJ6ZBMXzgkTDVslrz5gctgVNdWQ==","signatures":[{"sig":"MEUCIHTRDEG/7gWrpAFhB1l767pR3xnLlBYfVvZ7MPEInw29AiEAuSp3TRJThVVfU0N7GcgLbXR6g7aqRqz9K2w6la0VvG8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":142306},"type":"module","_from":"file:anon-pi-0.3.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/3d1d93c4d472cc47f6f9ff4abfe33bb1/anon-pi-0.3.0.tgz","_integrity":"sha512-lfWBoU+EpeSKNoFA9VX/smrOcBT6pxTtdydgYkjJuUxr/UM/gc908xWDy2MMJ6ZBMXzgkTDVslrz5gctgVNdWQ==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.3.0_1783019456801_0.30958514023294814","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"anon-pi","version":"0.4.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.4.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"ca5db43ffd5a95fe3a650a4612354fe8719ed057","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.4.0.tgz","fileCount":20,"integrity":"sha512-+uVx98IauMY9P5m3gC6g3UL3C0XSqkJyHgDNSkWU0c4bWqZk5l83xwRdNy30p3xSSknSbiZzZBuZYrDG9F8djw==","signatures":[{"sig":"MEQCIA2fFhxBqJkI1ZNCpSJsQLXUTOIVyc+VdPlHQQv8Wo4CAiA/WO6l1/BcMKds1vck3eJzVyoA+GZgbWmGjduS6oR1+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":146089},"type":"module","_from":"file:anon-pi-0.4.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/f7d6a2227005e8050059d59cec13db75/anon-pi-0.4.0.tgz","_integrity":"sha512-+uVx98IauMY9P5m3gC6g3UL3C0XSqkJyHgDNSkWU0c4bWqZk5l83xwRdNy30p3xSSknSbiZzZBuZYrDG9F8djw==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.4.0_1783020127188_0.4610263134351271","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"anon-pi","version":"0.5.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.5.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"8f9743f9409e27ed008343cdd14860bd2c41c880","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.5.0.tgz","fileCount":20,"integrity":"sha512-1Z38AMgj83lkMtXMMBmBcqi9H3+oHogSQ9MDqOB/qEFGsAugrTtaCmm4yA21OIK6RrUarkjkldfSOrYKBKchaQ==","signatures":[{"sig":"MEQCICDaBIuwaYyomQ35wz9PUy12L1n5vLAyk/+6RGxb9khsAiAkf4BXSTNORAQbMjF4yxuyMYQvj3AL/OLyTOXwRf3vag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":456427},"type":"module","_from":"file:anon-pi-0.5.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/53c199447b0d6624be4cceb99d9422e7/anon-pi-0.5.0.tgz","_integrity":"sha512-1Z38AMgj83lkMtXMMBmBcqi9H3+oHogSQ9MDqOB/qEFGsAugrTtaCmm4yA21OIK6RrUarkjkldfSOrYKBKchaQ==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.5.0_1783142604086_0.26776129269304905","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"anon-pi","version":"0.6.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.6.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"c85d7b49d9f862c3b0cae3dac1e3eec72344d9d3","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.6.0.tgz","fileCount":20,"integrity":"sha512-MvqnvY05xZIXW6jIgvAqx/Mnc+XFdLnryMSoS42YNVzHDLYJvXoVMWIh5v5lPDFbcmeb13ACAd9/bkRpdDHAqQ==","signatures":[{"sig":"MEUCIQDgS342YIVybUGdLfW+S5t2wb48cI7SRQknp7J/XyXiLAIgeAzySvsF9twcADfXKYXRKOb1pYgw3NNbYZeOCcMZZDE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":528879},"type":"module","_from":"file:anon-pi-0.6.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/63093c59b9e8f668a4308fe1d60c88b1/anon-pi-0.6.0.tgz","_integrity":"sha512-MvqnvY05xZIXW6jIgvAqx/Mnc+XFdLnryMSoS42YNVzHDLYJvXoVMWIh5v5lPDFbcmeb13ACAd9/bkRpdDHAqQ==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.6.0_1783145322323_0.21978901253036898","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"anon-pi","version":"0.7.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.7.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"2767352d8dddd8af74dda46711f3e52a902abc3f","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.7.0.tgz","fileCount":20,"integrity":"sha512-sQ8Pv7apCL73l1F7O+5q6+aF/thV0ks3PPlAM5i9bU6KaPJ0qWh1IMAXnsuhNzvxzgCU+5u//gCWoJTX5f8/LA==","signatures":[{"sig":"MEUCIDVORCbphfX/Ai04oiklr+dtbqEKRtWMta46kwCxBYQ+AiEA0y3ScpGs54NgaHm6JcaUFsDytxFS0i0dYw/qJug6Q9U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":547070},"type":"module","_from":"file:anon-pi-0.7.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/a6af80aad61312e92395aab7a74e463b/anon-pi-0.7.0.tgz","_integrity":"sha512-sQ8Pv7apCL73l1F7O+5q6+aF/thV0ks3PPlAM5i9bU6KaPJ0qWh1IMAXnsuhNzvxzgCU+5u//gCWoJTX5f8/LA==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.7.0_1783147307316_0.31009041319545827","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"anon-pi","version":"0.8.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.8.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"a50a4abac78eba6c294186ad0341a4a37022352e","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.8.0.tgz","fileCount":20,"integrity":"sha512-0nzg3MFRq69KgO8LJQ8M9sK58EO3MbqT200ArNTfXu1XadbiGPb0EuyjsBGr00kLFlfF00b7mOiwlmrkcWBRrw==","signatures":[{"sig":"MEUCIQD7wV7tA3JRRG2rmRqiOmj3VGlqkCSy7JLGGMxwNJ1pjQIgPDCH0P6AW/gp8T9qT4YOFnji5IZsmPsjSNMQFrcF0i8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":567584},"type":"module","_from":"file:anon-pi-0.8.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/8c72a19ad62112bf95a3e8df780820f3/anon-pi-0.8.0.tgz","_integrity":"sha512-0nzg3MFRq69KgO8LJQ8M9sK58EO3MbqT200ArNTfXu1XadbiGPb0EuyjsBGr00kLFlfF00b7mOiwlmrkcWBRrw==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.8.0_1783156110402_0.9660393340313636","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"anon-pi","version":"0.9.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.9.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"d01d0fa32f1474384ee848ec7eb3f5545a3cc534","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.9.0.tgz","fileCount":20,"integrity":"sha512-uU7vakCga+DMo02P2mKIuSw9wWJd/XttpddF/em1/jbSl2oi2tvBIusgJik+PN8bG2XG8Kps56Dx8YIZPDsARQ==","signatures":[{"sig":"MEYCIQDPGU//pbmikXJ3svUCRUlg9sdKRKJAFGT/DgMiI1gWWQIhALGYvwfLoFEZUsQYZrE3VBjgN8qIQS5lMz8QykWWoVje","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":595364},"type":"module","_from":"file:anon-pi-0.9.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/709c565a54152aa59fb4910b40792f05/anon-pi-0.9.0.tgz","_integrity":"sha512-uU7vakCga+DMo02P2mKIuSw9wWJd/XttpddF/em1/jbSl2oi2tvBIusgJik+PN8bG2XG8Kps56Dx8YIZPDsARQ==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.9.0_1783162865273_0.8507525908896174","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"anon-pi","version":"0.9.1","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.9.1","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"3edeb2bcdc77e303057b46f0e74f78a691311447","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.9.1.tgz","fileCount":20,"integrity":"sha512-t4zt/XEGyPrV9j/N2tSF9mutr2nuoo2SonGCR6C9g2fJyRfAOwHSnn5rO8fzYUyqtSaGMYZ5Pg9konFy+p2yCA==","signatures":[{"sig":"MEUCIQC+koSLaJcqe0ShhCanyO69d01MHV4dSFf2fJPop/uN5AIgBlzDUIIEKvcz+fApBw4r5mD2rIqg3IAY/HJ221Ig3v0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":596342},"type":"module","_from":"file:anon-pi-0.9.1.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/1f1d74eae4879c705434b2cf81f971dc/anon-pi-0.9.1.tgz","_integrity":"sha512-t4zt/XEGyPrV9j/N2tSF9mutr2nuoo2SonGCR6C9g2fJyRfAOwHSnn5rO8fzYUyqtSaGMYZ5Pg9konFy+p2yCA==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.9.1_1783164771110_0.05189911088051047","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"anon-pi","version":"0.10.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.10.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"d15cb17549cb6e727dc44bfb07378d8622a92877","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.10.0.tgz","fileCount":20,"integrity":"sha512-nP2Sw3F6v22VcvzMOZ5PNVlt32JiB8WVk6+FHvfg7rojaUwSPSQ1FAMSQU6C8VqYh9CpUJFK+ZDiyqDSWToWbQ==","signatures":[{"sig":"MEUCIDXkkBtP1KfzFtquLxnd76i1X/rv+OpfnsB1BgCP2wh3AiEAsbpKHSbJhHIpUp7PO/oG/MILtoPt910BI3R6ShRAyK4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":622000},"type":"module","_from":"file:anon-pi-0.10.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/5206608b86d1f64bc3e018d2102541e7/anon-pi-0.10.0.tgz","_integrity":"sha512-nP2Sw3F6v22VcvzMOZ5PNVlt32JiB8WVk6+FHvfg7rojaUwSPSQ1FAMSQU6C8VqYh9CpUJFK+ZDiyqDSWToWbQ==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.10.0_1783165881588_0.3847402288377544","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"anon-pi","version":"0.11.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.11.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"5e15fc42426593c2fed5a9487bbf1698e832528a","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.11.0.tgz","fileCount":20,"integrity":"sha512-vmAD3YaECxO+wWHMTH4Zi6BFO97c4LMLUU8kwm4SxpTewD5YgGjJ9DYYqoVqDOM7J/V54LM3wEQ4lK3Z8DYM6w==","signatures":[{"sig":"MEUCIGiThtuUQOZtM9W6LQQIJdxZxqfg8teFnTAHDmrWuYcAAiEA1yl606LquPmoQQru5ftCLGEMdQMWV+yD11R1w0qrXwE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":689006},"type":"module","_from":"file:anon-pi-0.11.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/389296695d3422a934fee975dba410a6/anon-pi-0.11.0.tgz","_integrity":"sha512-vmAD3YaECxO+wWHMTH4Zi6BFO97c4LMLUU8kwm4SxpTewD5YgGjJ9DYYqoVqDOM7J/V54LM3wEQ4lK3Z8DYM6w==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.11.0_1783179400341_0.20724675643038792","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"anon-pi","version":"0.11.1","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.11.1","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"0050b81e54e37a6c150d155de6133b472f33aa5f","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.11.1.tgz","fileCount":20,"integrity":"sha512-WS6tdP2y+sM0w+kH2FbVBvLwQgdYmtjK5GiH/EeadznqNxpY5mWmgMPqBVkKsboWdWwDiBvssbdU2x3BlUK92g==","signatures":[{"sig":"MEQCIECipcNdr3gCFg4bH9XeRLmYQ0kmtWavSgARm90rEE4rAiA5l0RSuvv0KOIrEDtcZloNrD/wPa2zF8+8WsEn+yvV4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":694175},"type":"module","_from":"file:anon-pi-0.11.1.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/cbad96c470bc60d2f822727e02159f78/anon-pi-0.11.1.tgz","_integrity":"sha512-WS6tdP2y+sM0w+kH2FbVBvLwQgdYmtjK5GiH/EeadznqNxpY5mWmgMPqBVkKsboWdWwDiBvssbdU2x3BlUK92g==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.11.1_1783182203343_0.29159402260548783","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"anon-pi","version":"0.12.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.12.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"3dd77d7425411fec5d948a4c067707992d36d807","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.12.0.tgz","fileCount":20,"integrity":"sha512-A+LG8XuuqLEulhhWRbyEaueBcAXq19tF3OJvqIg+jk/lrLzXG0fCfEyUHzdzkvhAI/005KfajIsC6yllQHa70A==","signatures":[{"sig":"MEUCIQC7nZZdmCJGmCZ/F+/7vu5ZfGz8dg8Q5sS7jzkPI7HpAwIgO1c51VCT23d2ogXpcKFf4aMyiuNq8mOUdQ/725Io5Yo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":696092},"type":"module","_from":"file:anon-pi-0.12.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/b3f46fa0538af54995e41217446cba86/anon-pi-0.12.0.tgz","_integrity":"sha512-A+LG8XuuqLEulhhWRbyEaueBcAXq19tF3OJvqIg+jk/lrLzXG0fCfEyUHzdzkvhAI/005KfajIsC6yllQHa70A==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.12.0_1783193782718_0.7574173598649907","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"anon-pi","version":"0.13.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.13.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"1dbbce738e5191794b5936a954f073b49959f6a8","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.13.0.tgz","fileCount":20,"integrity":"sha512-h5hrZfklb0PObsYFPloSFw670dfitvWcfubWrJWq4pSZc15I2gZDQJX7qIAyazGZ6hiVW2lz39Av3M5ij2ZBtg==","signatures":[{"sig":"MEUCIFteliLJjL1Lb8ezTIUMej7PY5kj60lWECJnTJS/K18vAiEA7VBnXAvWNDoC/xhLPy2wM/kHjqNyBPHH4jV/yUNpmNA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":717434},"type":"module","_from":"file:anon-pi-0.13.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/c8ad4168f8a035c7741eeea7c6ad3a49/anon-pi-0.13.0.tgz","_integrity":"sha512-h5hrZfklb0PObsYFPloSFw670dfitvWcfubWrJWq4pSZc15I2gZDQJX7qIAyazGZ6hiVW2lz39Av3M5ij2ZBtg==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.13.0_1783199335486_0.3924333481959186","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"anon-pi","version":"0.14.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.14.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"9a2acb9fbcff8fad7674678492e7f5290ec71f41","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.14.0.tgz","fileCount":20,"integrity":"sha512-+TfXlzEdA6YVhx6B77zBB2GmaUsilrY5oqFHtWQMdVaIQsBnFIizUtlvQ2ADKhGHYpLRigbHonmhq2we6Fj+VA==","signatures":[{"sig":"MEQCIF60EPqVP83qgjlP1NB9qRA8TdaICtnrFpCr9sk1lT36AiAj3S1S3dj5yXpdK1ZV+WmjrpX6JRdaHSYgNJaYBX/5yg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":719743},"type":"module","_from":"file:anon-pi-0.14.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/009f7c179847e89ab42566d861cc7ddf/anon-pi-0.14.0.tgz","_integrity":"sha512-+TfXlzEdA6YVhx6B77zBB2GmaUsilrY5oqFHtWQMdVaIQsBnFIizUtlvQ2ADKhGHYpLRigbHonmhq2we6Fj+VA==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.14.0_1783201128720_0.32338134114597294","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"anon-pi","version":"0.15.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.15.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"a608663f6d1415d224aa60087724a78db7ccd446","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.15.0.tgz","fileCount":20,"integrity":"sha512-ZPYN952S2UrDuwfjcDoxbDYDReVjooHYJjw0/EHd4of3ZGBeZByVrx+SOzFuLua54VSHm8HeyIqi5gxhh4Ectw==","signatures":[{"sig":"MEYCIQCW0zFtphQJc7zpv1V0VfmdfeUC/R3TjHFO8kO9PEZI1QIhAIwiRzOcQyryHKC6LSVNvTSY+SYsDbO862Nv6u3p0a/w","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":741553},"type":"module","_from":"file:anon-pi-0.15.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/d4b745748113d59fe2893962e2b9969d/anon-pi-0.15.0.tgz","_integrity":"sha512-ZPYN952S2UrDuwfjcDoxbDYDReVjooHYJjw0/EHd4of3ZGBeZByVrx+SOzFuLua54VSHm8HeyIqi5gxhh4Ectw==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.15.0_1783202716626_0.9719775389694418","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"anon-pi","version":"0.16.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.16.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"52bedd6af7bf8a5a2dd7c0658b810b7cc3bd6ee3","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.16.0.tgz","fileCount":20,"integrity":"sha512-yutIALkM6FEjtYQpit/YBuNKWsqVx8teNq77auNzhfcMRy/qPq0t3fvi3esB7PxEVpdoVszxtIcxlFZbGw8w0w==","signatures":[{"sig":"MEYCIQCqeBMnBUMv8tSiRjgLMTUTXD/wlIZCGKmvpE9KzJHitwIhAN8nc9sV2Axqp0RulpXW8AShXBMPxp9rRuAt1RJDX6hK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":793524},"type":"module","_from":"file:anon-pi-0.16.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/b7aa80b0994c35094a99e495df6299d4/anon-pi-0.16.0.tgz","_integrity":"sha512-yutIALkM6FEjtYQpit/YBuNKWsqVx8teNq77auNzhfcMRy/qPq0t3fvi3esB7PxEVpdoVszxtIcxlFZbGw8w0w==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.16.0_1783239802248_0.7453436289098936","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"anon-pi","version":"0.17.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.17.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"8d1f1b10067e09f9e0969dd51de7440d95181f60","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.17.0.tgz","fileCount":20,"integrity":"sha512-BXlfFGr4X1T95xbyrBNYXmdaary/1erJ4IvKk1xpdiRNvHfggbvA8qLZjuqyCsCjKkp1WkBRmi5QgHJIzbp2Jw==","signatures":[{"sig":"MEUCIQCUF7DWTTbKOVwxbZbSe0RnNRY+dvLPAyd3xxmAeAxEOQIgLIMqM94cXtb8bIRMu4a4A5b7lG6TffTUxKRRtLMJgvE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":872410},"type":"module","_from":"file:anon-pi-0.17.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/b85fac2225e40e7dcd68258cebe0d068/anon-pi-0.17.0.tgz","_integrity":"sha512-BXlfFGr4X1T95xbyrBNYXmdaary/1erJ4IvKk1xpdiRNvHfggbvA8qLZjuqyCsCjKkp1WkBRmi5QgHJIzbp2Jw==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.17.0_1783247782534_0.9446611939260445","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"anon-pi","version":"0.18.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.18.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"c2c420555681fd620e3618225c8ec799d6f93e47","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.18.0.tgz","fileCount":20,"integrity":"sha512-f7w1epKWK6P3q8qShypwI++iQWiiTPr/i6Lnvil9ssdLfT9X6Mh/rxiJKRTXMSpaiGEimo2GtMiMRa0ANDWrqw==","signatures":[{"sig":"MEYCIQCTyrAZLiwTKoSiAgGiTU6nFHYsiLyV2pG7txds1eWXnAIhAKEgrbZAmL9l3PPL0NHqvCXyn1wCPpa0qrFNtC/L6piQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":881017},"type":"module","_from":"file:anon-pi-0.18.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/5ae34d1c1f08dcdce453c81aa67cfbd1/anon-pi-0.18.0.tgz","_integrity":"sha512-f7w1epKWK6P3q8qShypwI++iQWiiTPr/i6Lnvil9ssdLfT9X6Mh/rxiJKRTXMSpaiGEimo2GtMiMRa0ANDWrqw==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.18.0_1783248958026_0.2894211200866783","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"anon-pi","version":"0.19.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.19.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"a1cd4a16b1fb38e9436fe83f827319a89267b018","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.19.0.tgz","fileCount":20,"integrity":"sha512-/Ir0C4IDjtrqQCNwUGfsMgBLS0Re9dEGDF2ieG0MjT4Tq91ZGmXTb/5w8z2RN+c0sLIJOn60JubuxeohfJu3Xw==","signatures":[{"sig":"MEUCIGE0glqz6PFmb4X/IljrX8BpIrQtlakD/KT845IFTPU4AiEAzL3BSudbickV46Qn8uES/0xpoW643fsB170KaQEVb0w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":886518},"type":"module","_from":"file:anon-pi-0.19.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/235ae3202319599c9c9dd8c07789c2f1/anon-pi-0.19.0.tgz","_integrity":"sha512-/Ir0C4IDjtrqQCNwUGfsMgBLS0Re9dEGDF2ieG0MjT4Tq91ZGmXTb/5w8z2RN+c0sLIJOn60JubuxeohfJu3Xw==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.19.0_1783249690277_0.43136850734356535","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"anon-pi","version":"0.20.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.20.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"d2d2f7892752ad370d8637542b079b3c4fc7afe5","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.20.0.tgz","fileCount":20,"integrity":"sha512-TueA/i2LDrHE1S/B6uUZCmqleptlZ2BRbsJI8ECcZzmy5n9TIWyLm/cl/hQ8PL+dn2LzLsv2Xkk5JTs+XYC+1A==","signatures":[{"sig":"MEYCIQC5eigJYI/OBT2uSL70st4nseXA9zc2JYF8LCSBJqm1FAIhAL6wQyFTDP4dNfYXdSESsf2FAnLCQxoGVNuK35kKuREK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":923885},"type":"module","_from":"file:anon-pi-0.20.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/89da833ec2ce5158959b4380c8b56e93/anon-pi-0.20.0.tgz","_integrity":"sha512-TueA/i2LDrHE1S/B6uUZCmqleptlZ2BRbsJI8ECcZzmy5n9TIWyLm/cl/hQ8PL+dn2LzLsv2Xkk5JTs+XYC+1A==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.20.0_1783254773517_0.19188759354088258","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"anon-pi","version":"0.21.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.21.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"01d3e97731b3a6247f3813442cbb46d909ff10c4","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.21.0.tgz","fileCount":20,"integrity":"sha512-miV6rv9ycEtjm5sS2zHOCReXd+4FAMvVytSnXHEsxBAsHvB1uWz7RB9TeapYQVZgeIoGjI0kWCDBPB5Ebo7yRg==","signatures":[{"sig":"MEUCIDzQsK5rKEbA1KA3BGjbAO08D0CkbPLt5ImvfxEncQN/AiEAhahiWksL81VcYptSn98v3cs3Y0vj1WpTo4gtTcBOkdw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1039256},"type":"module","_from":"file:anon-pi-0.21.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/244cc7b296cab8326df98ae00524aa5c/anon-pi-0.21.0.tgz","_integrity":"sha512-miV6rv9ycEtjm5sS2zHOCReXd+4FAMvVytSnXHEsxBAsHvB1uWz7RB9TeapYQVZgeIoGjI0kWCDBPB5Ebo7yRg==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.21.0_1783315327754_0.2078227653824678","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"anon-pi","version":"0.22.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.22.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"7dff1102af4fe6554ef4cb849dcd1e7e94220021","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.22.0.tgz","fileCount":20,"integrity":"sha512-HBGfhdOZUcgH6I+GdaamhfVnIbJMn9E5+zUzudH3m1DZj8ugJct+so+EUfd6vwTOao+E/l5lx2FYIFwID3zp9Q==","signatures":[{"sig":"MEYCIQCuNL+Ig755VaM81luZ38rGXDYrTlB//iQ0mO479Z56zwIhAJfNfSZQdlB1UFZVR9Ff1JZsaDUV5I+URnaaFaLNWnN/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1175719},"type":"module","_from":"file:anon-pi-0.22.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/f26064ed77a5803ede880470cc5bdd3e/anon-pi-0.22.0.tgz","_integrity":"sha512-HBGfhdOZUcgH6I+GdaamhfVnIbJMn9E5+zUzudH3m1DZj8ugJct+so+EUfd6vwTOao+E/l5lx2FYIFwID3zp9Q==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.22.0_1783368788904_0.8356190126854843","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"anon-pi","version":"0.23.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.23.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"2266b43225a1285f55734cdcbac6182d67e788ad","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.23.0.tgz","fileCount":20,"integrity":"sha512-2oqlL5bxbcjqcxwaaPHi7SuABgiFxWrrHYn3QLRZuYk5NZc5bX/Srz6++Mrgf+Guw8wuYHlzW7ilCkaFYYA2vg==","signatures":[{"sig":"MEYCIQCv58fyZhfr2fdT5eId0mml2DjTbsQdEPrXIjikED0WqwIhAP6ZHDBx4zkTPyvFqYP0jfAtyFsjxtXNyF4rCJYchsmC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1189183},"type":"module","_from":"file:anon-pi-0.23.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/2c639964c1d0dd3eeea8b6eea4eaa505/anon-pi-0.23.0.tgz","_integrity":"sha512-2oqlL5bxbcjqcxwaaPHi7SuABgiFxWrrHYn3QLRZuYk5NZc5bX/Srz6++Mrgf+Guw8wuYHlzW7ilCkaFYYA2vg==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.23.0_1783375913415_0.318968020215203","host":"s3://npm-registry-packages-npm-production"}},"0.23.1":{"name":"anon-pi","version":"0.23.1","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.23.1","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"82fdb099df2636302473f1e49c1642e56207dad4","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.23.1.tgz","fileCount":20,"integrity":"sha512-hAtt2VGc3DWk9++ae/bT0s/mGcfYfBbbd8Me558jOmXE5TqiUTpI8Tiivzv6d3lc8vEcgIgsbmuFqgocM47x0g==","signatures":[{"sig":"MEUCIQDtHx04iWa9lPKPtM8bqrN+Ud5CF6U5pyHtMRvSeOxdzQIgNuC9ci2mmHQzodr0qhqzz1hs0WJoX6HVl9u/tZbrFr4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.23.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1211546},"type":"module","_from":"file:anon-pi-0.23.1.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/9861fb7cafe38699f17d91b0aa600ad8/anon-pi-0.23.1.tgz","_integrity":"sha512-hAtt2VGc3DWk9++ae/bT0s/mGcfYfBbbd8Me558jOmXE5TqiUTpI8Tiivzv6d3lc8vEcgIgsbmuFqgocM47x0g==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.23.1_1783378406636_0.0643170483274893","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"anon-pi","version":"0.24.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.24.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"9bb3ea72fd9395df264c79dcd4c758bd13c21ad5","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.24.0.tgz","fileCount":20,"integrity":"sha512-qQTTFRZtUiJLiy7g4iROV1mYz/JIBkjjUxGuTETVj6B9UruvtJj4aDRhnXSUm7aOFUiG6tWCYPtp4ruGZv/ROQ==","signatures":[{"sig":"MEQCIEqz80UpBspbiD3lIOC8xuaBY/ewnrmBOh0VF2ffeWCnAiB4rXz4tF0YqBUdU/rPyHK3eaqdE/Q6ifiP+RvYBQqKiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1221180},"type":"module","_from":"file:anon-pi-0.24.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/5e391315327b9fa88e2d5bdd7269265b/anon-pi-0.24.0.tgz","_integrity":"sha512-qQTTFRZtUiJLiy7g4iROV1mYz/JIBkjjUxGuTETVj6B9UruvtJj4aDRhnXSUm7aOFUiG6tWCYPtp4ruGZv/ROQ==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.24.0_1783380336755_0.6454334611999994","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"anon-pi","version":"0.25.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.25.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"4556058894874e7bcd920808adcdcb4e144d649d","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.25.0.tgz","fileCount":20,"integrity":"sha512-45O3l2lUgjeoAQtmhV8gsbCUbjAJuqTF0stcVEAOaBM5cvtr9P72IyV6+1APnMUKMdW3Eq4e0P92NjaUWuE+hw==","signatures":[{"sig":"MEYCIQD4rJexb1SsfENQ1xoDUo3b+fzYeBdQ1x/U+OHkdZCplQIhALe90fXAJEee1yv9Z/8/MH0tq4fzOfPCZEifnq+seO9h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1230849},"type":"module","_from":"file:anon-pi-0.25.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/197d88b0ddbc69fcacc472d2313eebdd/anon-pi-0.25.0.tgz","_integrity":"sha512-45O3l2lUgjeoAQtmhV8gsbCUbjAJuqTF0stcVEAOaBM5cvtr9P72IyV6+1APnMUKMdW3Eq4e0P92NjaUWuE+hw==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.25.0_1783381580973_0.878371434900459","host":"s3://npm-registry-packages-npm-production"}},"0.25.1":{"name":"anon-pi","version":"0.25.1","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.25.1","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"a52823a96c6073d7c76296e3ebdaa0c5f6bcf8af","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.25.1.tgz","fileCount":20,"integrity":"sha512-M7ZxWkqerkppJn7vu3wUrYCoBK1YiEgCTLPsoV6ribSniDf4TFHhRBQo1B8rbKBWNJdD4TtBSx6NrYeNbn6byA==","signatures":[{"sig":"MEUCIQDFtDDUFNxpIHjEW5l8P1AfGw9Gx+3lHp0SLd9CVegnQwIgPZTjdoPFr82IItjcO2PorbhOGx7dfTYta5zJgKbNR2M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.25.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1231193},"type":"module","_from":"file:anon-pi-0.25.1.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/93ad0449e383e131755f62e6bb3bb177/anon-pi-0.25.1.tgz","_integrity":"sha512-M7ZxWkqerkppJn7vu3wUrYCoBK1YiEgCTLPsoV6ribSniDf4TFHhRBQo1B8rbKBWNJdD4TtBSx6NrYeNbn6byA==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.25.1_1783384293440_0.07517176008445814","host":"s3://npm-registry-packages-npm-production"}},"0.25.2":{"name":"anon-pi","version":"0.25.2","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.25.2","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"b830e750374e4e4aee41aade1cfe04d28c51953c","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.25.2.tgz","fileCount":20,"integrity":"sha512-BuAvjujjTHaY5SMZTvHlp1u2yWK7ikbjFuRt+prh9qOFnSZWvPIJNy2FWlV4Nb9a9KxxrpkyAd2nwPV1WDl+UA==","signatures":[{"sig":"MEUCIGdW9DZbaTmnNy4ireJeYzbauL3FNQfQkd7GrSy8tzzAAiEAujDEtXZLJBNbsDupi2CwXqwTHD21ufKQh/oAHCNT8no=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.25.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1241672},"type":"module","_from":"file:anon-pi-0.25.2.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/83eb4f8b182730a8d748b0f11ce47f09/anon-pi-0.25.2.tgz","_integrity":"sha512-BuAvjujjTHaY5SMZTvHlp1u2yWK7ikbjFuRt+prh9qOFnSZWvPIJNy2FWlV4Nb9a9KxxrpkyAd2nwPV1WDl+UA==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.25.2_1783384725886_0.3104657877091097","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"anon-pi","version":"0.26.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.26.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"260b9a2674bbd37b94d0557b49b66a46785b5da2","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.26.0.tgz","fileCount":20,"integrity":"sha512-F/ns09s0m0clfQlv3j9HzBh406HfTTjjq3Lk0dbuYkVfFeiCBkDiCj8MCBuiSvxtgm1josTdc+KuIFXk8kZWlA==","signatures":[{"sig":"MEYCIQCSD5pmD8kDuBbvuCVuNBPJg2liDuAl4E8e8uJmNi/RzAIhAP8e/Bh6ijhXyfCZdWGdCMak9ZC0T/YMbOzON31xPNOt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.26.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1276350},"type":"module","_from":"file:anon-pi-0.26.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/321687faaf23ea686fcf45d548cf48fe/anon-pi-0.26.0.tgz","_integrity":"sha512-F/ns09s0m0clfQlv3j9HzBh406HfTTjjq3Lk0dbuYkVfFeiCBkDiCj8MCBuiSvxtgm1josTdc+KuIFXk8kZWlA==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.26.0_1783404071995_0.12565002493330013","host":"s3://npm-registry-packages-npm-production"}},"0.27.0":{"name":"anon-pi","version":"0.27.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.27.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"4cd403d81632c66161be24e4e2249f2e4d430cfb","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.27.0.tgz","fileCount":20,"integrity":"sha512-XFCvPCKxCH6mO5GROem2osjWY8vvkO2/3GapN/NWZiPS36kC8HXkWDjClRsqnXUZ33+tGEOSVAw4ZQM4aUruLw==","signatures":[{"sig":"MEUCIQD0BIpS65BP4sB+W6jIMF34mdg64GynQzaFDDjcZUDM/gIgNKSf82i4W8vLG26yPehdnkseu2+qyZZ/LKmQ7zCCsbQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.27.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1287611},"type":"module","_from":"file:anon-pi-0.27.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/823aca5c83b5e9214e376d4dfc4d110e/anon-pi-0.27.0.tgz","_integrity":"sha512-XFCvPCKxCH6mO5GROem2osjWY8vvkO2/3GapN/NWZiPS36kC8HXkWDjClRsqnXUZ33+tGEOSVAw4ZQM4aUruLw==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.27.0_1783406034313_0.5654512790180528","host":"s3://npm-registry-packages-npm-production"}},"0.28.0":{"name":"anon-pi","version":"0.28.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.28.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"97ab5a39d794ad2696f84b9ada4b07afea339e74","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.28.0.tgz","fileCount":20,"integrity":"sha512-xdZmTN6qCV/lrffcwsOIw8+JGQha0tv++Gv40gmS8yK6e6uAPYgdbQI7Uu9YozrEj+BlsRPA8DUt75I+zOruRA==","signatures":[{"sig":"MEQCICS5dygmOQpCpGrL2TTJPttdwcXlhSRaaxKpmUletO/9AiBo5YfZ2tlpH3KYrufxL2cpAsyqWnat03uCmzkvl1ugMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.28.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1303762},"type":"module","_from":"file:anon-pi-0.28.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/dd048cc4291f01637db62885a0089e82/anon-pi-0.28.0.tgz","_integrity":"sha512-xdZmTN6qCV/lrffcwsOIw8+JGQha0tv++Gv40gmS8yK6e6uAPYgdbQI7Uu9YozrEj+BlsRPA8DUt75I+zOruRA==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.28.0_1783406515161_0.32200839806813497","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"anon-pi","version":"0.29.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.29.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"f1ebd813e63655ee021ca0566cebac085a7bc98e","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.29.0.tgz","fileCount":20,"integrity":"sha512-IH9BVG4BTIcA/J5zNpgTY0d0k4dQ5LTVRNefTGPj3M9hajYWpxuEQwvcFo2soTZBWUDiH8xUFg53Tu3nC9y3nA==","signatures":[{"sig":"MEYCIQCqHCeBJAWxRh7KlOJIuJ5CLKb7gH6eI4PyEglBiX7tBwIhAOH/IjcXTo78vmUBSlFMp+9HbaVbR45il3XeoLREU0rR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.29.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1318171},"type":"module","_from":"file:anon-pi-0.29.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/9a6a3eeab9200318297eb4b24858c960/anon-pi-0.29.0.tgz","_integrity":"sha512-IH9BVG4BTIcA/J5zNpgTY0d0k4dQ5LTVRNefTGPj3M9hajYWpxuEQwvcFo2soTZBWUDiH8xUFg53Tu3nC9y3nA==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.29.0_1783408466069_0.3962475047483103","host":"s3://npm-registry-packages-npm-production"}},"0.29.1":{"name":"anon-pi","version":"0.29.1","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.29.1","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"b34704bc0a08c32d56bdaa2078f8c3cb85c7c806","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.29.1.tgz","fileCount":20,"integrity":"sha512-SGDskbmMWhuvMwHLhhgdRdi1qCwj3yUCeV5NIFWaWzW+91b4IBADhn/rvlXPCkRNs25E3o6rjysEzRfC8aQjoQ==","signatures":[{"sig":"MEQCICbhWe6m/jkpYzDXmRdizS5yqvQhK6h1fVpHNmERN1q+AiATTxV4aYJG3afkoswnNmpWBFoLrPIh8j7emJ+5PiJZyw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.29.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1323094},"type":"module","_from":"file:anon-pi-0.29.1.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/fb5eb2576c5be4fced337986bfb23568/anon-pi-0.29.1.tgz","_integrity":"sha512-SGDskbmMWhuvMwHLhhgdRdi1qCwj3yUCeV5NIFWaWzW+91b4IBADhn/rvlXPCkRNs25E3o6rjysEzRfC8aQjoQ==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.29.1_1783409368686_0.489337581281172","host":"s3://npm-registry-packages-npm-production"}},"0.29.2":{"name":"anon-pi","version":"0.29.2","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.29.2","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"47ad9689d4ccfd8b4b06966726a5034c74759df5","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.29.2.tgz","fileCount":20,"integrity":"sha512-mmqZa60Jj29CKOb8lUCC7C0NSvSuu//CzoQAGppX+bNtlXTXNYPiyRkA+E5z2A0ST2OF6ViaTOCb5Y2QYsuD2Q==","signatures":[{"sig":"MEUCIQCq8od5b8yrl/UkSBuqSAI3FtnmEUbIQ7Eur7/RQfVFVgIgQtS4o/EGj8FWCiZggeCmUgA3MMGooeI/0MGQJoLhBz0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.29.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1325473},"type":"module","_from":"file:anon-pi-0.29.2.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/4b1fdab6d27e51e528ea275b6709abb1/anon-pi-0.29.2.tgz","_integrity":"sha512-mmqZa60Jj29CKOb8lUCC7C0NSvSuu//CzoQAGppX+bNtlXTXNYPiyRkA+E5z2A0ST2OF6ViaTOCb5Y2QYsuD2Q==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.29.2_1783409893428_0.038266576899371296","host":"s3://npm-registry-packages-npm-production"}},"0.29.3":{"name":"anon-pi","version":"0.29.3","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.29.3","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"392c19ee6f9a56da0af2fd1c4171a83bcd43f137","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.29.3.tgz","fileCount":20,"integrity":"sha512-6dUXdmHYGZMLFOOH70oBTPU71zYcmTVm/RNc2gJSYDQDB8P+3DDi+9zYBS1BLRAhP7RAJrRsvLj/kzooUioJTg==","signatures":[{"sig":"MEQCIA5EMp0cI8WEqTOdISLFIhSrLwNoi4w0vj8lDkOr+6gcAiAK8/3jf89wo2JdXMZsYSzlVj5+7Nhy0utBGs2CwlzcXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.29.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1329593},"type":"module","_from":"file:anon-pi-0.29.3.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/b07077e4bbd016349d093f9bdd4d03d2/anon-pi-0.29.3.tgz","_integrity":"sha512-6dUXdmHYGZMLFOOH70oBTPU71zYcmTVm/RNc2gJSYDQDB8P+3DDi+9zYBS1BLRAhP7RAJrRsvLj/kzooUioJTg==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.29.3_1783411371814_0.7124790071045894","host":"s3://npm-registry-packages-npm-production"}},"0.29.4":{"name":"anon-pi","version":"0.29.4","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.29.4","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"2b3a0a81c5bd94cb998837172cf35ea5439aae9a","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.29.4.tgz","fileCount":20,"integrity":"sha512-e8AqMvO/SGrcqI8P15lHGt4McmLRU7Ys90hVcmkQiDmhQoRZJ6f0N1kfsGiJ7JYrgvLJldDEw96r74Cc89ZDfg==","signatures":[{"sig":"MEUCIQDqJCyVNMLwLQp3YUyBJmjUcdRLY+U1K3vhLfxRU5qA/wIgI5Z4gUGmyrMrG11cK4fsi7+6LZ+y9H0F4rX4AH4yD4A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.29.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1331292},"type":"module","_from":"file:anon-pi-0.29.4.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/61904494a58e13304436a2c850f69192/anon-pi-0.29.4.tgz","_integrity":"sha512-e8AqMvO/SGrcqI8P15lHGt4McmLRU7Ys90hVcmkQiDmhQoRZJ6f0N1kfsGiJ7JYrgvLJldDEw96r74Cc89ZDfg==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.29.4_1783412584011_0.9310858290607955","host":"s3://npm-registry-packages-npm-production"}},"0.29.5":{"name":"anon-pi","version":"0.29.5","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.29.5","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"618e828c0f71781427d32be2ea397d633fa56ca0","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.29.5.tgz","fileCount":20,"integrity":"sha512-2hvWSCSk1ztrzLjGe6IBSbC/E7yzwfcxmfRWXzyZueFAYW8NuQ2/+w0Cq1IDHVkrdgdDRs+U0a21Y/5L5EM0Cw==","signatures":[{"sig":"MEQCIA7ZyimdnEy/Q4wQ5HLo5aK1J3yeZNEOX1EHJwUYLUMUAiAIT4j9DI95lhEq2j8RxE/Ua03FXb4OxLN+2S2OLpehVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.29.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1335141},"type":"module","_from":"file:anon-pi-0.29.5.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/facd855aa9676b6aa75265265bdaaf09/anon-pi-0.29.5.tgz","_integrity":"sha512-2hvWSCSk1ztrzLjGe6IBSbC/E7yzwfcxmfRWXzyZueFAYW8NuQ2/+w0Cq1IDHVkrdgdDRs+U0a21Y/5L5EM0Cw==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.29.5_1783413092312_0.43107139118853843","host":"s3://npm-registry-packages-npm-production"}},"0.29.6":{"name":"anon-pi","version":"0.29.6","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.29.6","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"adb920c46a7746d81795d71109b3a84ac826734d","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.29.6.tgz","fileCount":20,"integrity":"sha512-baqCeDj6o+bEO/xwOHX1L5D54johpH31rYpGtr65CVMuCywOILVlEppKTQTqLDBRn4BvZ0ginFKUwehrfwAkTg==","signatures":[{"sig":"MEUCIEfarJEqrm3C9C6GWAgICge9inzefuziLHciVBH9t++2AiEAzgzrmu5NCUuKzg575C10TukieDnLB65QqjSh0cMrPPM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.29.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1345692},"type":"module","_from":"file:anon-pi-0.29.6.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/4f6791344354e95f54bf30ee7d16aad0/anon-pi-0.29.6.tgz","_integrity":"sha512-baqCeDj6o+bEO/xwOHX1L5D54johpH31rYpGtr65CVMuCywOILVlEppKTQTqLDBRn4BvZ0ginFKUwehrfwAkTg==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.29.6_1783413745114_0.4779581026830553","host":"s3://npm-registry-packages-npm-production"}},"0.29.7":{"name":"anon-pi","version":"0.29.7","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.29.7","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"178d8dcbaeaca60eb19c53e16b71aa204c5e923b","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.29.7.tgz","fileCount":20,"integrity":"sha512-mjS8f4aH2ib+0N+IrFwg9jbDKez4rvkpT8wUd+5FUZUEyZXZYKBu9x4E48xptXPDAhYcUjiJ2sEKSQC/Jh1Oag==","signatures":[{"sig":"MEUCIDUSvvQmwwFzu7rYdtWF/LDhnHguFm7gWsCp4ok0vVzMAiEA2bSIirFbpc7iZ5KQ1gn335HrufHfuPJHmQOUsZVeNw8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.29.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1346096},"type":"module","_from":"file:anon-pi-0.29.7.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/17e49aa43057d8b3d0eaeef544dc952a/anon-pi-0.29.7.tgz","_integrity":"sha512-mjS8f4aH2ib+0N+IrFwg9jbDKez4rvkpT8wUd+5FUZUEyZXZYKBu9x4E48xptXPDAhYcUjiJ2sEKSQC/Jh1Oag==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.29.7_1783417555166_0.0832989757515481","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"name":"anon-pi","version":"0.30.0","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.30.0","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"71460e61f96116c356f11725a39f356493ad2a73","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.30.0.tgz","fileCount":20,"integrity":"sha512-Ps127BN2Y+Yav47S3CSL6NuaYUo4IBzUKqAycKkuI1XIHZRBhEigExBsJNO6f3XsnDID+V9hlpmwCHSoJtVzCA==","signatures":[{"sig":"MEUCIEN6UhSS2b2C+sGoogVuiKj8GGNQzw4/YUxrYzGlCWy+AiEAiwjs/PFizCX31RIFn7b9EJvX8xOPrxpy+zyP66OY6iY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.30.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1349617},"type":"module","_from":"file:anon-pi-0.30.0.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/a2eb64cb906769859484346528238d7e/anon-pi-0.30.0.tgz","_integrity":"sha512-Ps127BN2Y+Yav47S3CSL6NuaYUo4IBzUKqAycKkuI1XIHZRBhEigExBsJNO6f3XsnDID+V9hlpmwCHSoJtVzCA==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.30.0_1783422742307_0.15186162324610608","host":"s3://npm-registry-packages-npm-production"}},"0.30.1":{"name":"anon-pi","version":"0.30.1","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"license":"AGPL-3.0-only","_id":"anon-pi@0.30.1","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"homepage":"https://github.com/wighawag/anon-pi#readme","bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"bin":{"anon-pi":"dist/cli.js"},"dist":{"shasum":"83263f89b2d467c56c4be24b14257127fd2cef50","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.30.1.tgz","fileCount":20,"integrity":"sha512-cACj43EEJSz3FjOF4MzcrOhLmRSKspn+ucpuciBuDOV+U2iNRRPYneP34IZWfGfKsX6baW72vAc4v+d2cptsaw==","signatures":[{"sig":"MEUCIQCv+RDLOeoW+YFUlsI+qTmub59gxkZpt4uuwlQme5E5UAIgQKaxSi3S8z38gTuNc/OhMXY2r7ptaq101ZVR//4Ev38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.30.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1353054},"type":"module","_from":"file:anon-pi-0.30.1.tgz","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","build":"pnpm copy-readme && tsc","test:watch":"vitest","copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"_resolved":"/tmp/392a12d953429c61174b0e8201c78b20/anon-pi-0.30.1.tgz","_integrity":"sha512-cACj43EEJSz3FjOF4MzcrOhLmRSKspn+ucpuciBuDOV+U2iNRRPYneP34IZWfGfKsX6baW72vAc4v+d2cptsaw==","repository":{"url":"git+https://github.com/wighawag/anon-pi.git","type":"git","directory":"packages/anon-pi"},"_npmVersion":"11.16.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","as-soon":"^0.1.5","typescript":"^5.3.3","@types/node":"^25.2.0"},"_npmOperationalInternal":{"tmp":"tmp/anon-pi_0.30.1_1783424753645_0.4291558160131339","host":"s3://npm-registry-packages-npm-production"}},"0.31.0":{"name":"anon-pi","version":"0.31.0","description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","license":"AGPL-3.0-only","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"homepage":"https://github.com/wighawag/anon-pi#readme","repository":{"type":"git","url":"git+https://github.com/wighawag/anon-pi.git","directory":"packages/anon-pi"},"bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"publishConfig":{"access":"public"},"type":"module","bin":{"anon-pi":"dist/cli.js"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"engines":{"node":">=20"},"dependencies":{},"devDependencies":{"@types/node":"^25.2.0","as-soon":"^0.1.5","tsx":"^4.21.0","typescript":"^5.3.3","vitest":"^4.0.18"},"scripts":{"copy-readme":"node -e \"require('fs').copyFileSync(require('path').join('..','..','README.md'),'README.md')\"","build":"pnpm copy-readme && tsc","dev":"as-soon -w src pnpm build","test":"pnpm copy-readme && vitest run","test:watch":"vitest"},"_id":"anon-pi@0.31.0","_integrity":"sha512-jQDm+kM3YZFPSCG2xFG9++uLZeGdLkzwERSITunC+5WKs9Ep/+DUTFMvHjacDP4XswczA35g9PmNggxQg51cdQ==","_resolved":"/tmp/d98e9bce40619ed77e1e9aca38d3943a/anon-pi-0.31.0.tgz","_from":"file:anon-pi-0.31.0.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-jQDm+kM3YZFPSCG2xFG9++uLZeGdLkzwERSITunC+5WKs9Ep/+DUTFMvHjacDP4XswczA35g9PmNggxQg51cdQ==","shasum":"e6738ef7351661dd60ff18297effe0ac926ada11","tarball":"https://registry.npmjs.org/anon-pi/-/anon-pi-0.31.0.tgz","fileCount":20,"unpackedSize":1359767,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/anon-pi@0.31.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD/QxiiL7Ifq/3MN4vuzoXj5vU352zv61FDx7YhVtqgIgIgMMWeZxpF584GPnfhDAn02kGjMUlNpA7fgDLHwo6YSgM="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f099e399-847b-4f8a-a0db-93719ebbffb2"}},"directories":{},"maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/anon-pi_0.31.0_1783684811198_0.5626565024463679"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-02T14:25:49.559Z","modified":"2026-07-10T12:00:11.740Z","0.1.0":"2026-07-02T14:25:49.946Z","0.1.1":"2026-07-02T15:15:43.213Z","0.2.0":"2026-07-02T16:12:28.341Z","0.3.0":"2026-07-02T19:10:56.929Z","0.4.0":"2026-07-02T19:22:07.343Z","0.5.0":"2026-07-04T05:23:24.253Z","0.6.0":"2026-07-04T06:08:42.489Z","0.7.0":"2026-07-04T06:41:47.497Z","0.8.0":"2026-07-04T09:08:30.551Z","0.9.0":"2026-07-04T11:01:05.443Z","0.9.1":"2026-07-04T11:32:51.304Z","0.10.0":"2026-07-04T11:51:21.738Z","0.11.0":"2026-07-04T15:36:40.499Z","0.11.1":"2026-07-04T16:23:23.539Z","0.12.0":"2026-07-04T19:36:22.852Z","0.13.0":"2026-07-04T21:08:55.618Z","0.14.0":"2026-07-04T21:38:48.912Z","0.15.0":"2026-07-04T22:05:16.801Z","0.16.0":"2026-07-05T08:23:22.421Z","0.17.0":"2026-07-05T10:36:22.685Z","0.18.0":"2026-07-05T10:55:58.224Z","0.19.0":"2026-07-05T11:08:10.471Z","0.20.0":"2026-07-05T12:32:53.908Z","0.21.0":"2026-07-06T05:22:07.946Z","0.22.0":"2026-07-06T20:13:09.074Z","0.23.0":"2026-07-06T22:11:53.640Z","0.23.1":"2026-07-06T22:53:26.834Z","0.24.0":"2026-07-06T23:25:36.947Z","0.25.0":"2026-07-06T23:46:21.128Z","0.25.1":"2026-07-07T00:31:33.648Z","0.25.2":"2026-07-07T00:38:46.099Z","0.26.0":"2026-07-07T06:01:12.175Z","0.27.0":"2026-07-07T06:33:54.482Z","0.28.0":"2026-07-07T06:41:55.304Z","0.29.0":"2026-07-07T07:14:26.253Z","0.29.1":"2026-07-07T07:29:28.824Z","0.29.2":"2026-07-07T07:38:13.593Z","0.29.3":"2026-07-07T08:02:51.960Z","0.29.4":"2026-07-07T08:23:04.217Z","0.29.5":"2026-07-07T08:31:32.465Z","0.29.6":"2026-07-07T08:42:25.314Z","0.29.7":"2026-07-07T09:45:55.302Z","0.30.0":"2026-07-07T11:12:22.452Z","0.30.1":"2026-07-07T11:45:53.803Z","0.31.0":"2026-07-10T12:00:11.365Z"},"bugs":{"url":"https://github.com/wighawag/anon-pi/issues"},"license":"AGPL-3.0-only","homepage":"https://github.com/wighawag/anon-pi#readme","keywords":["pi","netcage","anonymity","socks5h","tor","proxy","privacy","cli","agent"],"repository":{"type":"git","url":"git+https://github.com/wighawag/anon-pi.git","directory":"packages/anon-pi"},"description":"Launch pi inside a netcage: anonymized web egress through a socks5h proxy, one direct hole for a local model, seeded pi config on the host.","maintainers":[{"name":"wighawag","email":"npmdev1234567890@gmail.com"}],"readme":"# anon-pi\n\nRun [pi](https://github.com/earendil-works/pi-mono) on anonymized, jailed **machines**: all of pi's web and DNS egress is forced through a socks5h proxy (fail-closed, leak-proof) by [netcage](https://github.com/wighawag/netcage), while ONE direct hole is opened to a local model on your LAN. Your machines and their conversations live in a browsable host workspace (`~/.anon-pi/`); the container itself is disposable.\n\nanon-pi is a thin, opinionated launcher over `netcage run`. It is a separate package on purpose: netcage wraps any tool and stays tool-agnostic; anon-pi holds the pi-specific opinion. netcage owns the jail (network namespaces, firewall, DNS); anon-pi never touches Podman directly and never weakens the forced-egress invariant.\n\n> **Upgrading from 0.4.0?** The model changed: a bare positional is now a\n> **project**, not a host path, and `import` / `--fresh` / `--ephemeral` are\n> gone. See [Migrating from 0.4.0](#migrating-from-040).\n\n## The model: machines + projects\n\n- A **machine** is an **image + a persistent host home**. The home (`machines/<name>/home`) is bind-mounted into the jail at `/root`, so it holds your shell config, pi config + extensions, and your pi conversations. A machine is a named, durable, anonymized workstation. The container is disposable; the home survives.\n- A **project** is a work folder under the **projects root**, mounted into the jail at `/projects/<name>` (pi's cwd). It is just files, image-agnostic. Because pi keys a conversation by its launch cwd, `/projects/<name>` is the conversation key: the same project used from two machines has a separate conversation in each machine's home.\n- The **projects root** is global by default (`~/.anon-pi/projects/`, shared across machines). Override it per-launch with `--mount <host-parent>`, or persistently via `config.json` / `ANON_PI_PROJECTS`.\n- The **proxy** is a `socks5h://` endpoint that anonymizes all egress. It is REQUIRED and never guessed: no proxy, no launch (fail-closed).\n- The **local model** is the one non-proxied path: an RFC1918/link-local `host:port` reached directly, so pi can call a LAN model while everything else stays proxied.\n\n## Requirements\n\n- **Linux.** anon-pi inherits netcage's platform reality (network namespaces + nftables + rootless Podman). See [Platform](#platform).\n- **[`netcage`](https://github.com/wighawag/netcage)** on your `PATH`.\n- A running **socks5h proxy** (local Tor, `ssh -D`, wireproxy, ...).\n- A **container image with `pi` on its `PATH`**. `anon-pi init` can build one for you from a shipped `Dockerfile.pi`; see [Providing a pi image](#providing-a-pi-image).\n\n## Install\n\n```sh\nnpm i -g anon-pi\n# or run without installing:\nnpx anon-pi\n```\n\n## Quick start\n\n```sh\nanon-pi init          # one-time: verify your proxy, capture your local model, pick/build an image\nanon-pi               # bare: pick a project (or a shell, or a new project) from the menu\nanon-pi recon         # or launch straight into a project\n```\n\nThe **first time** you launch anon-pi with no config yet, it welcomes you and runs `init` automatically before launching (so you never hit a bare \"set `ANON_PI_PROXY`\" wall on day one). You can also run `anon-pi init` yourself any time to reconfigure. (If you drive config purely by env — you export `ANON_PI_PROXY` yourself — the auto-onboarding is skipped.)\n\n`init` is interactive and re-runnable. It:\n\n1. **Hardened deployment** — asks FIRST whether to run anon-pi's whole workspace under a dedicated `anonpi` account (see the hardened-deployment section below). This has **no default**: you answer `y` or `n` explicitly. It is first on purpose: it is the most likely step to block (it needs a system-wide anon-pi + netcage and a provisioned account), so you find out before investing in the proxy/model/image steps, and every later step is hardened-aware from the start. If you say yes it runs the preflight and prints only the root commands still needed.\n2. **Proxy** — probes common SOCKS ports, confirms SOCKS5 with a real handshake, shows the findings (evidence only, it never labels the exit provider), then runs `netcage verify` and shows the real EXIT IP as proof it is not your host IP. You confirm on that evidence. (When your netcage has `detect-proxy`, init reuses netcage's own scanner for this; otherwise it probes locally.)\n3. **Local model** — captures the `host:port` of your model, probes it, then **imports models**. It merges two sources, both scoped to that endpoint: the provider in your own `~/.pi/agent/models.json` whose URL matches it (marked `[configured]` — your hand-tuned entries, with their `contextWindow`/`maxTokens`/etc.), and the endpoint's live `/v1/models` (marked `[server]`). You pick which to import (Enter/`c` = all configured, `a` = all, numbers, or `s` = skip) and which is the **default**. Because only the provider served by this endpoint (the one `--allow` hole) is read, no other provider — and no other key — can ever enter the seed. It writes a **global** `models.json` + settings seed (shared by every machine, since the `llm` endpoint is global) and updates any already-seeded machine homes in place (conversations untouched). If the matching provider carries a real-looking apiKey, init **refuses** (it would put a host credential into the anon home) unless you pass `--force-allow-local-llm-api-key`.\n4. **Image** — pick a shipped `Dockerfile` (built via `podman build`), an existing image ref, or skip. If the shipped tag (`localhost/anon-pi/pi[-webveil]:latest`) is already in netcage's store, init offers to REUSE it instead of rebuilding, so re-running `init` (e.g. after an anon-pi upgrade) does not silently re-trigger the multi-minute build; answer `n` to rebuild fresh. On a **hardened** install the exists-check and the build run **as the `anonpi` account**, so the image lands in *that account's* uid-scoped netcage store (`/var/tmp/netcage-storage-<uid>`) where the hardened jail actually reads it — not stranded in your login user's store. (Each account has its own store by design, so a hardened persona builds its own copy; there is no shared image store, that isolation is what keeps personas unlinkable on-host.)\n5. **Projects root** — the host folder mounted at `/projects` (where bare `anon-pi` looks for projects). Defaults to `~/.anon-pi/projects/`; point it at your own dev folder if you want to jail pi into files you edit with host tools (`--mount <parent>` still overrides it per-launch). On a **hardened** install the default lives under the `anonpi` account's tree, and a path under your login home is **refused**: it would leak your login username (through the mount source and file ownership) into the anon-run jail, defeating the dedicated account.\n\nIt then writes `~/.anon-pi/config.json` + the `default` machine. It **never destroys** an existing home; it pre-fills your current values and only adds/updates config + the default machine.\n\n## Usage\n\n```\nanon-pi                        MENU: pick a project (pi), a shell, or a new project\nanon-pi <project>              pi in the project (/projects/<project>); exit pi -> host\nanon-pi <project> <pi-args…>   forward args to pi (e.g. -p for a headless one-shot)\nanon-pi <pi-args…>             any leading pi flag with no project forwards to pi\n                               (e.g. `anon-pi -p \"hello world\"`, `anon-pi --model x`)\nanon-pi --session <id>         resume a pi session by id, in its own project (also -r/--resume)\nanon-pi <project> --fork <id>  fork a session into <project> (`.`=root; --continue too; project required)\nanon-pi --list-models          list the models pi sees (also --models; no project needed)\nanon-pi pi <pi-args…>          explicit passthrough: run pi with ANY args and no project\nanon-pi --version              print anon-pi's version (also -V)\nanon-pi --shell [<project>]    a jailed bash (at ~, or cd'd into <project>) - the project-hopper\nanon-pi forward [<p>] [--port …]  open a host port onto a running container's in-jail server\nanon-pi ports [<project>]      list a running container's open in-jail TCP listeners\nanon-pi -m <machine> [<p>]     the same, on <machine> (its own image + home + conversations)\nanon-pi --mount <parent> [<p>] root at a HOST parent folder instead of the projects root\nanon-pi init                   onboard: verify your proxy, capture your local model, pick an image\nanon-pi machine …              manage machines (create / list / set-image / rm)\nanon-pi image …                snapshot a running container into an image; list anon-pi images\nanon-pi --delete-home [<m>]    delete a machine's home (config + convos); keep its image pin + files\nanon-pi --delete-project <p>   delete a project's files + its per-machine sessions; keep the homes\n```\n\nA `<project>` is a folder under the projects root (mounted at `/projects`; pi's cwd). The token `.` means the root itself (a scratch pi at `/projects`, at `/work` under `--mount`, or at `~` for a shell). A named project is created on the host if it does not exist yet.\n\nEvery subcommand carries its own help: `anon-pi --help` (the launch surface), `anon-pi init --help`, `anon-pi machine --help`, and `anon-pi image --help`.\n\n### Common tasks\n\n| I want to… | Command |\n| --- | --- |\n| Set up (first time / reconfigure) | `anon-pi init` |\n| Just pick something to work on | `anon-pi` (the menu) |\n| Work in a project | `anon-pi <project>` |\n| Resume a project's conversation | `anon-pi <project>` (same machine + project ⇒ same session) |\n| Resume a specific session by id | `anon-pi --session <id>` (resumes in its own project) |\n| Fork a session into a project | `anon-pi <project> --fork <id>` (`.` for the root; created on demand) |\n| Run a one-shot prompt (scriptable) | `anon-pi <project> -p \"…\"` |\n| Hop between projects / poke the box | `anon-pi --shell` then `cd /projects/<p> && pi` |\n| Open an in-jail server on the host | `anon-pi forward <project> --port 3001` (or `8080:3001`) |\n| See a container's open in-jail ports | `anon-pi ports <project>` |\n| A scratch pi not tied to a subfolder | `anon-pi .` |\n| Use a separate anonymized environment | `anon-pi -m <machine> <project>` |\n| Jail pi into a host folder you edit with host tools | `anon-pi --mount <host-parent> <subfolder>` |\n| Install system tools and keep them | `anon-pi --shell` (then `apt install …`), then `anon-pi image snapshot <name>` while it is still running |\n| Add a second machine | `anon-pi machine create <name> --image <ref>` |\n| Reset a machine's conversations | `anon-pi --delete-home [<machine>]` |\n| Delete a project (files + its sessions) | `anon-pi --delete-project <project>` |\n\n### A first session, end to end\n\n```sh\nanon-pi init                       # verify proxy (see the real exit IP), capture your model, build an image\nanon-pi recon                      # creates ~/.anon-pi/projects/recon, launches pi there\n# … work in pi; exit pi returns you to your host shell …\nanon-pi recon                      # later: same project, same machine ⇒ your conversation resumes\nanon-pi --shell                    # sit on the machine: cd /projects/recon && pi, run tmux, etc.\n```\n\nNothing you care about lives in the container: your conversation, config, and files are all in `~/.anon-pi/`, so the throwaway container going away on exit loses nothing.\n\n### The bare menu\n\nRun `anon-pi` with no project and you get an interactive, arrow-key menu (up/down or `k`/`j` to move, Enter to select, Ctrl-C to quit). It lists the projects under the active root and marks which the current machine has already worked on (\"used\" vs \"new here\"), plus a `.` here entry, a shell entry, and a \"new project\" entry. Picking a project launches it **byte-for-byte identically** to typing the equivalent command. `-m <machine>` and `--mount <parent>` with no project also open the menu (scoped to that machine / root).\n\nThe menu needs a TTY. Without one it refuses and tells you to name a project directly (`anon-pi <project>`).\n\n### `--shell`: the project-hopper\n\npi cannot `cd` into a different project mid-session (a conversation is keyed to its launch cwd). So when you want to move between projects, or poke around the machine, use a jailed shell:\n\n```sh\nanon-pi --shell            # bash at /projects (the projects root), inside the jail\nanon-pi --shell .          # same as bare --shell: bash at /projects (`.` is a synonym)\nanon-pi --shell recon      # bash cd'd into /projects/recon\n```\n\nA bare `--shell` lands at the projects root (`/projects`, or `/work` under `--mount`), the project-hopper's natural home: the model is project-centric, and anything you write under the machine home (`~`) persists into that machine's config home on the host, which is for config, not work. From inside the shell you can `cd` between `/projects/*` and run `pi` yourself in whichever one you want; `cd ~` reaches the machine home for the rare case you want it. The shell forwards no arguments (`anon-pi --shell recon extra` is an error); run pi from inside it instead. Same forced-egress jail as a pi launch.\n\n### Reaching an in-jail server from the host (`forward` / `ports`)\n\nA jailed tool sometimes runs a server you want to open on the host: a dev/preview server on `:3001`, a local API. The jail deliberately publishes no ports (that would open an inbound path around the forced egress), so host access is a separate, explicit verb, the way `kubectl port-forward` / `ssh -L` work. anon-pi wraps netcage's `forward` so you never handle the raw container name (needs **netcage >= 0.10.0**: anon-pi reads managed containers back via `netcage ps --format json`):\n\n```sh\n# terminal 1: a running session with a server inside (e.g. pi started `pnpm dev` on :3001)\nanon-pi recon\n# terminal 2: open that port on your host\nanon-pi forward recon --port 3001        # host 127.0.0.1:3001 -> jail 3001, until Ctrl-C\n```\n\nThe port is host-first, like docker/kubectl, so you can bind it on a **different host port**:\n\n```sh\nanon-pi forward recon --port 8080:3001   # host 8080 -> jail 3001\nanon-pi forward recon --port 3001 --bind 0.0.0.0   # LAN-visible (netcage warns; loopback is the default)\n```\n\nThe positional is always the **project** (a numeric name like `3001` is a project, never a port), and it only **filters** which containers are offered. If several sessions match (you can run `anon-pi recon` in two terminals), anon-pi shows a picker, each row annotated with that container's open in-jail ports.\n\n**Don't know the port?** Omit `--port` and anon-pi lists the container's open listeners and prompts you (defaulting to the obvious one), then asks whether to expose it on a different host port. You can also just list them:\n\n```sh\nanon-pi ports recon      # the container's open in-jail TCP listeners\n```\n\n`ports` reads the jail's listeners **image-independently** (netcage reads `/proc/net/tcp*` via the sidecar), so it works even for a minimal image with no `ss`/`netstat`/`nc`. An explicit `--port` may name a port that **isn't open yet**: the forward binds the host side immediately and reaches into the jail on the first connection, so you can set it up before the server starts. Forwarding works for as long as the container is running (every launch is throwaway, so the window is the session's lifetime).\n\n### Headless / one-shot\n\nAny tokens after the project are forwarded to pi verbatim. A run is headless (no TTY needed, so it fits scripts and pipes) only when you forward pi's `-p`/`--print`; other forwarded flags (like `--session`) stay interactive.\n\n```sh\nanon-pi recon -p \"summarize the findings in ./notes\"\n```\n\n#### Streaming the agent's progress\n\nA plain `-p` prints only pi's final answer, so a long run looks frozen while the agent works. Add anon-pi's `--mode text-stream` to watch it live: anon-pi runs pi with `--mode json` inside the jail, parses that event stream on the host, and renders a readable per-turn view (each assistant message, plus a `▶ <tool>` line per tool call) to **stderr**, while pi's final answer still goes to **stdout** so the run stays pipeable.\n\n```sh\nanon-pi recon -p --mode text-stream \"summarize the findings in ./notes\"\nanon-pi recon -p --mode text-stream \"...\" 2>/dev/null   # answer only (stderr is the progress view)\n```\n\n`text-stream` is an anon-pi-owned mode value: it requires `-p`, and it cannot be combined with another `--mode` (anon-pi owns the mode to drive the stream).\n\n### Resuming a session\n\n`anon-pi <project>` already resumes that project's conversation (the session is keyed by its `/projects/<name>` cwd, so same machine + same project reopens it). To resume a **specific** session by id, forward pi's `--session`/`--resume` flag with no project: anon-pi looks the session up in the machine's store, reads the project (cwd) it belongs to, and launches pi **there**, so it resumes in place instead of asking to fork:\n\n```sh\nanon-pi --session <id>     # resume that exact session, in its own project\nanon-pi --resume <id>      # same (also -r)\nanon-pi -m webveil --session <id>   # on a specific machine\n```\n\nSo when pi prints `To resume this session: pi --session <id>` on exit, just prefix it: `anon-pi --session <id>`.\n\n**Forking / continuing needs a project.** `--fork <id>` writes a *new* session and `--continue`/`-c` resumes the *newest* session for a cwd, so with no project they would land a conversation in the projects root by surprise. anon-pi refuses them without a project and asks you to name one (`.` for the root; the folder is created on demand):\n\n```sh\nanon-pi newproj --fork <id>   # fork <id> into a fresh /projects/newproj\nanon-pi . --fork <id>         # fork into the root itself\nanon-pi recon --continue      # continue recon's most recent session\n```\n\nIf you name a project that differs from the session's own (e.g. `anon-pi other --session <id>`), anon-pi trusts you and cds into `other`; pi then asks whether to fork the session into it (its normal guard for a cwd mismatch).\n\n### Running pi directly\n\nAny tokens **after a project** are forwarded to pi (`anon-pi recon --model qwen -p \"…\"`). For pi commands that need **no project**, any leading pi flag anon-pi does not own is forwarded to pi automatically, so you can just type it:\n\n```sh\nanon-pi -p \"hello world\"            # a headless one-shot, no project\nanon-pi --model qwen3-coder         # run pi with arbitrary flags, no project\nanon-pi --list-models              # what models does pi see in the jail? (also --models)\nanon-pi pi --export out.html --session <id>   # explicit `pi` passthrough (equivalent, clearer)\nanon-pi -m webveil pi --version    # pi's own version, on a machine\n```\n\nanon-pi consumes its OWN flags (`-m`/`--machine`, `--shell`, `--mount`, `-i`/`--image`) and hands **everything else** to pi (pi rejects a genuinely bogus flag itself), so you never need anon-pi to special-case each pi flag. The explicit `anon-pi pi <args…>` spelling still works and reads clearly when you want it. (`--version`/`-V` on its own prints *anon-pi's* version; use `anon-pi pi --version` for pi's.)\n\n### `--mount`: root at a host parent (the caveat)\n\n`--mount <parent>` re-roots this launch at a HOST parent folder instead of the projects root: the parent is mounted at `/work`, and a `<project>` positional then names a subfolder under it (`/work/<project>`).\n\nThe caveat: `<parent>` is a **host parent directory**, not a single project path. anon-pi mounts the parent and treats the positional as a name under it; it does not mount an arbitrary host folder as the project itself. Use `--mount` when you want a whole host tree available at `/work` (for example your real code checkout's parent), and pick the subfolder as the project.\n\n### Throwaway always; persist with a snapshot image\n\nEvery launch is **throwaway**: the container is removed the moment pi (or the shell) exits. Your machine home and project files persist regardless (they are host mounts); only the container's own scratch filesystem is discarded. There is no flag to change this: `--keep` and `--rm` are **gone** (see [Migrating](#migrating-from-040)).\n\nTo preserve system state you set up in a session (for example after you `apt install` something), **snapshot the still-running container into a named image** and pin a machine to it, giving you a real, named, immutable environment instead of a murky mutable pet container:\n\n```sh\nanon-pi --shell recon                 # a jailed shell; apt install / configure as you like\n# in another terminal, while that session is STILL running:\nanon-pi image snapshot toolbox        # freeze the running container -> anon-pi/toolbox:latest\nanon-pi machine create box --image anon-pi/toolbox:latest   # a machine pinned to it\nanon-pi -m box recon                  # later: launch on the snapshot-pinned machine\n```\n\nThe catch is timing: the snapshot commits a **running** container, so do it before you exit (once the session ends, the throwaway container is already gone). What you actually care about, your pi config and conversations, is in the machine home and survives every exit anyway.\n\nOne step does both: `anon-pi image snapshot toolbox --create-machine box` commits the image AND creates machine `box` from it, carrying the source machine's home + conversations over (the same prompts described under [Managing images](#managing-images)). `anon-pi image list` shows your snapshots with their provenance (source machine, source image, when), including orphaned snapshots (an overwritten `:latest`) by their ID.\n\n## Managing machines\n\n```\nanon-pi machine create <name> [--image <ref>]   create a machine, pin its image\nanon-pi machine list                            list machines and their images\nanon-pi machine set-image <name> <ref>          re-pin the image (WARNS; no reseed)\nanon-pi machine rm <name> [--yes]               delete the machine + its home\n```\n\nA machine's home is seeded on FIRST LAUNCH, not at create. `set-image` re-pins the image only and **warns**: it does not reseed or touch the home, so the home's extensions were built for the old image. `rm` confirms on a TTY, skips the prompt with `--yes`, and aborts non-interactively without it (it never deletes unprompted in a script). `create` with no `--image` and no TTY is an error (a machine needs an image to launch).\n\n`create --image <ref>` is **provenance-aware**: if `<ref>` was produced by `anon-pi image snapshot` (it carries an `anon-pi.source-machine` label) and that machine's home still exists, you are offered its home + conversations to carry over (opt-in; with no TTY nothing is copied). Otherwise it is a plain fresh create.\n\nIf you never create a machine explicitly, launches use the `default` machine (which `init` creates). Give a machine its own image + home + conversations by naming it with `-m`.\n\n## Managing images\n\n```\nanon-pi image snapshot <name> [-m <machine>] [--create-machine <m>|--update-machine <m>]\n                                 commit the RUNNING container into anon-pi/<name>:latest\nanon-pi image list               list anon-pi images with their provenance (read-only)\n```\n\n`image snapshot` captures the current filesystem of a **running** jailed container (for example after you `sudo apt install` some tools) into the clean tag `anon-pi/<name>:latest`, baking **provenance** as podman labels (source machine, source image, snapshot time). This is the way to keep container-level system changes (every launch is throwaway): freeze the running box into a named image, then pin a machine to it. The container is auto-detected from your running anon-pi containers (a picker when several are up); `-m <machine>` is an **optional filter**, not a required source. The container must still be running (do not exit the session; podman pauses it briefly during the commit). A same-name re-snapshot **overwrites** the `:latest` tag; the previous image becomes dangling but keeps its provenance, so `image list` still shows it by ID. To preserve a specific snapshot, snapshot it under a different name.\n\n`--create-machine <m>` also creates a **new** machine `<m>` pinned to the fresh snapshot, **copying the source machine's home** (your pi config, extensions, and dotfiles, which are correct for the committed image) **minus its conversations**. Conversations are handled separately: you are offered each one **grouped by project**, opt-in per project (default **skip**), choosing **copy** or **skip** for each (with no TTY, none are copied). Copy never touches the source machine; after copying, a single confirmed step (default No) can **delete** the copied groups from the source (the only way to \"move\" a conversation out). This is equivalent to `image snapshot` followed by a provenance-aware `machine create --image`.\n\n`--update-machine <m>` instead **re-pins an existing** machine `<m>` to the fresh snapshot (equivalent to `image snapshot` followed by `machine set-image`). The home is left untouched; when `<m>` is the snapshot's own source machine the home already matches the new image, so no warning is printed (unlike `set-image`). The two flags are mutually exclusive: `--create-machine` refuses an existing name, `--update-machine` refuses a missing one.\n\n`image list` reads the provenance labels straight off the images (**zero stored state**): it shows every `anon-pi/*` image plus any dangling image still carrying an `anon-pi.source-machine` label (an orphaned snapshot), by its ID.\n\n## Deleting data\n\nThe destructive verbs replace the old `--fresh`. Each confirms on a TTY, skips with `--yes`, and aborts non-interactively without it.\n\n- `anon-pi --delete-home [<machine>]` deletes ONE machine's home (its config, conversations, shell env), but **keeps its image pin** (relaunch to seed a fresh home) and **keeps all project files** (they live under the projects root, not in the home). The machine defaults to `config.defaultMachine` (else `default`) when omitted.\n- `anon-pi --delete-project <project>` deletes that project's files (its folder under the projects root) AND that project's per-machine session dir in every machine home. The machine homes are otherwise kept. The project name is required.\n\n## Environment\n\nEnvironment variables are **overrides**: env wins over `config.json`, which wins over a machine's `machine.json`, which wins over the built-in defaults.\n\n| Var | Required | Default | Meaning |\n| --- | --- | --- | --- |\n| `ANON_PI_PROXY` | yes | (none) | the socks5h proxy URL (Tor/wireproxy/`ssh -D`). No default: it is what anonymizes, so it is never guessed (fail-closed). |\n| `ANON_PI_LLM` | yes | (none) | RFC1918/link-local `IP[:port]` of the local model (the one direct hole). |\n| `ANON_PI_IMAGE` | fallback | (none) | container image with `pi` on `PATH`, used when a machine has no image pinned. |\n| `ANON_PI_HOME` | no | `~/.anon-pi` | the anon-pi workspace dir (holds `config.json`, `machines/`, `projects/`). NOT under `~/.config`. |\n| `ANON_PI_PROJECTS` | no | `<ANON_PI_HOME>/projects` | projects-root override (the host dir mounted at `/projects`). |\n\n`config.json` (written by `init`) holds the persistent `proxy`, `llm`, `defaultMachine`, and optional `projects` root; a machine's `machine.json` holds its pinned `image` and optional per-machine `projects` override. Env vars override all of these per-launch.\n\n## Forced egress: honesty by evidence\n\nanon-pi does not tell you \"you are anonymous\". It composes a launch that **forces** every bit of pi's TCP egress through your `socks5h://` proxy (fail-closed, DNS resolved proxy-side so hostnames never hit your host resolver), with exactly one direct hole to your local model. That is the invariant netcage enforces; anon-pi never strips or adds an egress flag.\n\nFor proof, it shows you **evidence**, never a label: `init` (and `netcage verify`) run a real request through the proxy and print the actual EXIT IP, so you can see it is not your host IP. It deliberately **never claims which exit provider** you are using (Tor, a VPN, an SSH tunnel): it can only observe the exit, not name the network behind it. A running `tor`/`wireproxy` process is surfaced as a WEAK local hint, clearly not a claim about the exit.\n\n## Hardened deployment: keep your work out of a host agent's casual reach\n\nYour anonymized work (machine homes, project files, and pi session transcripts under `~/.anon-pi/machines/*/home/.pi/agent/sessions/`) lives in YOUR login user's `$HOME`. A *different* coding agent running on the host as your normal login user can casually surface it: you ask that host agent \"find my previous conversation about X\" or \"where's that work folder\", and it `find`s / `grep`s your `$HOME` and stumbles onto the anonymized work. In an AI-driven workflow the transcript basically IS the work, so surfacing it re-associates \"anonymized\" activity with you.\n\nThe **hardened deployment** puts anon-pi's workspace under a dedicated Unix account, a **persona**, whose home is `chmod 700` and which your login user is *not* in. A casual `find`/`grep` as you then simply cannot read those files: plain Unix DAC does the work. You can have **many personas**, each a dedicated `anonpi-<name>` account (the default is the bare **`anonpi`**), each with its own mode-700 home *and its own fail-closed egress*, so two personas are unlinkable both on-host (separate DAC walls) AND on the network (separate exit IPs).\n\n> **Account namespace: `anonpi` / `anonpi-<name>`, disjoint from `anonctl`.** anon-pi's accounts live in their own namespace on purpose. The sibling tool `anonctl` (a different anonymization model) owns the generic `anon` account and the `anon-<name>` prefix, so anon-pi deliberately never uses those: the default is `anonpi` (no hyphen after `anon`, so it is not the bare `anon` and cannot parse as a persona of it), and named personas are `anonpi-<name>`, which can never equal `anon` or `anon-<x>`. A persona name that would re-enter anonctl's namespace (the bare `anon`, or anything starting with `anon-`) is rejected, so the two tools' account spaces stay disjoint on a box that runs both.\n\n> **Read this first: it is a DISCOVERABILITY + network-unlinkability boundary, NOT hard containment.** The on-host half defends only against an **unprivileged** host process/agent running as your login user (the accidental \"find my old work\" case). A host agent with **root**, or with **blanket passwordless sudo**, defeats that half entirely: root ignores file permissions. If your host agents already run with broad sudo, this buys you little on-host. anon-pi never claims otherwise, and neither should you.\n>\n> **Persona names are not secret from root.** A persona name unavoidably appears in `/etc/passwd`, `/etc/subuid`/`/etc/subgid`, `/etc/sudoers.d/anon-pi-<account>`, and the home path `~anonpi-<name>/`; root can always enumerate your personas. anon-pi keeps the name out of the **sudo/command audit log and your shell history** (see the provisioning notes below), which defends the **audit/history trail**, not root forensics. Do not over-trust the name-hiding.\n\n### The sudo password is the feature, not friction\n\nCrossing into a persona account requires a sudo **password** by default (the Tier-2 provisioning commands install a scoped sudoers rule with **no** `NOPASSWD`). That is deliberate: the password is what makes crossing the boundary a *conscious act you perform*, so an over-eager host agent's \"find my work\" never trips into it automatically. sudo caches the credential (~15 minutes), so day-to-day use is at most one prompt, not one per command. (There is an opt-in `--nopasswd` for a single-user trusted box only; it is OFF by default, and turning it on removes exactly this protection.)\n\n### How you turn it on: `init` asks\n\nHardening is driven entirely by `anon-pi init` (the same onboarding you already run). There is **no `harden` verb, no `--hardened` flag, and no separate `anonpi` wrapper command**: anon-pi is its own wrapper. `init` asks (this step has **no default** — you answer `y` or `n` explicitly, an empty answer re-asks rather than silently declining):\n\n```\nStep 4/5 - hardened deployment\n  Run under the dedicated `anonpi` account? (y/n, no default)\n```\n\nThis provisions the **default persona `anonpi`**. Answer `y` and it walks a two-tier \"actively help, never silent root\" flow:\n\n- **Tier 1 (rootless), done for you.** anon-pi points the workspace (`ANON_PI_HOME`) into the account's tree and `chmod 700`s it. No wrapper file is written, and `NETCAGE_GRAPHROOT` is never set (see the netcage note below).\n- **Tier 2 (needs root), COMMANDS YOU paste into a root shell.** The parts that need root (create the account with `useradd -m anonpi`, `loginctl enable-linger anonpi` so its `$XDG_RUNTIME_DIR` exists without a login, install netcage system-wide so the account can run it, and install the scoped sudoers rule) are **printed as copy-paste commands**. You become root **first** (`sudo -i` or `su -`, in another terminal) and paste them into that root shell. anon-pi **never sudo's for you**, and it writes **no script file to disk**: nothing on disk to leak the account name, nothing to save, and entering one root shell keeps the account name out of your sudo/command audit log (the single `sudo -i` carries no name; commands typed inside a root shell are not individually audited). `useradd -m` **auto-allocates** the account's `/etc/subuid`+`/etc/subgid` block for rootless podman, so there is no explicit range line to paste. The sudoers rule is validated with `visudo -cf` before install, so a syntax error can never lock you out.\n- **Resumable across the root step.** After printing the commands, `init` waits and tells you to run them, then press Enter to **re-check** (it re-probes the account with the preflight below). Once the account really exists and is fully provisioned, `init` continues and finishes. No separate command, no persisted \"half-done\" flag: the state is the OS, so re-running `init` after you paste the commands simply proceeds.\n\nThe preflight that gates the continue checks the account is set up correctly (subuid/subgid ranges present, linger on, `/dev/net/tun` accessible, the account's `$XDG_RUNTIME_DIR` present, and **netcage new enough** for its uid-scoped store, `>= 0.11.0`) and prints exactly what is missing with its fix, so a half-provisioned account fails loudly rather than cryptically.\n\n> **Hardening requires a SYSTEM-WIDE anon-pi (and netcage).** The dedicated `anonpi` account runs anon-pi as *itself* (`sudo -u anonpi -i anon-pi ...`), so anon-pi must be installed where that account can execute it: a system PATH like `/usr/local/bin` or `/usr/bin`, via a **system Node**. A per-user Node manager (Volta, nvm, asdf, fnm) installs anon-pi under *your* home (`~/.volta/...`), which the `anonpi` account cannot reach or run, so the preflight **refuses** hardening (as its own step, since installing system-wide is a login-user action, not a root command) and tells you how to fix it: install Node.js system-wide (your per-user manager keeps precedence on your login shell, so a system Node does not change your normal workflow), then `sudo npm install -g anon-pi` (it lands on a shared PATH the account can run), and remove the per-user anon-pi (e.g. `volta uninstall anon-pi`) so you never run two different versions. Then re-run `anon-pi init`. netcage is the same: its default `~/.local/bin` install is unreachable cross-account, so the Tier-2 commands include a system-wide netcage install (`curl -fsSL .../install.sh | PREFIX=/usr/local/bin sh`). This constraint is **hardening-only** — a non-hardened anon-pi via Volta/nvm is perfectly fine (it never crosses accounts).\n\n### Day to day: one command, at most one prompt\n\nOnce hardened, you keep using anon-pi exactly as before: `anon-pi recon`, `anon-pi --shell`, whatever. Those run as the **default persona `anonpi`**. To run as a different persona, add **`--as <name>`**: `anon-pi --as alice --shell` runs as `anonpi-alice`. On a hardened install anon-pi **detects that it must run as the selected persona and re-execs itself** as the very first thing it does, by spawning `sudo -u anonpi-<name> -i anon-pi \"$@\"` (the login `-i` form, so `$HOME`/`$XDG_RUNTIME_DIR`/env become the account's, which rootless podman needs; `anonpi-<name>` is `anonpi` for the default). The first call prompts for the sudo password; subsequent calls within sudo's cache window do not. A process already running *as* the selected persona does not re-exec (no loop). Where sudoers is not configured, the documented fallback is `su - anonpi-<name> -c 'anon-pi ...'`.\n\n`--as <name>` is a plain argument (it can appear in your shell history / `ps`; that is accepted, the name is already in `/etc/passwd` anyway). It is stripped from what netcage sees but survives into the re-exec. Naming a persona you have not created is an **error** (`no persona \\`<name>\\`; create it with \\`anon-pi persona add <name>\\``), never a silent create and never a silent fall-through to `anonpi`. `--version` stays local (no redirect).\n\nThis always-redirects: on a hardened install *every* login-user invocation goes to a persona (the default `anonpi`, or the one you `--as`). There is no \"run non-hardened on this box too\" mode. A box you want non-hardened is simply a box you did not harden. anon-pi implements no privilege-switching of its own: it only ever spawns `sudo`/`su`. It ships no setuid binary and sets no uid.\n\n### More personas: `anon-pi persona add <name>`\n\nThe default persona `anonpi` is created at `init`. To add another, run **`anon-pi persona add <name>`** (the account becomes `anonpi-<name>`; `persona add` with no name refers to the default `anonpi`). It runs the SAME two-tier flow as `init`'s hardening, per persona: it prints the Tier-2 **copy-paste root commands** (you become root first with `sudo -i` / `su -`, then paste `useradd -m anonpi-<name>` / `loginctl enable-linger` / the scoped sudoers install into that root shell; anon-pi never runs them, and writes no script file), and once the account exists it does Tier 1 for you: creates the persona's mode-700 `~anonpi-<name>/.anon-pi` and writes the persona's own `config.json` carrying its egress. The flow is resumable: while the account is missing it prints the commands and waits; run them, then continue and it writes the config. Re-running `persona add <name>` for an already-provisioned persona is an idempotent no-op.\n\nPersona **identity** (email, git config, credentials) is **your** job, configured inside the persona's home; anon-pi only gives you the isolated account + workspace + egress. What the persona is is whatever you make it inside its jail.\n\nTo tear a persona down, run **`anon-pi persona rm [<name>]`** (bare `rm` targets the default `anonpi`). Like `add`, it only **prints** the root commands (remove the scoped sudoers rule, `loginctl disable-linger`, then `userdel -r anonpi-<name>`) for you to paste into a root shell; anon-pi never runs them. Because `userdel -r` **deletes the account's home and all its anonymized transcripts** (irreversible), on a TTY it asks you to type the account name to confirm before printing, or pass `--yes` (without a TTY it refuses unless `--yes`). If the account does not exist it says so and the commands are harmless no-ops (useful to clean a leftover sudoers rule).\n\n### Per-persona egress: each persona has its own exit\n\nEach persona has its **own** socks5h proxy, chosen at `persona add` time and stored literally in that persona's own `config.json` (inside its mode-700 home, so your login user's workspace never holds any persona's proxy or name). No persona shares another's exit, and it is **fail-closed per persona**: a persona with no resolvable proxy refuses to launch, exactly like the global fail-closed today. There is no rotation knob. Two ways to give a persona an endpoint:\n\n- **Tor multi-persona (preferred).** If a running Tor is detected (or you pass `--tor [<host:port>]`), anon-pi hands Tor the persona's **account name as the SOCKS-isolation username**, composing `socks5h://anonpi-<name>:x@127.0.0.1:9050` (`x` is an ignored placeholder). Tor's `IsolateSOCKSAuth` (on by default) then builds a **separate circuit and exit per persona** automatically, at near-zero cost: each persona gets an independent, self-expiring circuit with zero setup. This is the recommended path precisely because Tor isolates the personas for you.\n- **Bring your own SOCKS.** Otherwise give a socks5h endpoint you run (`--proxy <socks5h-url>`, or answer the prompt): a distinct wireproxy / `ssh -D` port. anon-pi prints a **warning**: this endpoint must be **unique to this persona**, because two personas on one endpoint share an exit IP and become linkable (defeating the isolation that matters most), so prefer Tor. anon-pi keeps **no** list of used endpoints (it cannot read across personas' DAC walls), so BYO uniqueness is your responsibility.\n\nNetcage's forced-egress invariant is untouched: still exactly one socks5h endpoint forced per launch, fail-closed, never guessed. Per-persona egress only changes *which* endpoint each persona uses and *which* account anon-pi runs as; it never weakens the jail.\n\n### It composes with ephemeral runs\n\nThis stacks with the ephemeral-run idea (a launch that saves nothing) as belt-and-suspenders: ephemeral means there is **nothing to find**, and the hardened deployment means **what you do keep is out of casual reach**. The two are orthogonal and reinforce each other.\n\n### netcage runs as the persona too (no extra config)\n\nBecause anon-pi runs netcage *as* the persona account, netcage's uid-scoped container store lands in that account's own path automatically and does not collide with your login user's store, nor with another persona's (netcage's uid-scoped-store fix, netcage ADR-0017, in netcage `>= 0.11.0`). anon-pi does **not** set `NETCAGE_GRAPHROOT`; the uid-scoped default is enough. The forced-egress invariant is untouched: hardening only changes *which user* anon-pi runs as (and, per persona, *which* proxy), never the jail.\n\n### Not in v1: a standalone `harden` verb + migration\n\nv1 hardens **only through `init`**, and a fresh `init` has nothing to import, so there is no existing-workspace migration. RE-hardening an *already-populated* login-user workspace (a `anon-pi harden` verb that imports/migrates your current `~/.anon-pi` behind the boundary) is a **documented future follow-up**, tracked as the `harden-command-with-import` idea. Until then, hardening is a fresh-install decision made at `init` time.\n\n## Layout on disk\n\nEverything anon-pi keeps lives under `~/.anon-pi/` (override with `ANON_PI_HOME`):\n\n```\n~/.anon-pi/\n  config.json                proxy, llm, defaultMachine, (optional) projects root\n  models.json                the GLOBAL local-model seed (shared by every machine)\n  settings-seed.json         the GLOBAL default-model selection seed\n  machines/\n    default/\n      machine.json           pinned image, (optional) per-machine projects override\n      home/                  the persistent $HOME bind-mounted at /root\n        .pi/agent/           pi config, extensions, sessions (your conversations)\n      models.json            OPTIONAL per-machine override of the global seed\n  projects/                  the default global projects root (mounted at /projects)\n    recon/\n    ...\n```\n\n**The local-model seed is GLOBAL.** Because `config.json` holds one `llm` endpoint (the single `--allow` hole, shared by every machine), the `models.json` describing it lives once at the workspace root and seeds **every** machine's fresh home. `anon-pi init` writes it there (and updates any already-seeded machine homes in place, without touching conversations). A machine that needs a *different* local model can override it with its own `machines/<M>/models.json`.\n\nThe home is the durable, inspectable store. On a FRESH machine home, the image's staged defaults (`/opt/anon-pi-seed/agent`) and the resolved `models.json` seed (per-machine override if present, else the global one) are promoted in once and a marker is stamped; after that pi owns the home and your changes (added models, installed extensions) are never clobbered.\n\n## Providing a pi image\n\nanon-pi does not ship or default an image: a machine points at an image that has the `pi` CLI on its `PATH`. pi's maintainers do not publish an official prebuilt image, so the reputable path is to **build a small one from the upstream-documented recipe** (which installs the official [`@earendil-works/pi-coding-agent`](https://www.npmjs.com/package/@earendil-works/pi-coding-agent) npm package, no third-party image to trust).\n\n`anon-pi init` can build it for you: pick the shipped `Dockerfile.pi` and it builds the image and pins the result (fully-qualified as `localhost/anon-pi/pi:latest`).\n\n**A note on where the image must live.** Since netcage v0.7.0, `netcage run` uses its own private podman store (a username-free graphroot under `/var/tmp/netcage-storage`), not your default rootless store. So an image must be in *netcage's* store for a launch to find it — otherwise podman tries to pull the `localhost/…` ref and fails. `anon-pi init` handles this: it prefers `netcage build` when your netcage exposes it, and otherwise builds with `podman` and loads the result into netcage's store for you. If you build by hand, do the same:\n\n```sh\n# from wherever this package's Dockerfile.pi is (e.g. node_modules/anon-pi)\npodman build -t localhost/anon-pi/pi:latest -f Dockerfile.pi .\n# make netcage's store see it (netcage >= 0.7.1 ships `netcage load` for this):\npodman save localhost/anon-pi/pi:latest | podman --root /var/tmp/netcage-storage load\nanon-pi machine set-image default localhost/anon-pi/pi:latest\n```\n\n`netcage images` lists what is in netcage's store. The image only needs `pi` reachable on `PATH`. anon-pi bind-mounts the machine home over the container's `/root` and seeds a fresh home from the image's staging dir, so the image needs **no `ENTRYPOINT` and no config volume**.\n\nA community image also exists ([`gni/pi-coding-agent-container`](https://github.com/gni/pi-coding-agent-container)); it is third-party and unvetted, so review it yourself before trusting it with your (anonymized) credentials.\n\n### Extensions, skills, and their services go in the image\n\nanon-pi deliberately seeds **only your local model** (the `models.json` provider for the one `--allow` endpoint, plus the default-model selection) — never your extensions or skills, and never any other provider from your config. That is on purpose: your extension set is an identity fingerprint, extensions run code and can leak, and many need a runtime that a copied folder cannot carry (for example `pi-webveil` needs a running SearXNG). The right home for capabilities is the **image**, installed once, reviewably, into the STAGING dir so anon-pi promotes them into a fresh machine home:\n\n```dockerfile\nFROM node:24-bookworm-slim\nRUN apt-get update && apt-get install -y --no-install-recommends \\\n      bash ca-certificates git ripgrep && rm -rf /var/lib/apt/lists/*\nRUN npm install -g --ignore-scripts @earendil-works/pi-coding-agent\n\nENV ANON_PI_STAGE=/opt/anon-pi-seed/agent\nRUN mkdir -p \"$ANON_PI_STAGE\"\n# Trust the two cwd roots so pi never prompts on the mounted project:\nRUN printf '{\"/projects\": true, \"/work\": true}\\n' > \"$ANON_PI_STAGE/trust.json\"\n\n# Extensions are installed with `pi install` into the STAGING dir (recorded\n# there, promoted into the fresh home), NOT a global npm install:\n#   RUN PI_CODING_AGENT_DIR=\"$ANON_PI_STAGE\" pi install npm:pi-webveil\n# ...and an extension that needs a service (pi-webveil -> SearXNG) also installs\n# and configures that service in the image. Its egress is forced through the\n# socks proxy by netcage at runtime, so it must be happy with proxy-only,\n# DNS-through-proxy networking.\n\nWORKDIR /projects\n```\n\nInstall image defaults into the **staging dir** (`PI_CODING_AGENT_DIR=/opt/anon-pi-seed/agent pi install ...`), NOT `~/.pi/agent`: anon-pi mounts the persistent home over `/root` (so `~/.pi/agent` is the mount) and promotes the staging dir into it on a fresh launch. Anything you then `pi install` *inside* a session also persists (it is written to the mounted home). See the shipped `Dockerfile.pi` comments for the exact form.\n\nA worked example ships in this package: [`examples/Dockerfile.pi-webveil`](examples/Dockerfile.pi-webveil) builds pi + the `pi-webveil` extension (staged) + a local SearXNG. Note the anonymity subtlety it documents: SearXNG's own crawl is anonymized here **because netcage forces every process's egress through the proxy**, so webveil's plain `egress: direct` is correct in-jail (the usual \"local SearXNG leaks your IP\" caveat does not apply).\n\n## Trusting the project\n\npi treats a mounted project as untrusted until approved. The shipped Dockerfiles stage a `trust.json` trusting `/projects` and `/work` (in `/opt/anon-pi-seed/agent`), which is promoted into the machine home on first launch, so you are not prompted. You can also approve once inside a session; it persists in the home.\n\n## Migrating from 0.4.0\n\nanon-pi 0.4.0 was a **per-workdir** launcher: a bare positional was a host folder mounted at `/work`, session state lived per-workdir under `~/.config/anon-pi/state/<slug>/`, and you seeded it with `anon-pi import`. That model is gone. What changed:\n\n- **A bare positional is now a PROJECT, not a host path.** `anon-pi ./recon` no longer mounts host `./recon`; it means the project `recon` under the projects root (`/projects/recon`). To make a host folder available, use `--mount <host-parent>` (mounted at `/work`) and select the subfolder as the project.\n- **`anon-pi import` is GONE.** Onboarding is now `anon-pi init`, which (among other things) generates the local-model `models.json` for the default machine. There is no separate import step.\n- **`--fresh` is GONE.** To reset, use the explicit data verbs: `anon-pi --delete-home [<machine>]` (wipe a machine's home, keep its image pin + project files) and `anon-pi --delete-project <project>` (wipe a project's files + its per-machine sessions).\n- **`--ephemeral` / `ANON_PI_EPHEMERAL` are GONE.** The container is **throwaway** now; there is no separate ephemeral mode.\n- **`--keep` and `--rm` are GONE.** Every launch is throwaway (there is no flag to toggle it): passing either is an error. The exploratory \"install, quit, re-enter\" flow is served by snapshotting the running container into a named image (`anon-pi image snapshot <name>`) and pinning a machine to it (`anon-pi machine create <m> --image anon-pi/<name>:latest`), which is explicit and named instead of an inferred mutable pet container. Your pi config and conversations were never in the container anyway (they live in the machine home).\n- **`machine snapshot` is now `image snapshot`.** Snapshot moved off the `machine` noun onto the new `image` noun: `anon-pi image snapshot <name>` commits the running container into `anon-pi/<name>:latest` (with provenance labels), and `--create-machine <m>` also builds a machine from it. See [Managing images](#managing-images).\n- **The layout moved.** Everything now lives under `~/.anon-pi/` (`config.json` + `machines/` + `projects/`), **not** under `~/.config/anon-pi`. `ANON_PI_HOME` still overrides the root; the old `ANON_PI_CONFIG` / `ANON_PI_SOURCE_MODELS` variables are gone.\n- **Old state is NOT migrated.** anon-pi does not read or convert your old `~/.config/anon-pi/state/<slug>/` directories. Once you have moved to the new model you can delete the old tree:\n\n  ```sh\n  rm -rf ~/.config/anon-pi        # old 0.4.0 state; nothing new reads it\n  ```\n\nStart fresh with `anon-pi init`, then `anon-pi` (the menu) or `anon-pi <project>`.\n\n## Troubleshooting\n\n- **`netcage not found on PATH`** — anon-pi is a launcher for [netcage](https://github.com/wighawag/netcage); install netcage first (Linux only).\n- **`set ANON_PI_PROXY …` (fail-closed)** — no proxy is configured. Run `anon-pi init` to detect + verify one, or export `ANON_PI_PROXY=socks5h://<host:port>`. There is deliberately no default: the proxy is what anonymizes, so it is never guessed.\n- **A launch says the machine has no image** — pin one: `anon-pi machine set-image default <ref>`, or export `ANON_PI_IMAGE=<ref>`, or re-run `anon-pi init` and pick/build a `Dockerfile`. See [Providing a pi image](#providing-a-pi-image).\n- **A launch hangs on \"Trying to pull `localhost/…`\" (then a connection-refused pull error)** — the image is in your default podman store but not in netcage's private store (`/var/tmp/netcage-storage`), so podman treats the `localhost/…` name as a registry and tries to pull it. Load it into netcage's store: `podman save <ref> | podman --root /var/tmp/netcage-storage load` (check with `netcage images`). Re-running `anon-pi init` and rebuilding the image does this for you.\n- **`no TTY` on a bare `anon-pi`** — the menu and interactive pi need a terminal. In a script, name the project and forward args: `anon-pi <project> <pi-args…>` (that path needs no TTY).\n- **The exit IP looks like your home IP** — the proxy is not actually anonymizing. Re-run `anon-pi init`; its `netcage verify` step prints the real exit IP as proof. anon-pi never claims a provider, only shows you the exit.\n- **A destructive verb won't run in a script** — `machine rm` / `--delete-home` / `--delete-project` confirm on a TTY and abort non-interactively; pass `--yes` to proceed unattended.\n- **`--keep` / `--rm` say they are gone** — that is expected: every launch is throwaway now. To keep system changes you made in a session, `anon-pi image snapshot <name>` the **still-running** container into a named image, then pin a machine to it (`anon-pi machine create <m> --image anon-pi/<name>:latest`) and relaunch (`anon-pi -m <m>`). Your pi config + conversations persist regardless (they live in the machine home).\n\n## Platform\n\nanon-pi is **Linux-only**, because netcage's jail is built on Linux kernel primitives (network namespaces, nftables, `/dev/net/tun`, rootless Podman + pasta). There is no native macOS/Windows jail.\n\nOn macOS/Windows, Podman runs inside a Linux VM (`podman machine`), so netcage (and anon-pi) can run **inside that VM**. Two caveats matter for anon-pi:\n\n- **`--allow` to a LAN model is VM-boundary-sensitive.** \"Directly over the LAN\" means the *VM's* NIC, not your Mac/Windows host LAN, so a model at an RFC1918 address on the host network may not be directly reachable from inside the VM the way it is on bare Linux.\n- **Host-loopback proxy reachback** (`ssh -D`/Tor on the host's `127.0.0.1`) is the host loopback, not the VM's.\n\nTreat non-Linux as best-effort-via-VM, not supported.\n\n## License\n\n[AGPL-3.0-only](./LICENSE)\n","readmeFilename":"README.md"}