{"_id":"clamicro","_rev":"31-373f6e6877b27c676159342297677401","name":"clamicro","dist-tags":{"latest":"2.19.0"},"versions":{"1.0.0":{"name":"clamicro","version":"1.0.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@1.0.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"e5a01abfb024895b59c118d560b0c84fa305600f","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-1.0.0.tgz","fileCount":28,"integrity":"sha512-6KJ24Q7TXfG9UFMu0uxYYX0XqYgwCHrBJklk8vB+9dj0t7hUB7K+GoF+CHH8MsaSSwsTgL7EQLzpERPE2uOJ7Q==","signatures":[{"sig":"MEUCIAqkQ/WUdqTv48LIHSSW9J55XsFaRGJWJIdegDnSI6iQAiEAq3xqUEYTjqfrD1ZlIin54FgfwX01MMWWkvf9vYZtO9o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225987},"type":"module","engines":{"node":">=18"},"gitHead":"50816c06187627e1eeb6cbec090dd9e53b0cebb1","scripts":{"postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_1.0.0_1786004533776_0.6799186411627967","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"clamicro","version":"1.0.1","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@1.0.1","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"2bb3f868dafd3e9cda81a2a6007d83478969bb7a","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-1.0.1.tgz","fileCount":31,"integrity":"sha512-dwrGPmjC8drm4XeMko3Wlx6VnoWc4xuFzQEZBKBU2KZ2UqQSS6JYHXLmIwW/AxufdpnhAa73vdvoPyneG7tr7w==","signatures":[{"sig":"MEUCIQCdxMONvrSaKpCJ/laA3q32sPKd7NC1ZbeLSuzC14yDTQIgeFDFe5ZSACfZ5llQWlTljboHD1WH7oldJUGvVB5NVys=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252264},"type":"module","engines":{"node":">=18"},"gitHead":"52ecdd3d843a0217a1a7d5c2940e96d4b73d7839","scripts":{"postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_1.0.1_1786015068577_0.8089746148204833","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"clamicro","version":"1.0.2","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@1.0.2","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"181e872ba3b8e33307a4be24376ee3ff2a4593cf","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-1.0.2.tgz","fileCount":32,"integrity":"sha512-IGVnsj8QJKW/+Yi+EIoZd1z9vRPI40WV1AFqmDbD2xq7euG3+8YcgYJp2gfS0DZDVrdJijnm8EImP+bOSEYFQg==","signatures":[{"sig":"MEYCIQDEopfU3R7UPo/6mDaggCcz5pl2wz/dP8Ls9zfAckAyJQIhAK10L6K5b/sZe7fvRi0W2FTW5c/HVR2OlloSqiyCFaIm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":262445},"type":"module","engines":{"node":">=18"},"gitHead":"a988f7c9e5252c369b4ac7202d9178b3b255d40d","scripts":{"postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_1.0.2_1786065472693_0.7021204734990449","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"clamicro","version":"1.0.3","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@1.0.3","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"c8b41f7ee2f3858eff6219949539dfd5b683b66c","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-1.0.3.tgz","fileCount":32,"integrity":"sha512-/jJWPDHLlzA9JmQebd8sPiINjpt7Xx8U54wXvht0ZUSknY1qBd2DVDDem0gbXGF81fCIkdX1XcrW5qsvGV/H7Q==","signatures":[{"sig":"MEQCICvyEXfU1Kd++MBXGHnYfsKhtqg7FXTKgGjzu17Ii9xwAiA/xZzSB8PDlEdNtQIWftTkuLVjja3b8+mYWRBCAOvk8Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265678},"type":"module","engines":{"node":">=18"},"gitHead":"44c9b734575a35f1394533b3037e3c5f51c65dbd","scripts":{"postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_1.0.3_1786082893492_0.9840279514725563","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"clamicro","version":"2.0.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.0.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"e1fb64ed7c9dae6570b95c1d43265f6d6c9acc23","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.0.0.tgz","fileCount":41,"integrity":"sha512-MXTL7sRiovLU+iAOi0QWH9oQx9jiT5GDOaDW6o+06OF8IeTxBMReEYqlJ/LYI0+vnz/YupLGTj7G1u/JNtEOJg==","signatures":[{"sig":"MEYCIQDCgdSikvKduGVg2IPb1024U84AaW7e1JPsj211AJKqhAIhAIV6Cd+mKGvOVJld19s3zFN4dKjGkBbS3WfdfsmUp0IA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298206},"type":"module","engines":{"node":">=18"},"gitHead":"b4ad83580f26411fd2acc10eb8cafcee87f25d59","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.0.0_1786090277930_0.745670489048015","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"clamicro","version":"2.0.1","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.0.1","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"2ea757cf1ed29aef1e9e76da05d49e5d88833218","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.0.1.tgz","fileCount":42,"integrity":"sha512-5zbcVvzyg7jT8m+B3OBkoAm3xdwmzDkYKpt4VUN6b93D18hzasyJ84fsWUaJNGQZehB7InfQT8hVmzUPqAH08w==","signatures":[{"sig":"MEUCIBgvTeO1Y4brNkNEoOw5+W0ml5OBL6fMq2Obj+zvuWjLAiEAjF3vy550PlDSN6mtktPfU6KY8+EmB3SKytHcv5ZloYY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":307553},"type":"module","engines":{"node":">=18"},"gitHead":"7266e2e2f9ed5e7ae47cc5022e59843eb462ce11","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.0.1_1786111477684_0.317947193093322","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"clamicro","version":"2.3.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.3.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"c1b25d1a12318e97a76b98095dd709aa83341182","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.3.0.tgz","fileCount":47,"integrity":"sha512-Tg/njAwl4T70y9e/Dh3KAfvhJIH73FPXERZy4p1LQmBlOEicGvs967BN+xtXsYw7UFbLEYVlbMooHWi7hTcYjw==","signatures":[{"sig":"MEUCIQDCcAhCL5qY3XjB/ssmPw54nIbeCZpUOyCPveiEYKGB9QIgcyLRz8AI5vpE4X5c+tLJnbk0Un+813YIdliL3EG55B0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":365374},"type":"module","engines":{"node":">=18"},"gitHead":"2e0544f9a718519917a7031aa3ddd8f4c408951c","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.3.0_1786167713591_0.21814422634484965","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"clamicro","version":"2.4.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.4.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"eb4f6d2c7060b1a05571f671d25acea3e54baefb","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.4.0.tgz","fileCount":48,"integrity":"sha512-u/epr2LW5SVVReycntVqE6TPcZoIkbCVBd1W/FG8fH+4mzl4gD40TgqDIoC/4OtqkW4VFWFcTVMUZa87IBhT5g==","signatures":[{"sig":"MEQCIGA6GklWjOi4QewTdiKTFALUIBNvQjtgw9M8tViCaTw2AiBlwXiZXz+i7xQNwORy2yAq2QNKDo6pNi7EShRoHg6WQw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372036},"type":"module","engines":{"node":">=18"},"gitHead":"d3fc8aa3e4fb49929bae168389e0c614bcccb953","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.4.0_1786236740138_0.017332695243580387","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"clamicro","version":"2.5.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.5.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"a9d3331eb664e50ef7a5ee0971184ec0298d215e","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.5.0.tgz","fileCount":48,"integrity":"sha512-eqATbEyTDLBEQuMa33h8zLQhX1YvKf6h/UwAzr6Gc4BpmYNUHYUb9CFFyKTCo3Sj+5Bu/aT2cioRw6jKGWegUA==","signatures":[{"sig":"MEUCIQCPtpqyvvgN6pY/QBJu0IMihsCBYzgop1j/BTIqqQwTlgIgTxXEsdXlT5BKJZI1jXcDdyOYjZWZlmNdGjpwbWXuVAU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":388087},"type":"module","engines":{"node":">=18"},"gitHead":"e7a39f8b8cd0e410bce033dec031c599f61037a7","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.5.0_1786265552090_0.1376289836533715","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"clamicro","version":"2.6.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.6.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"4c873b875864259acecdee972b427f12101439f1","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.6.0.tgz","fileCount":48,"integrity":"sha512-Mczf5CW9JhAxc0dzhTfXd5SxAinJVRYUblpVsxIkMu8PRSspOC4vUgSD46dEdYET5BE0EteAvp80ThsKmb6e4Q==","signatures":[{"sig":"MEYCIQDeYfL/dttq/BtFzW9Ma8GgmE49zt9gJQjF0mbjtCLfgQIhAOj//uL8yw5kXZ/KOwRwK+Z2DcE7AfVa5dVqBbJFlnhr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":410266},"type":"module","engines":{"node":">=18"},"gitHead":"2f5c9799a8d5377ea7a9cced860d260a228eba34","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.6.0_1786326035915_0.7310209540360275","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"clamicro","version":"2.7.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.7.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"0961ddaf085fdda11d065496695b70f389a85d3f","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.7.0.tgz","fileCount":48,"integrity":"sha512-Q1ARrBlOPyLwFb/uVq0D5b4C/y6v9zW8Jm+a+EhOMGfsWAssfoJ6LhgtebauvMKApBpYEnxQoGXl4B/qIbiJJg==","signatures":[{"sig":"MEUCIQCAfoxkAN3jSzL3dXuuvmM2Wlt2lG21gAsuPXRR3gMREwIgavJXTZNJUPgMVGZQXebI+8zQzCiEwRO1hOXXAt8o8zI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":413956},"type":"module","engines":{"node":">=18"},"gitHead":"ee38afb55ba90d29b054269312bf8c325a691257","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.7.0_1786327453504_0.10408322931332958","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"clamicro","version":"2.8.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.8.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"4a905b2f930a49e8792249cf394689fb4b00442f","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.8.0.tgz","fileCount":48,"integrity":"sha512-gLVpdsTScHIK24PZ2+NhbCeE6sQFj3ywxJvsVX81g+F/4jaheSLnRo5ODTPXLcsaCHEXZ9qKMwRXbMyLy9Po1Q==","signatures":[{"sig":"MEYCIQDpoWY/Hnzf06R+OXAlvUX5vwX6VaCdHJ63Z3wtE+G5JAIhAPEAddZmt/2Jw1yMsD0CG6bvYR2o4igup10WYHYnpydy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":414929},"type":"module","engines":{"node":">=18"},"gitHead":"8eecd48706f52fc5b766f5bef315cd02db2f16ed","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.8.0_1786328120506_0.4596911732037521","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"clamicro","version":"2.9.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.9.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"6a7b57a02ba78583e9c65a980aad6704393aa98b","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.9.0.tgz","fileCount":48,"integrity":"sha512-5fsQnilPoKby7qzuPGM1/uxBkTxmO+gVk6fWjL0QiSRSV3RKBuFNz0U718hPDZdEXkBgEBYIDPBi+JUkOazSYQ==","signatures":[{"sig":"MEUCIBQZbl0ChgizxW0jbVl+AhtcXa+fcNUiVuzYcZMqKOW8AiEAh/fE2Z0DEKZkvJSSjZguGSmPMl5LOh/eCpAu6yg0j1I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417868},"type":"module","engines":{"node":">=18"},"gitHead":"d471817a4e482c993a66f6b557843b88f3c0af08","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.9.0_1786329115639_0.9042342311680542","host":"s3://npm-registry-packages-npm-production"}},"2.10.0":{"name":"clamicro","version":"2.10.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.10.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"38eab6b8ac61ea16b251153058f62bb431b1cb1d","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.10.0.tgz","fileCount":48,"integrity":"sha512-VZrDqVTcV3M8IbCRPLblzvQqKc9lp4A8uPeWdpwp/Q7cVNPiC+gXTSMl4ihQirWwmRWunHXKoG1Y63yUk4DNKw==","signatures":[{"sig":"MEUCIHb2+IqWQLkQ1NdHioQcqQA0y1C9H3nrduqbTWcwlHYdAiEAgwT5Znu3LwlSB0bTU2qe8NOo+Ve0P9TqH4IpR0n0CyU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":424617},"type":"module","engines":{"node":">=18"},"gitHead":"a7555dd96772aab5ba7366c87b25d2f2504dfc6e","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.10.0_1786330358450_0.2822145253302095","host":"s3://npm-registry-packages-npm-production"}},"2.11.0":{"name":"clamicro","version":"2.11.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.11.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"0a44f081ed051ec7e60d1701bb62778bc92f0a75","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.11.0.tgz","fileCount":48,"integrity":"sha512-BLWXOWisI+CIRAdZj3hs/CtD2I0MipkxLzTsM5yR6RCJpM8Xg4aVDG/q9WCZnIYB7yVzAOC1uoMt+mnwUiYF3A==","signatures":[{"sig":"MEYCIQCIOe5GKG3xnXRgofFLHaKgmjqd9MiEkXhWGoBr/L5UDwIhANdbTw4+NaPgaWN4YzX7GIMYPEwZE2wo0DZI0jDe7mZH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":425182},"type":"module","engines":{"node":">=18"},"gitHead":"408afce1faa2019ffce3c233e23d929b9c59947c","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.11.0_1786330966561_0.6933797767408896","host":"s3://npm-registry-packages-npm-production"}},"2.12.0":{"name":"clamicro","version":"2.12.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.12.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"2d5526e79ce9df0601a58b3444593f0d966eb890","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.12.0.tgz","fileCount":57,"integrity":"sha512-Zw6B1s167CMRjTx9+FjoJASMgaHIUiE2SVWgTO1ZFR72hUjzy2e/09UWFKjqJ4fDTEjMdRQlRqorEAtrNzRc2g==","signatures":[{"sig":"MEYCIQD109Oug+XInZXlNJaFEG8WtjbP5q8LK9R4O9mDGtgNKQIhANCi50SlfbjDzh7Ua7tj6mKGOgIpcVreeHYzE+s/eMHh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":560813},"type":"module","engines":{"node":">=18"},"gitHead":"8204df4be477a6a05fed2be97a7d77524b788c41","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.12.0_1786620979453_0.5979812341043105","host":"s3://npm-registry-packages-npm-production"}},"2.12.1":{"name":"clamicro","version":"2.12.1","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.12.1","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"48658377c7a5b86f1aed33775f1e75a68d1cd9fb","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.12.1.tgz","fileCount":58,"integrity":"sha512-xYTdNuR611+JQp+z4Q+zYU8QalLUey6j19GcMMrVjqsdfd8gcUqrTnkeiF/AW+fd3cHO6mu2AeyGURjQnfgZbw==","signatures":[{"sig":"MEUCIEO4ctesLfgVRdThMC3mU8iHprnlxDu2omg8AAVj50ZtAiEAxwItdUV4yYdG6GHxTNY31T3bLAp3oJIiPCa3S7Z11iA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":569988},"type":"module","engines":{"node":">=18"},"gitHead":"8292d8e43512c35939971f74ef04a14e59b85e09","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.12.1_1786669769672_0.8774070273822581","host":"s3://npm-registry-packages-npm-production"}},"2.13.0":{"name":"clamicro","version":"2.13.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.13.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"c791d98ab53de5dfd04fc4aa27f43183366cfbd6","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.13.0.tgz","fileCount":58,"integrity":"sha512-Wwrykgsrxst3YnQcmyt0ETznGyJzWvmVji+2rqKETC1zjA+bS0ojUttlLtcQzXyfqo7KO9aM3VJbcBfNsoQwzw==","signatures":[{"sig":"MEQCIGq8ThHuIWIcW21RRiZhjK2TWaNNMD7iqQvhLL0vNPOuAiB8IOYpg5/J8F8VY8hb3fJ08PQH+oiqTJ7+/Rcwd6Irug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":610672},"type":"module","engines":{"node":">=18"},"gitHead":"8292d8e43512c35939971f74ef04a14e59b85e09","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.13.0_1786712731759_0.5782285174148076","host":"s3://npm-registry-packages-npm-production"}},"2.14.0":{"name":"clamicro","version":"2.14.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.14.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"4f78d99fdd028d6c03f734ed4bcb135c9d636b2c","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.14.0.tgz","fileCount":64,"integrity":"sha512-vH/WUMNdg+tpZX3KlLTNU0trGo4Nf4rJCOxVXGCuOsfco2O8wQw/PubmKsqqLWYwkOMRJmdoDU03jzEbJ4ZLsA==","signatures":[{"sig":"MEYCIQDzpK7mYva0XeRhfHxq300JNtesEqERPwTrnuRdwl7rSgIhANwwlI5EM95spbDcuRED3c3Lbbx3FGC/EBONv/0ZV2uV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":772035},"type":"module","engines":{"node":">=18"},"gitHead":"1382a445653abab3efbd787dd2e818130fbe9bed","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.14.0_1786859629254_0.8262930430015369","host":"s3://npm-registry-packages-npm-production"}},"2.15.0":{"name":"clamicro","version":"2.15.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.15.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"7f98fe38ad1d1259fbafa6ec42ad12e887f03a14","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.15.0.tgz","fileCount":77,"integrity":"sha512-43g1eUEk42IqKHM4dKXuGazIhoDmyNuTIza7hCQYpbtuVBVTputmoiAz/jL5FsLJecZCu17atMSiNdJO01z+zw==","signatures":[{"sig":"MEUCIDuJ4KEDfe+rcpi5Gp5OIta0Cnq+7vo6Up/DHVuT9tyMAiEA/wRI+OQy+yaNzdLykCE93F4mweX0FFFbQ0pbJccYd40=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":843701},"type":"module","engines":{"node":">=18"},"gitHead":"db83288cc76176735114a79021efa497c623eaa1","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.15.0_1786860387614_0.309435326571998","host":"s3://npm-registry-packages-npm-production"}},"2.15.1":{"name":"clamicro","version":"2.15.1","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.15.1","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"f16c2ae0d4d0cc6d310ff66f75327c78aff79e75","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.15.1.tgz","fileCount":77,"integrity":"sha512-ppbnBr6YmxcsBZvGP6rtGLJM6v4Gq3jTQeDqeQ/dMVtnci2ibuL0oFkgHlrs359TKiKDRb0NM1wOVpn/xuscCw==","signatures":[{"sig":"MEQCIG+F5AX4/ktg4vrRwAdj3SDZz/Nz16PrHvqH6rhLkMpdAiBrHrkQV1RLGekUltI1iWLlbKeSIgOT1mKSxl2bSM1yrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":844154},"type":"module","engines":{"node":">=18"},"gitHead":"01e372bf48494ea390c4c4ddd9a0829b5aeaf61c","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.15.1_1786861013410_0.9724941095797222","host":"s3://npm-registry-packages-npm-production"}},"2.15.2":{"name":"clamicro","version":"2.15.2","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.15.2","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"1dea5e4ff25db7aa089cdec215ce8e8a18300b9c","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.15.2.tgz","fileCount":77,"integrity":"sha512-kgiI4O9TVHkPxzx69XpqEcx08PMVqdzKYd6qCwmY3A45wbf1UlijhNt7oqa0w14m3WAu5C3BuF9+9qwDaZLkOQ==","signatures":[{"sig":"MEYCIQDYyMNcgxVgBa5SgF0UH/8+JQTuPzUctPzblCu7ObVQQQIhAOmcRlpslCC92MdU99/JQZAy00ZjyaqvhxmPAL4z87gV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":844978},"type":"module","engines":{"node":">=18"},"gitHead":"54b1c2a08b20ce26c345471baa2b8c76adaa7dda","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.15.2_1786861520329_0.864843537811921","host":"s3://npm-registry-packages-npm-production"}},"2.16.0":{"name":"clamicro","version":"2.16.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.16.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"fbe2fa418ebb25404ceeaaa3d49fd506e4cc79a1","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.16.0.tgz","fileCount":77,"integrity":"sha512-jcXc/kQgpwJBxLyHXEVerQfFZvyf02+DV/8EweTKKzvsjpjbtjw5DVztCeSUz3SLVQjtI69oj5hqcJwZH/TUwQ==","signatures":[{"sig":"MEYCIQDzt1ynz5CfhGNoEAbUbZrczrLe6M5PRML4gxMISOTEtgIhAL1FVwe7LY6Mf4dB3fCsa9NnEsutUOwWHBnucEHvIzQI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":850597},"type":"module","engines":{"node":">=18"},"gitHead":"db617e40d2cd538265d676a26cfb74fca7f710da","scripts":{"test":"node --test 'test/**/*.test.mjs'","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.16.0_1786936646372_0.03426357429487048","host":"s3://npm-registry-packages-npm-production"}},"2.17.0":{"name":"clamicro","version":"2.17.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.17.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"418f7fc2f2a018c3e0acffc8f65999a0605a5f06","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.17.0.tgz","fileCount":86,"integrity":"sha512-19aroFKaVM30zNxjayjYGTHx90WFURIcEdPriHLRwigQ+FrAcZSVDtlXoplGcAqy+ZF3LMNAIRPGuvGQ7WZNJw==","signatures":[{"sig":"MEUCIQDv8soiQnfC77NpgDGD8jxyq3BU/NW67PFi9OqgyUhBlgIgBKuUA0cR4/aOykzbUWlvCoWsVRnHqWiOebumKizAjhg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1056420},"type":"module","engines":{"node":">=18"},"gitHead":"428df093063db8440e53b275806151823f828dc9","scripts":{"test":"node --test test/*.test.mjs","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"deprecated":"lifecycle 会在服务重启后误判无人使用而自行关闭，导致 hook 静默失效；请升到 2.17.1","repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.17.0_1787812223153_0.07773638346886758","host":"s3://npm-registry-packages-npm-production"}},"2.17.1":{"name":"clamicro","version":"2.17.1","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.17.1","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"19d07fcd477b71a5073f44b035789effa7ec8254","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.17.1.tgz","fileCount":86,"integrity":"sha512-8I8SfiJLIPeN2IlumwqxlDgXiKIcDggFhNwnBULPVqpvpLIClPZiQmhVG4VlGG5Ztu07SRfNe2AAUq4VrEcGYw==","signatures":[{"sig":"MEYCIQCSxPat0NDBQraGjRKe6su76jMG/P2EiznXnTr6JhctZwIhAPzCBgkHjkwa3WvDcjoXDp6Ep/2N2pYhE0EM4ClYsgrR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1063512},"type":"module","engines":{"node":">=18"},"gitHead":"6ded6d7ce3a0ce944fc639cba96014e993389de5","scripts":{"test":"node --test test/*.test.mjs","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.17.1_1787831826784_0.5372641785722383","host":"s3://npm-registry-packages-npm-production"}},"2.17.2":{"name":"clamicro","version":"2.17.2","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.17.2","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"9b804df1ca60f81f6fe19c7bd1c0eecac699d2da","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.17.2.tgz","fileCount":86,"integrity":"sha512-EhAa57JdNrnH6mfnn444Qpz/QNtjmgapACAPK3/k5WaChin8TXBQKQCZOk7JTL4k1jNsen7MTAYc/CTjJ08lUA==","signatures":[{"sig":"MEUCIQDVFv0fsnwegML7PaY/ZOC+yheq06RYUhirc86RW1rPkwIgP+kY264fvH6Qit9iLxYZKOEnkG9SEo0O1e9NG+y/qXs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1064566},"type":"module","engines":{"node":">=18"},"gitHead":"bbd8677be8691d16d6e656f52e20068c9b246ab2","scripts":{"test":"node --test test/*.test.mjs","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.17.2_1787840890926_0.9753125207872253","host":"s3://npm-registry-packages-npm-production"}},"2.17.3":{"name":"clamicro","version":"2.17.3","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.17.3","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"e65b5a960778f3af7845ce0dc8d7132809f48dab","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.17.3.tgz","fileCount":86,"integrity":"sha512-sWFMWPmRXPmmLtW6OMAtyYfxTW+svkSHrO/r/RH8e0cuxQMOUjllJ4gArWFavS07JOCMvGXll1IIhQupSPWh+A==","signatures":[{"sig":"MEYCIQCGVUnkQe9jKPiBqKAI9GiONBDVz4Kjw38j3CpHz8vOowIhAI5NivZNyfivFYUnYk2oZsy1f9O6kAsH1qbr/XGb/YPN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1087332},"type":"module","engines":{"node":">=18"},"gitHead":"31a58c7330530a6756d9805cd1e3c2391d725f76","scripts":{"test":"node --test test/*.test.mjs","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.17.3_1787880606246_0.6458608975463356","host":"s3://npm-registry-packages-npm-production"}},"2.17.4":{"name":"clamicro","version":"2.17.4","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.17.4","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"2ff4ebe5a1cd4c266437bab3741c1cea16e0427f","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.17.4.tgz","fileCount":86,"integrity":"sha512-iFioQU9PjZkNgbwZgG0y1D8NiwKQBHlHVmiH3V1o9m0dGfMzWATFqh62t6fF7nkYiKLPkf3gLsa/ELMlbMZ1tQ==","signatures":[{"sig":"MEUCIFiknj8MGk9DDdSVoMpIMTUR5O7gzaUJPPeAw5oOkxmJAiEA7K++vO8Xf6ZnWC5iWyrR/B8mTGXkGwtaADt9TIo0yxA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1104544},"type":"module","engines":{"node":">=18"},"gitHead":"5c9dbc93f96c6f217fc1a9d0b28f75eb50a3007c","scripts":{"test":"node --test test/*.test.mjs","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.17.4_1787909751949_0.028918601399456456","host":"s3://npm-registry-packages-npm-production"}},"2.18.0":{"name":"clamicro","version":"2.18.0","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"author":{"name":"laosji"},"license":"MIT","_id":"clamicro@2.18.0","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"homepage":"https://github.com/laosji/clamicro#readme","bugs":{"url":"https://github.com/laosji/clamicro/issues"},"bin":{"clamicro":"cli.mjs"},"dist":{"shasum":"35093e986ab1706d3dac2f7d4adef6c0f35c4425","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.18.0.tgz","fileCount":88,"integrity":"sha512-EkD3w8efL/SFaJkcRCpJt0is3/KxTi1iE1eFsfHdrQa5NA78l36yGn1nhlDFZ9cKzlNB7gBu+cNkqsZuNBNNTg==","signatures":[{"sig":"MEQCIE8redr2npnUEBB20QNW2AWwsqztKvJ/MUNnRCdeWC2CAiAUAjVUWIRCDVlUCZsLALZlmezcBCJXOix/BUACptUpJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1174060},"type":"module","engines":{"node":">=18"},"gitHead":"44a88e1254211da5b87096dbb6f7f54f67179e24","scripts":{"test":"node --test test/*.test.mjs","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"repository":{"url":"git+https://github.com/laosji/clamicro.git","type":"git"},"_npmVersion":"11.6.2","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/clamicro_2.18.0_1787975120440_0.2813176546670091","host":"s3://npm-registry-packages-npm-production"}},"2.19.0":{"name":"clamicro","version":"2.19.0","description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"license":"MIT","type":"module","engines":{"node":">=18"},"bin":{"clamicro":"cli.mjs"},"scripts":{"test":"node --test test/*.test.mjs","postinstall":"node -e \"console.log('\\n  Clamicro 已下载。执行 npx clamicro install 完成安装。\\n')\""},"repository":{"type":"git","url":"git+https://github.com/laosji/clamicro.git"},"bugs":{"url":"https://github.com/laosji/clamicro/issues"},"homepage":"https://github.com/laosji/clamicro#readme","author":{"name":"laosji"},"gitHead":"c7187b86783440760080e873f5b8ee05b4d72bef","_id":"clamicro@2.19.0","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-sHcXbATb+ZP2q5mGnTMcUZ8W0qBioJcDpS7pzfMgcvbtxDmgY331nadrlXjInuNIy1zwuxBDe+P+r5jvw6H77A==","shasum":"885a56f83b7177a4b1e70ee36df764cf4f0f57db","tarball":"https://registry.npmjs.org/clamicro/-/clamicro-2.19.0.tgz","fileCount":90,"unpackedSize":1211617,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICDHEsPoAD4OoeqaSVBrkrHCRRAqQpUxiFysBWLk2JkUAiBX+myb/yskWUDzAT0l83Q7ybzHqDgGhx75U8pUHS80HA=="}]},"_npmUser":{"name":"laosji","email":"pmduanchao@gmail.com"},"directories":{},"maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/clamicro_2.19.0_1788504534912_0.2041996350856341"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-06T08:22:13.741Z","modified":"2026-09-04T06:48:55.258Z","1.0.0":"2026-08-06T08:22:13.889Z","1.0.1":"2026-08-06T11:17:48.702Z","1.0.2":"2026-08-07T01:17:52.849Z","1.0.3":"2026-08-07T06:08:13.644Z","2.0.0":"2026-08-07T08:11:18.069Z","2.0.1":"2026-08-07T14:04:37.833Z","2.3.0":"2026-08-08T05:41:53.770Z","2.4.0":"2026-08-09T00:52:20.335Z","2.5.0":"2026-08-09T08:52:32.212Z","2.6.0":"2026-08-10T01:40:36.063Z","2.7.0":"2026-08-10T02:04:13.683Z","2.8.0":"2026-08-10T02:15:20.705Z","2.9.0":"2026-08-10T02:31:55.770Z","2.10.0":"2026-08-10T02:52:38.597Z","2.11.0":"2026-08-10T03:02:46.696Z","2.12.0":"2026-08-13T11:36:19.671Z","2.12.1":"2026-08-14T01:09:29.814Z","2.13.0":"2026-08-14T13:05:31.995Z","2.14.0":"2026-08-16T05:53:49.453Z","2.15.0":"2026-08-16T06:06:27.766Z","2.15.1":"2026-08-16T06:16:53.606Z","2.15.2":"2026-08-16T06:25:20.488Z","2.16.0":"2026-08-17T03:17:26.540Z","2.17.0":"2026-08-27T06:30:23.306Z","2.17.1":"2026-08-27T11:57:06.933Z","2.17.2":"2026-08-27T14:28:11.085Z","2.17.3":"2026-08-28T01:30:06.391Z","2.17.4":"2026-08-28T09:35:52.094Z","2.18.0":"2026-08-29T03:45:20.585Z","2.19.0":"2026-09-04T06:48:55.081Z"},"bugs":{"url":"https://github.com/laosji/clamicro/issues"},"author":{"name":"laosji"},"license":"MIT","homepage":"https://github.com/laosji/clamicro#readme","keywords":["claude-code","claude","hooks","approval","monitor","mobile"],"repository":{"type":"git","url":"git+https://github.com/laosji/clamicro.git"},"description":"Watch Claude Code from your phone and approve what it wants to run. LAN-direct, zero dependencies.","maintainers":[{"name":"laosji","email":"pmduanchao@gmail.com"}],"readme":"# Clamicro\n\n[English](./README.md)\n\n在手机上看 Claude Code 的状态、审批它要执行的操作。\n\n跑任务时不用一直盯着终端——需要授权时 Mac 会弹通知，在手机上打开页面，看清命令和一句摘要，滑动批准或拒绝，Claude Code 随即继续。\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/laosji/clamicro/main/docs/images/notch.png\" width=\"620\" alt=\"Mac 刘海位置的通知胶囊：绿色对勾徽章、项目名、结果行\">\n</p>\n\n| 运行中 | 有事等你 | 做决定 |\n|:--:|:--:|:--:|\n| <img src=\"https://raw.githubusercontent.com/laosji/clamicro/main/docs/images/home-running.png\" width=\"230\" alt=\"运行中的首页：Claude Code、Codex、DeepSeek Harness 各占一组，每组下面是正在跑的会话和最近几次工具调用\"> | <img src=\"https://raw.githubusercontent.com/laosji/clamicro/main/docs/images/home-pending.png\" width=\"230\" alt=\"有待审批时的首页：一条高风险的 git push --force 顶在最上面，倒数着三分钟，下面是各后端的会话\"> | <img src=\"https://raw.githubusercontent.com/laosji/clamicro/main/docs/images/approval-detail.png\" width=\"230\" alt=\"审批详情：风险等级、影响面、命令原文，决策条钉在底部\"> |\n\n*截图是真实界面，不是效果图。刘海那张是 Mac 上实拍的屏幕截图。*\n\n**先说清楚默认行为，免得你以为它在拦一切：**\n\n| | 等多久 | 到点怎么办 | 会不会提醒你 |\n|---|---|---|---|\n| 普通操作 | 10 秒 | **自动通过** | 会 |\n| 高风险（`rm -rf`、force push、动 `~/.ssh`） | 3 分钟 | **自动拒绝** | 会 |\n\n也就是说：**日常操作它是「告诉你」，高危操作它才是「拦住你」。** 两档的等待时长和到点行为都能在设置页改——普通操作的 10 秒改成 0 就是每条都等你；高风险的 3 分钟最长可设到 570 秒（再长就会撞上 hook 的系统超时，审批反而失效）。\n\n**零依赖**：只需要 Node ≥ 18 和 curl（macOS 自带）。运行时不含任何 `node_modules`。\n\n> 仅支持 macOS + iPhone。服务用到 macOS 专有能力（`scutil`、`osascript`、Bonjour），界面是按 iOS Safari 做的。\n\n---\n\n## 安装\n\n```bash\nnpx clamicro install\n```\n\n三步走完：\n\n1. **终端里**：检查环境 → 展示将要对 `~/.claude/settings.json` 做的改动 → 你确认 → 自动备份并写入 → 确认信任当前网络 → 启动服务 → 打印**一个网址，外加这个网址的二维码**（装了 `qrencode` 的话）。那张码里不含任何凭证，理由见下\n2. **手机打开那个网址**（同一 Wi-Fi）：进到配对页，点「在 Mac 上显示二维码」。**码只出现在 Mac 屏幕上**，用手机相机扫它。\n3. **回到 Mac 确认**：会弹出一个框问你要不要放这台设备进来，并显示这个请求**从哪来**。不按「允许」就不会发出任何凭证。\n\n配对完走一遍内置演示：它会造一条假审批，让你在还没有任何真实风险的时候先滑一次。走完这遍就算装好了。\n\n> **为什么终端里不放凭证？** 终端恰恰是东西**会被留下来**的地方——回滚缓冲、录屏、投屏、旁边那位的手机镜头。更早的版本在这里印的是永久主令牌；后来那版印的是 60 秒的一次性配对券，安全没问题，但**通常在你掏出手机之前就过期了**。\n>\n> 现在印的是那个不带凭证的局域网网址——正因为它什么都不带，所以顺手把**这个网址的二维码**也画出来，省得你在手机上手输 IP 和端口。回滚缓冲、录屏、旁人的镜头能从那张码里拿到的东西，和从它下面那行明文完全一样。凭证是你在手机上点了按钮之后才生成的，而且只出现在 Mac 屏幕上。\n\n装完即可用：需要审批时 Mac 会弹通知并响一声，终端状态栏显示 `⏳ N 条待审批`，手机网页随时能看和批。\n\n**没有远程推送**：提醒只有 Mac 本地通知这一条，完全不联网。离开电脑后不会有东西叫你——高风险操作会等到超时被自动拒绝。详见下方「近场只用 Wi-Fi」。\n\n> 安装程序**只追加不替换**。你已有的 hook 配置会完整保留，`statusLine` 若已被别的工具占用则不覆盖、只提示。改动前自动备份。\n\n卸载：\n\n```bash\nnpx clamicro uninstall\n```\n\n只摘掉自己加的东西，实测与安装前的配置**逐字节一致**。配置和历史保留在 `~/.claude/clamicro/`，可手动删除。\n\n### 运行时装在哪\n\nnpm 包只是**安装器**。运行时文件会被复制到 `~/.claude/clamicro/app/`，hooks 指向那里。\n\n这不是多此一举：hooks 里写的是绝对路径，而 `npx` 每次跑在会变的缓存目录、全局安装路径又随 node 版本 / nvm / homebrew 变化。指向 npm 包意味着某天路径失效，**所有 hook 会静默失败**——你不会看到任何报错，只是再也收不到通知。实测删掉 `node_modules` 后服务与 hook 照常工作。\n\n升级就是重跑一次 `npx clamicro install`。\n\n---\n\n## 它做了什么\n\n| 你在手机上看到 | 来自 |\n|---|---|\n| 会话状态、子状态（Thinking/Searching/Editing） | hooks 事件流 |\n| 5 小时 / 7 天用量、上下文占用、本次花费 | `statusLine` |\n| 待审批操作 + 一句人话摘要 + 影响面标签 | `PermissionRequest` |\n| 任务完成 / 出错通知 | `Stop` / `StopFailure` |\n| 事件时间线（每个会话的完整流水） | 全部 hooks |\n| 暂停 / 恢复 / 取消本轮 | `PreToolUse` 拦截点 |\n| 额度接近上限预警 | `statusLine` |\n| 这个会话用过哪些 skill | hooks 里的 `Skill` 工具调用 |\n| 装了多少个 skill —— 你自己的 / 已启用插件带的 | 读本机 `~/.claude` |\n\n> 最后一行是**唯一**不来自事件流的：它读盘。所以拆成两个数，而且每一档都能说\n> 「数不出来」而不是报 `0` —— 「已安装」根本不是一个数（商店目录里躺着的不算装了）。\n\n> 这张表说的是 **Claude Code**。接了别的后端时，能做什么由那个后端的能力决定——\n> 见下面「不止 Claude Code」。\n\n---\n\n## 不止 Claude Code\n\n2.14.0 起，同一块看板可以同时盯着多个后端。目前支持 Claude Code、\n[DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)（DSH），\n以及 [Codex](https://developers.openai.com/codex/cli)（ChatGPT 那个 CLI，**目前只做状态镜像**）。\n\n首页**按模型分区**：每个模型一个标题，下面是它自己的状态、履历和用量。\n顺序按「谁先连上」固定，不会因为谁刚有动静就换位置。\n\n**待审批不分区**，永远在最上面、跨后端一起显示——它有倒计时，被分进某个\n区块意味着你得先找到那个区块才看得见，而漏看一条等于一次静默的自动决策。\n\n### 不同后端能做的事不一样\n\n|  | Claude Code | DeepSeek Harness | Codex |\n|---|:--:|:--:|:--:|\n| 状态镜像 | ✓ | ✓ | ✓ |\n| 手机审批 | ✓ | ✓ | —（口子都在，但**服务端确实关着**，见下） |\n| 暂停 / 恢复 | ✓ | — | —（同上） |\n| 取消本轮 | ✓ | —（协议支持，尚未接） | —（同上） |\n| 从手机发消息 | ✓ | —（协议支持，尚未接） | —（同上） |\n| 用量 | 5h / 7d 滚动窗口 | 累计 token | 拿不到 |\n\n界面**按能力渲染**：某个后端不支持的操作，入口直接不给。留一个点了没反应的\n按钮比没有按钮更糟——你会以为暂停成功了，然后走开。\n\n**服务端也按这张表拦。** 只靠界面不够：手机上缓存着升级前的页面时，那份页面\n不知道新后端的能力，会把入口照常画出来。于是暂停、取消、发消息这三个端点，\n以及审批的拦截，都会先查一遍这张表——不支持就明确拒绝，而不是收下之后\n什么也不做。Codex 的「手机审批」写着 `—`，意思就是那个端点会直接回\n「无意见」、不建审批记录，让 Codex 落回它自己的权限流程。\n\nDSH 的用量只报 token、不折算金额：DSH 自己不算钱，折算需要一张按模型分档的\n价目表，而它会在你不知情时过期，然后手机上安静地显示一个错的金额。\n\n### 接 DSH\n\n```bash\nnpx clamicro connect dsh\n```\n\n会装上桥接插件和那只像素猫（点一下直接打开手机看板；没配对过的话那一页就是二维码入口）。\n\n**`install` 只探测，不会自己接**，它只把这条命令印出来。因为它写的是**别人家的配置**\n（`~/.dsh/profiles`），这一问必须问在你答得回去的地方——而 `install` 走到那一步时\n已经把你打发去掏手机了，它的 stdin 也已经关掉。接过之后重跑 `install` 会静默重接一遍，\n让插件文件跟上新版本：那一步没有引入任何新的改动范围。卸载时会一并摘除。\n手动接法和三条硬约束见 [`plugins/`](./plugins/)。\n\n### 接 Codex\n\n```bash\nnpx clamicro connect codex\n```\n\n往 `~/.codex/config.toml` 里追加一段带哨兵注释的 hooks，卸载时按哨兵摘干净，\n块外的字节一个不动。和 DSH 同一条规矩：`install` 只告诉你有这条命令。\n\n**装完还差一步**：打开一次 Codex，同意它问的「是否信任这份 hooks 配置」。\n没点之前 Codex 会把 hooks **静默跳过**——不报错、不提示，clamicro 一条事件\n都收不到，而所有地方都显示已安装。`npx clamicro status` 会把这个状态单独报出来。\n\nCodex 现在只做状态镜像：审批的口子（PermissionRequest）和回包形状都已经接好，\n但「拒绝」这一路还没在真机上跑通过，所以按能力矩阵的规矩当作没有。\n猜错的代价不是按钮没反应，是手机上写着「已拒绝」而命令照样跑完。\n验收方法和打开开关的位置见 [`docs/codex-bridge.zh-CN.md`](./docs/codex-bridge.zh-CN.md)。\n\n### 手势\n\n审批卡片左滑拒绝、右滑批准，详情页和首页列表都支持。批准有 3 秒撤销窗口。\n高风险操作（`rm -rf`、`git push --force`、密钥文件、越界写入）在详情页需要划得更远，\n在列表里则完全不能滑动批准——列表是快速分诊的地方，真要放行危险操作得点进去看清楚。\n\n### 暂停的真实语义\n\nClaude Code 没有「运行时暂停」原语，没法在任意时刻冻结它。「暂停」实际是\n**在下一个工具调用前把它挂住**，当前这一步仍会跑完。UI 上有明确提示，\n免得你以为点了没反应。取消同理，也是在下一个拦截点返回 `{continue:false}`。\n\n审批链路：\n\n```\nClaude Code 要执行需授权的操作\n  → PermissionRequest hook（HTTP，timeout 600）\n  → 服务建审批记录，Mac 弹通知，然后阻塞住\n  → 你在手机上批准 / 拒绝\n  → hook 返回 decision → Claude Code 继续或被拒\n```\n\n---\n\n## 安全\n\n这是一个把 Claude Code 的执行权限交到手机上的工具，值得把边界写清楚。\n\n### 网络信任闸门\n\n服务只在**你显式信任过的网络**里暴露到局域网。换到陌生网络（咖啡厅、机场、酒店）时自动只绑回环，手机连不上，同时 Mac 弹通知让你确认。\n\n```bash\nnpx clamicro networks   # 看当前网络和已信任列表\nnpx clamicro trust      # 信任当前网络\nnpx clamicro untrust    # 撤销：不带参数撤当前网络，也可 untrust <id前缀> / untrust all\n```\n\n信任是**可撤销**的。误信任一个网络（比如在咖啡厅手滑点了「是」）不该是不可逆的——那个网络会永久留在列表里，下次再连上就自动暴露。\n\n网络指纹用**网关 IP + 网关 MAC + 网段 + SSID + DHCP 服务器 + 搜索域 + DNS 列表**。\n\n前三项不够：SSID 在新版 macOS 需要定位权限、走有线时根本没有；而 `00:00:5e:00:01:xx` 是 VRRP 虚拟 MAC，企业网里并不唯一。实测过一种会碰撞的组合——两个不同公司都用 `192.168.1.0/24`、网关都是 `192.168.1.1`、网关 MAC 都是 VRRP、又都拿不到 SSID，四个字段完全一样，**于是 A 公司信任过之后 B 公司的网络被当成已信任**。后面那三个信号来自 DHCP，不需要任何权限，在不同组织之间几乎不会全部相同。\n\n**但七项不一定真的有七项。** 全隧道 VPN 接管默认路由时，`route -n get default` 给出的是点对点的 `utun` 接口、**没有网关那一行**——于是网关、MAC、SSID 和三个 DHCP 信号一起消失，指纹塌成只剩网段，也就是「任何一个发 `192.168.0.x` 的网络」。真机上复现过。缺掉的信号造不出来，所以改成**说出来**：安装时的确认、`trust`、`networks` 和启动日志，在指纹没有任何可辨识特征时都会警一句。想让它认得准，信任网络之前先断开 VPN——那样才拿得到真实的网关和 MAC。\n\n### 已实现的防护\n\n| 防护 | 挡住什么 |\n|---|---|\n| **Host 头白名单** | DNS rebinding。恶意站点把域名重绑到你的局域网 IP 后浏览器视为同源，CORS 完全失效，能读看板、命令原文并批准操作——**且攻击者不需要在你的 Wi-Fi 上** |\n| **hooks / statusLine 仅回环** | 同网段的人伪造 hook 事件：刷审批通知、注入假时间线、伪造额度 |\n| **`/api/pair` 要求自定义头** | CSRF。跨站「简单请求」浏览器会照发，副作用已发生——等于你访问的任何网站都能让这台 Mac 弹二维码 |\n| **hooks / statusLine / pair-new 只认本机** | 同网段的人伪造 hook 事件：刷审批通知、往时间线注入假记录、伪造额度读数——更要命的是给自己造一张配对券。「本机」是三件事同时成立：回环来源 **且** 回环 Host **且** 没有代理转发头。只看来源地址不够：开着 Cloudflare 隧道时，公网流量正是从 `127.0.0.1` 进来的 |\n| **配对要在 Mac 上确认** | 只是「看到」二维码的人——屏幕共享、投屏、旁边那位的镜头、拿到隧道 URL 的人——拿到设备令牌。看见码不再够用，得有人坐在 Mac 前面按一下。那个对话框出任何问题（超时、拿不到图形会话、崩了）一律算**拒绝** |\n| **终端里不出现任何形似凭证的东西** | 安装器印的是纯网址，不带令牌也不会过期，所以回滚缓冲、录屏、肩窥都拿不到东西。凭证在你点了手机上那个按钮之后才生成，且只在 Mac 屏幕上渲染 |\n| **CSP `frame-ancestors 'none'`** | 点击劫持：恶意页面把审批页嵌进 iframe 诱导你滑动 |\n| **常数时间比较** | token 与审批 key 的时间侧信道 |\n| **SameSite=Lax + HttpOnly** | CSRF；同时保证从别的 App 点链接进来仍是登录态（Strict 会导致每次都要重新扫码） |\n| **单条审批专属 key** | 拿到一条深链只能决定那一条；审批结束后 2 分钟失效（留这一小段是因为你点完之后结果页还要用它拉一次） |\n\n### 说人话：配过对的手机等于你 Mac 的钥匙\n\n**设备令牌 = 批准任意操作的权限**，包括 `rm -rf`、`sudo`、读你的 `~/.ssh/id_rsa`。请像对待钥匙一样对待那台手机：\n\n- 二维码本身已经不足以配对：它一次性、60 秒过期，而且还要在 Mac 上按「允许」。\n  拍到码的人没有你按那一下也配不上。话虽如此，还是别把它留在屏幕上\n- 怀疑泄露了就立刻换发：`npx clamicro rotate-token`。所有设备上的登录当场失效，\n  对运行中的服务**即刻生效，不用重启**；之后手机需要重新扫码配对。\n  只想吊销某一台就用 `npx clamicro forget <id>`，其他设备不受影响\n- 登录 cookie 30 天过期，到期重新扫一次\n\n### 剩下的风险：HTTP 明文\n\n局域网内是明文。**同网络的被动嗅探者能拿到你的 token**，进而获得完整控制权，包括批准 `rm -rf`。命令原文同样是明文。\n\n这在保持「扫码即用」的前提下无解——自签证书会让 Safari 报警并破坏整个体验。网络信任闸门把它从「你得记得别在咖啡厅用」变成了「陌生网络默认就用不了」，但如果你**确实需要在不可信网络上用**：\n\n**装 Tailscale。** WireGuard 端到端加密，没有任何第三方看到明文，且不限于同一 Wi-Fi。服务会自动识别 `100.64/10` 地址并绑上去，**且不受网络信任闸门限制**——覆盖网自带加密，不关心底下是什么物理网络。\n\n另一条路是内网穿透（`clamicro tunnel on`），但穿透服务终结 TLS，技术上看得到命令原文——所以它是应急选项，不是默认。\n\n---\n\n## 近场只用 Wi-Fi\n\n控制面**不出局域网**。命令原文、审批指令、时间线、额度全部走 `http://<局域网IP>:8765` 直连。\n\n按\"人在哪儿\"分两层，两层都不出局域网：\n\n| 场景 | 提醒方式 | 联网范围 |\n|---|---|---|\n| **① 人在电脑边** | macOS 本地通知 + 提示音 | **完全不联网** |\n| **② 离开电脑** | **没有提醒** | — |\n\n**② 为什么没有提醒**：锁屏可达的通知只能走 APNs，那必然经过第三方服务器。\n\n先后试过两条并都删掉了：ntfy 双 topic 中转（能在锁屏通知里直接点按钮批准，等于把**控制面**交给第三方）、Bark（只发一句「有个审批」，控制面留在局域网）。后者已经克制到极限，但它换来的仍然只是「离开电脑时能被叫一下」——而这个工具的前提本来就是你人在附近。为了这个把「有操作在等你审批」这个事实持续告诉一台外部服务器，不划算。\n\n代价要说清楚：**离开电脑后没有任何东西会叫你**，高风险操作会等到超时（默认 3 分钟）被自动拒绝，那一轮任务失败。这是有意的默认——人不在就不该放行 `rm -rf`。想主动看的话，手机浏览器随时能打开看板。\n\n---\n\n## 设计要点\n\n**hook 必须先回包再提醒。** `async: true` 只对 `command` 类型有效，HTTP hook 一律阻塞等响应。所以所有端点立即返回 `{}`，推送在响应之后异步发出。\n\n**自超时上限 570 秒。** 不能走到系统 600s 超时——那会被当成「非阻塞错误」放行到正常权限流程，人不在电脑边时终端会空挂着等一个没人看的弹框。\n\n**四种终态**：`allowed` / `denied` / `expired`（超时自动拒绝）/ `abandoned`（终端自己批了，或会话被 Ctrl-C）。同一条审批被多路重复决策时，第一个写入的赢，后到的返回当前真实状态而不报错。\n\n**Stop 的提醒阈值。** `Stop` 在每一轮回复结束时都触发，包括两秒就结束的对话。默认只有 turn ≥ 30s 才推送。`turn_started_at` 未知时（服务中途启动）按「要推」处理——宁可多推一次，也别漏掉一次任务完成。\n\n**状态栏由服务端渲染。** `bin/statusline.sh` 不解析 JSON，直接把载荷 POST 给服务，服务返回渲染好的文本。因此不依赖 `jq`，也不用付 Node 的 ~115ms 启动开销（实测 15ms）。有待审批时状态栏会显示 `⏳ N 条待审批`。\n\n**子状态是推导的。** Claude Code 没有 Thinking/Searching/Editing 事件，全部从 `PreToolUse.tool_name` 推导；`PostToolUse` 到下一个 `PreToolUse` 之间视为 Thinking。\n\n**服务挂了不拖累 Claude Code。** 回环端口拒绝连接是即时的，hook 拿到非阻塞错误后照常继续，只是收不到通知。而且 `SessionStart` 是个 command hook，会先把服务拉起来再转发事件——打开 Claude Code 就等于服务可用。\n\n**地址用 Bonjour 主机名而不是 IP。** macOS 已经在广播 `<LocalHostName>.local`，用它做基址，DHCP 换 IP 后旧链接依然有效，不必重新扫码。极少数路由器屏蔽组播，那种情况把 `hostMode` 改成 `\"ip\"`。\n\n**登录 cookie 必须是 `SameSite=Lax` 不能是 `Strict`。** 从别的 App 点链接进 Safari（备忘录里存的地址、Mac 上弹的二维码）属于跨站导航，Strict 的 cookie 不会被带上，表现是每次都像没登录过。\n\n**额度是账号级的，不按会话存。** 按会话存会出现旧会话的陈旧数字把最新数字顶掉。只认最新一次观测，并在界面上标出更新时间和来源会话。\n\n**审批与事件落盘。** `~/.claude/clamicro/history.json`，防抖写入 + 临时文件原子替换。重启时仍挂起的审批一律转 `abandoned`——那些 hook 的连接早断了，再显示成「待审批」是在骗人。\n\n**hooks 是热加载的，statusLine 不是。** 改完 hooks 当前会话立刻生效；statusLine 要新开会话。\n\n**吊销是即刻的，不用重启。** `forget` / `rotate-token` / `untrust` 都是独立的 CLI 进程，只改磁盘；而服务只在启动时读过一次配置。所以 2.14.0 之前这三条命令**重启前全部无效**——`forget` 却打印着「这些设备上的登录立即失效」。现在服务监听配置文件热加载 token / 设备簿 / 信任网络，那句话才是真的。\n\n**配置和 settings.json 都是原子写。** 先写同目录临时文件再 rename。非原子写有两条会踩到的路径：热加载正好读到写了一半的 JSON；以及进程被打断时文件永久半截——`config.json` 半截等于令牌和已配对设备全没，`settings.json` 半截等于 Claude Code 起不来。权限也在 rename 之前设好，不留「文件已就位但还是 0644」的窗口。\n\n**杀进程之前先确认身份。** `stop` 和安装流程都会 kill 掉端口上的监听者，而 8765 不是保留端口。判据是 `/healthz` 回的 `service: 'clamicro'`（只对回环返回，局域网上的扫描者拿不到），不是匹配命令行——命令行的形状不稳定。不是我们的进程就拒绝并提示换端口，绝不硬抢。\n\n**风险判定不看工具名。** 判据是「参数里有没有 `command`」。原来写的是 `toolName === 'Bash'`，而 DSH 的工具名是小写 `bash`——精确匹配会让整套高危规则**一条都不跑**，`rm -rf /` 判普通风险、10 秒自动通过。名字差一个字母，安全核心静默失效且不报任何错。\n\n---\n\n## 常用命令\n\n```bash\nnpx clamicro install      # 安装 / 升级\nnpx clamicro uninstall    # 卸载\nnpx clamicro qr           # 打印登录二维码\nnpx clamicro status       # 服务、网络、版本\nnpx clamicro doctor       # 装不上 / 连不上时跑它，输出一段脱敏的、可直接贴进 issue 的现场\nnpx clamicro connect dsh  # 接上另一个后端（connect dsh | connect codex）\nnpx clamicro trust        # 信任当前网络\nnpx clamicro untrust      # 撤销信任（untrust <id前缀> | untrust all）\nnpx clamicro networks     # 当前网络 + 已信任列表\nnpx clamicro rotate-token # 换发访问令牌（令牌可能泄露时）\nnpx clamicro test-push    # 发一条测试通知（Mac 本地）\nnpx clamicro logs         # 跟踪日志\nnpx clamicro stop         # 停止服务\n```\n\n平时不用手动启动——`SessionStart` hook 会在你打开 Claude Code 时自动把服务拉起来。\n\n配置在 `~/.claude/clamicro/config.json`（权限 600，含访问 token）。日常设置改手机网页即可，不用编辑这个文件。\n\n`ignoreCwds` 里的工作目录不做阻塞审批——开发 clamicro 自身时用，正常使用应留空。\n\n---\n\n## 使用教程\n\n第一次用、或者遇到「这是 bug 还是设计如此」的困惑，看 [docs/guide.zh-CN.md](./docs/guide.zh-CN.md) · [English](./docs/guide.md)。\n\n---\n\n## 维护笔记\n\n踩过的坑和当时的判断依据记在 [NOTES.md](./NOTES.md)。\n\n---\n\n## 已知限制\n\n- 需与 Mac 同一 Wi-Fi（或同一 tailnet）；公司网络若开启客户端隔离或 VLAN 隔离则不通\n- 局域网内明文传输，不可信网络请用 Tailscale，见上方「安全」\n- 纯 HTTP 非 secure context，拿不到 Service Worker / Web Push\n- 仅 iPhone + macOS\n- Pause 为「下一个可拦截点暂停」，不是运行时冻结\n- 手势为主的界面，VoiceOver 用户目前没有等价入口\n- 审批与事件保留一天、上限 300/3000 条，超出滚动丢弃\n","readmeFilename":"README.zh-CN.md"}