{"_id":"@carbonvoice/cv-claude-channel","_rev":"13-75a26c345ac10d5222f465a9f979b138","name":"@carbonvoice/cv-claude-channel","dist-tags":{"latest":"0.3.1"},"versions":{"0.1.0":{"name":"@carbonvoice/cv-claude-channel","version":"0.1.0","keywords":["claude-code","mcp","channel","carbon-voice","voice","audio"],"author":{"name":"PhononX"},"license":"MIT","_id":"@carbonvoice/cv-claude-channel@0.1.0","maintainers":[{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/PhononX/cv-claude-channel#readme","bugs":{"url":"https://github.com/PhononX/cv-claude-channel/issues"},"bin":{"cv-claude-channel":"dist/cv-claude-channel.js"},"dist":{"shasum":"9b57f1839e600dfbe0da019d0fd2c1e268cf0f87","tarball":"https://registry.npmjs.org/@carbonvoice/cv-claude-channel/-/cv-claude-channel-0.1.0.tgz","fileCount":6,"integrity":"sha512-to8TzTM9gGaeFJnvsyX3YrOm6wrP+niYIAtBxX6MCNlSd3RcQDYYGisFHNL5zvkhzVZB4IAYkB7FxLXi2sRqqw==","signatures":[{"sig":"MEQCIFM19fUWqC3kSEgrbbFFkPbiJW0CE76fFUyLSsIaU0efAiAp5eJwsj+jkjEJPE4RRFJCJ7kjkyLhPqOimyFW8pmwmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39846},"main":"./dist/cv-claude-channel.js","type":"module","types":"./dist/cv-claude-channel.d.ts","engines":{"node":">=18.0.0"},"gitHead":"51efc8407064bba1edfc71aa8148180faff20a59","scripts":{"build":"tsc","start":"tsx cv-claude-channel.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"travisbogardpx","email":"travis@phononx.com"},"repository":{"url":"git+https://github.com/PhononX/cv-claude-channel.git","type":"git"},"_npmVersion":"11.11.1","description":"Carbon Voice Claude Channel server - bridges Carbon Voice conversations into Claude Code sessions","directories":{},"_nodeVersion":"25.8.2","dependencies":{"zod":"^3.0.0","socket.io-client":"^4.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cv-claude-channel_0.1.0_1778370388056_0.5812194057174858","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@carbonvoice/cv-claude-channel","version":"0.1.1","keywords":["claude-code","mcp","channel","carbon-voice","voice","audio"],"author":{"name":"PhononX"},"license":"MIT","_id":"@carbonvoice/cv-claude-channel@0.1.1","maintainers":[{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/PhononX/cv-claude-channel#readme","bugs":{"url":"https://github.com/PhononX/cv-claude-channel/issues"},"bin":{"cv-claude-channel":"dist/cv-claude-channel.js"},"dist":{"shasum":"a5a97b8eab98e41f4a596b2bf780e9db1ab77b64","tarball":"https://registry.npmjs.org/@carbonvoice/cv-claude-channel/-/cv-claude-channel-0.1.1.tgz","fileCount":6,"integrity":"sha512-uKhbGDgW58P7+6dIlD0PfRiI0UsxX+m4FUPPuT/zMf8Jx/8Efq4SO6cpIMvgIboARR5Jh8r4foYH6Z9L13+y5g==","signatures":[{"sig":"MEUCIQD9ofCVnhifMzMDXWkHiZDpZpjL8sMPFOLAFo8KMAURYAIgGHY1uZkEPEuuMDe76+j1GUyvSra0BEPivhDir0tzvlA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41028},"main":"./dist/cv-claude-channel.js","type":"module","types":"./dist/cv-claude-channel.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2b7c5f237b0c8d11d90d68d76b0e7d08be323b7a","scripts":{"build":"tsc","start":"tsx cv-claude-channel.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"travisbogardpx","email":"travis@phononx.com"},"repository":{"url":"git+https://github.com/PhononX/cv-claude-channel.git","type":"git"},"_npmVersion":"11.11.1","description":"Carbon Voice Claude Channel server - bridges Carbon Voice conversations into Claude Code sessions","directories":{},"_nodeVersion":"25.8.2","dependencies":{"zod":"^3.0.0","socket.io-client":"^4.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cv-claude-channel_0.1.1_1778430774202_0.8722519832112448","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@carbonvoice/cv-claude-channel","version":"0.1.2","keywords":["claude-code","mcp","channel","carbon-voice","voice","audio"],"author":{"name":"PhononX"},"license":"MIT","_id":"@carbonvoice/cv-claude-channel@0.1.2","maintainers":[{"name":"cristian_murillo","email":"cristianmgm7@gmail.com"},{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/PhononX/cv-claude-channel#readme","bugs":{"url":"https://github.com/PhononX/cv-claude-channel/issues"},"bin":{"cv-claude-channel":"dist/cv-claude-channel.js"},"dist":{"shasum":"da82418e0f6f3730cc2b87ffb4538ff2ad40b6f3","tarball":"https://registry.npmjs.org/@carbonvoice/cv-claude-channel/-/cv-claude-channel-0.1.2.tgz","fileCount":11,"integrity":"sha512-kXi6GcJ5//eE6JpKKOFzWl7dAgA58jMQQGTR0dCe0zkYCGeyT9XaSra/Wx+V/fhYOBj7Tzqz59pCtoB+dJs9OQ==","signatures":[{"sig":"MEYCIQC3H6guSFPQaYEXEKNMf+SCfydNFBMeNPo/z6J7kDwyQQIhAInsSQF05mQ2PERBigMBxLmfrsWhzwPEUa6H3Z1R8kvj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7930236},"main":"./dist/cv-claude-channel.js","type":"module","types":"./dist/cv-claude-channel.d.ts","engines":{"node":">=18.0.0"},"gitHead":"08dbace06b8e5659eb62299f455d0d322c3a714b","scripts":{"build":"tsc","start":"tsx cv-claude-channel.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"travisbogardpx","email":"travis@phononx.com"},"repository":{"url":"git+https://github.com/PhononX/cv-claude-channel.git","type":"git"},"_npmVersion":"11.11.1","description":"Carbon Voice Claude Channel server - bridges Carbon Voice conversations into Claude Code sessions","directories":{},"_nodeVersion":"25.8.2","dependencies":{"zod":"^3.0.0","socket.io-client":"^4.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cv-claude-channel_0.1.2_1779433716924_0.36810873677689715","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@carbonvoice/cv-claude-channel","version":"0.1.3","keywords":["claude-code","mcp","channel","carbon-voice","voice","audio"],"author":{"name":"PhononX"},"license":"MIT","_id":"@carbonvoice/cv-claude-channel@0.1.3","maintainers":[{"name":"cristian_murillo","email":"cristianmgm7@gmail.com"},{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/PhononX/cv-claude-channel#readme","bugs":{"url":"https://github.com/PhononX/cv-claude-channel/issues"},"bin":{"cv-claude-channel":"dist/cv-claude-channel.js"},"dist":{"shasum":"f839a1733228e7d297280ff94ce55a5c1ac80581","tarball":"https://registry.npmjs.org/@carbonvoice/cv-claude-channel/-/cv-claude-channel-0.1.3.tgz","fileCount":11,"integrity":"sha512-uNQZYfGmVa5ZfEAaB+kTFbvRlptNVXnqedBOsiu27Ydl66bxF8rtYzqhbNKrPaWGs4i9YdSW7juSBQ/WMyT9LA==","signatures":[{"sig":"MEYCIQC868gGtMc6Ondftx6DrmM2CTZw6j8lSmzCuO+Kv56pQQIhAIDM6zY7GfQj1Wopt37c+zVcv1ICTk5plJq/UeSNSFBO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7929692},"main":"./dist/cv-claude-channel.js","type":"module","types":"./dist/cv-claude-channel.d.ts","engines":{"node":">=18.0.0"},"gitHead":"e4c8132d914c7095a052b2e3a0194f88b74faa02","scripts":{"build":"tsc","start":"tsx cv-claude-channel.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"travisbogardpx","email":"travis@phononx.com"},"repository":{"url":"git+https://github.com/PhononX/cv-claude-channel.git","type":"git"},"_npmVersion":"11.11.1","description":"Carbon Voice Claude Channel server - bridges Carbon Voice conversations into Claude Code sessions","directories":{},"_nodeVersion":"25.8.2","dependencies":{"zod":"^3.0.0","socket.io-client":"^4.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cv-claude-channel_0.1.3_1779480381961_0.3092305393029753","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@carbonvoice/cv-claude-channel","version":"0.1.4","keywords":["claude-code","mcp","channel","carbon-voice","voice","audio"],"author":{"name":"PhononX"},"license":"MIT","_id":"@carbonvoice/cv-claude-channel@0.1.4","maintainers":[{"name":"cristian_murillo","email":"cristianmgm7@gmail.com"},{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/PhononX/cv-claude-channel#readme","bugs":{"url":"https://github.com/PhononX/cv-claude-channel/issues"},"bin":{"cv-claude-channel":"dist/cv-claude-channel.js"},"dist":{"shasum":"016f915a436d9cd6b19dbba8aeca883c6e426824","tarball":"https://registry.npmjs.org/@carbonvoice/cv-claude-channel/-/cv-claude-channel-0.1.4.tgz","fileCount":11,"integrity":"sha512-hFYAEQsJLMm8fOet8YGNd0U7Yyy/SIIXWjSKKuoPOO3Cdx33VS5vgC1VzyXirhKCVCEMpdQzGg0XcdsObUdgTA==","signatures":[{"sig":"MEUCIC+nPXWCK4cWcz+emkhg3FCf72xuwwoanoN60gbnB47iAiEAo2eoKIbkDoDjv3qxrzMWeMGRDA0+vt6h/Kc+JXB4cG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7929369},"main":"./dist/cv-claude-channel.js","type":"module","types":"./dist/cv-claude-channel.d.ts","engines":{"node":">=18.0.0"},"gitHead":"9e02286f6dbadcfe760ffe590304cffc06768825","scripts":{"build":"tsc","start":"tsx cv-claude-channel.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"travisbogardpx","email":"travis@phononx.com"},"repository":{"url":"git+https://github.com/PhononX/cv-claude-channel.git","type":"git"},"_npmVersion":"11.11.1","description":"Carbon Voice Claude Channel server - bridges Carbon Voice conversations into Claude Code sessions","directories":{},"_nodeVersion":"25.8.2","dependencies":{"zod":"^3.0.0","socket.io-client":"^4.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cv-claude-channel_0.1.4_1779830499215_0.3150432656933788","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@carbonvoice/cv-claude-channel","version":"0.1.5","keywords":["claude-code","mcp","channel","carbon-voice","voice","audio"],"author":{"name":"PhononX"},"license":"MIT","_id":"@carbonvoice/cv-claude-channel@0.1.5","maintainers":[{"name":"cristian_murillo","email":"cristianmgm7@gmail.com"},{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/PhononX/cv-claude-channel#readme","bugs":{"url":"https://github.com/PhononX/cv-claude-channel/issues"},"bin":{"cv-claude-channel":"dist/cv-claude-channel.js"},"dist":{"shasum":"830fa2ea11ce712a4ddaae92dca18bc467b56657","tarball":"https://registry.npmjs.org/@carbonvoice/cv-claude-channel/-/cv-claude-channel-0.1.5.tgz","fileCount":11,"integrity":"sha512-xhlPk+1J4Ntaa/HBU8F9RCzEAnrgmA8QwM+y53rHlODVUWZpCvCMYFOovD7jug+EOAYyAwUG4cD4NUy8FxQ2mA==","signatures":[{"sig":"MEQCIES4pcrgD3gWRw1aA60mXdnn0p93J5Af2REcu0SJ/kOmAiAZUmkSvTsCJxahyAukZoKH+y9scrZ4KQFmdRT3bwHAIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7929405},"main":"./dist/cv-claude-channel.js","type":"module","types":"./dist/cv-claude-channel.d.ts","engines":{"node":">=18.0.0"},"gitHead":"9f1de0468e5e9c5f91f3659e84b78fa9b7a7c8c2","scripts":{"build":"tsc","start":"tsx cv-claude-channel.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"travisbogardpx","email":"travis@phononx.com"},"repository":{"url":"git+https://github.com/PhononX/cv-claude-channel.git","type":"git"},"_npmVersion":"11.11.1","description":"Carbon Voice Claude Channel server - bridges Carbon Voice conversations into Claude Code sessions","directories":{},"_nodeVersion":"25.8.2","dependencies":{"zod":"^3.0.0","socket.io-client":"^4.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cv-claude-channel_0.1.5_1779832123461_0.8465451175152265","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@carbonvoice/cv-claude-channel","version":"0.1.6","keywords":["claude-code","mcp","channel","carbon-voice","voice","audio"],"author":{"name":"PhononX"},"license":"MIT","_id":"@carbonvoice/cv-claude-channel@0.1.6","maintainers":[{"name":"cristian_murillo","email":"cristianmgm7@gmail.com"},{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/PhononX/cv-claude-channel#readme","bugs":{"url":"https://github.com/PhononX/cv-claude-channel/issues"},"bin":{"cv-claude-channel":"dist/cv-claude-channel.js"},"dist":{"shasum":"c5e127d1a1aee3f8fe7017c6aad684587103dfa3","tarball":"https://registry.npmjs.org/@carbonvoice/cv-claude-channel/-/cv-claude-channel-0.1.6.tgz","fileCount":9,"integrity":"sha512-0T9xJMZBq30k2sGA2tkQpoJOpFwoa64pDJJ31PWh8We4Mam8Cu9ou11TfsxDmhCOZZXSb6Gi/pE9P0Ki03rA+A==","signatures":[{"sig":"MEYCIQCnRXS/uH31z+87RsQmoEc/LVD97JlUBNMwwXx2ptulUQIhAOKMGRdQxK5rlf0yGgc7dnNBPTYVc3JPIyKfsTqg6V3s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65952},"main":"./dist/cv-claude-channel.js","type":"module","types":"./dist/cv-claude-channel.d.ts","engines":{"node":">=18.0.0"},"gitHead":"4efd319edfdf8ab65dee8e82ccc40e39fadcc90d","scripts":{"build":"tsc","start":"tsx cv-claude-channel.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"travisbogardpx","email":"travis@phononx.com"},"repository":{"url":"git+https://github.com/PhononX/cv-claude-channel.git","type":"git"},"_npmVersion":"11.11.1","description":"Carbon Voice Claude Channel server - bridges Carbon Voice conversations into Claude Code sessions","directories":{},"_nodeVersion":"25.8.2","dependencies":{"zod":"^3.0.0","socket.io-client":"^4.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cv-claude-channel_0.1.6_1780350448116_0.2166412898810255","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@carbonvoice/cv-claude-channel","version":"0.1.7","keywords":["claude-code","mcp","channel","carbon-voice","voice","audio"],"author":{"name":"PhononX"},"license":"MIT","_id":"@carbonvoice/cv-claude-channel@0.1.7","maintainers":[{"name":"cristian_murillo","email":"cristianmgm7@gmail.com"},{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/PhononX/cv-claude-channel#readme","bugs":{"url":"https://github.com/PhononX/cv-claude-channel/issues"},"bin":{"cv-claude-channel":"dist/cv-claude-channel.js"},"dist":{"shasum":"a86303624c0522e17e5ee3368cf236c23c22135f","tarball":"https://registry.npmjs.org/@carbonvoice/cv-claude-channel/-/cv-claude-channel-0.1.7.tgz","fileCount":9,"integrity":"sha512-8NQ9jkf4A/ooRPHes1iRUS69yKkDK4nCz2KuiNH4Bn5q5mUlTcJA5uNfSI2Axa79NFCTL9e3PvuOhaXRMOJYxQ==","signatures":[{"sig":"MEUCIQC2JT8jyC/qyGUW6L8JSWq2bqxSAAOtIqcsN/uN+lG/7gIgUU0YyyKg/qlgzgwsj0e7gUE2MbQAPQsj7kFsuLE7swo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88124},"main":"./dist/cv-claude-channel.js","type":"module","types":"./dist/cv-claude-channel.d.ts","engines":{"node":">=18.0.0"},"gitHead":"d8b2b2912ad2582ea64d5de2d0eeabe1ad511fcc","scripts":{"build":"tsc","start":"tsx cv-claude-channel.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"travisbogardpx","email":"travis@phononx.com"},"repository":{"url":"git+https://github.com/PhononX/cv-claude-channel.git","type":"git"},"_npmVersion":"10.9.8","description":"Carbon Voice Claude Channel server - bridges Carbon Voice conversations into Claude Code sessions","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.0.0","socket.io-client":"^4.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cv-claude-channel_0.1.7_1780726788220_0.5246505109562944","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@carbonvoice/cv-claude-channel","version":"0.1.8","keywords":["claude-code","mcp","channel","carbon-voice","voice","audio"],"author":{"name":"PhononX"},"license":"MIT","_id":"@carbonvoice/cv-claude-channel@0.1.8","maintainers":[{"name":"cristian_murillo","email":"cristianmgm7@gmail.com"},{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/PhononX/cv-claude-channel#readme","bugs":{"url":"https://github.com/PhononX/cv-claude-channel/issues"},"bin":{"cv-claude-channel":"dist/cv-claude-channel.js"},"dist":{"shasum":"e963440fbe469dadf861eb575ed7c595d5ef6921","tarball":"https://registry.npmjs.org/@carbonvoice/cv-claude-channel/-/cv-claude-channel-0.1.8.tgz","fileCount":9,"integrity":"sha512-DlcVbyXVz0BrngUEbeNOkNtDOKlqjxB1xVT0qq5O5RlR3ZpNXlSMsdjhvkDSoRHAhUrnHSeJfaFoIdM4/1uatA==","signatures":[{"sig":"MEUCIQCrX2w82P55n5bqfVF6kHAxGI7XoJLuBw5K1mlizoEUFwIgWKqYh8L9zErM6xMqc+15Vu6AgnuTka27Di3N5TbVMzc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93064},"main":"./dist/cv-claude-channel.js","type":"module","types":"./dist/cv-claude-channel.d.ts","engines":{"node":">=18.0.0"},"gitHead":"bdb5c11a47618767d6460a93720fa1ac66936546","scripts":{"test":"vitest run","build":"tsc","start":"tsx cv-claude-channel.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"travisbogardpx","email":"travis@phononx.com"},"repository":{"url":"git+https://github.com/PhononX/cv-claude-channel.git","type":"git"},"_npmVersion":"10.9.8","description":"Carbon Voice Claude Channel server - bridges Carbon Voice conversations into Claude Code sessions","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.0.0","socket.io-client":"^4.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^2.1.9","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cv-claude-channel_0.1.8_1780896949514_0.5568841243366935","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@carbonvoice/cv-claude-channel","version":"0.3.0","keywords":["claude-code","mcp","channel","carbon-voice","voice","audio"],"author":{"name":"PhononX"},"license":"MIT","_id":"@carbonvoice/cv-claude-channel@0.3.0","maintainers":[{"name":"cristian_murillo","email":"cristianmgm7@gmail.com"},{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"homepage":"https://github.com/PhononX/cv-claude-channel#readme","bugs":{"url":"https://github.com/PhononX/cv-claude-channel/issues"},"bin":{"cv-claude-channel":"dist/cv-claude-channel.js"},"dist":{"shasum":"0c23438df8e541e3d9fcb5a49ac4fba28cd934b5","tarball":"https://registry.npmjs.org/@carbonvoice/cv-claude-channel/-/cv-claude-channel-0.3.0.tgz","fileCount":24,"integrity":"sha512-H9YyX4LfUvfUvnbTSXAnhKe2vCoosHGKWbqpnB5hsNNkqfruTAx6jwyOm0AjNblm+H3MELYkb8+fr+c5RtlM2Q==","signatures":[{"sig":"MEYCIQC0cemd4UNKC9cNrAZsBVyxsggD0BMbFWsgaLLL1omDiwIhAOrZto4A2qwmqnzK2tscSzgLQHuZUHbSmdOD4b7/F+7g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCEKS8SvQDh6YSZKiObJVLzK+TDixYOgpBAesN70SB1gQIhAI7UJo3/aANs+wkRUDQ7NoPYrv5bhDmc1vxjvibVRvTf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":269725},"main":"./dist/cv-claude-channel.js","type":"module","types":"./dist/cv-claude-channel.d.ts","engines":{"node":">=18.0.0"},"gitHead":"a17c3ec9ec5a77b1d549cf1a14b8c07bac4faf33","scripts":{"test":"vitest run","build":"tsc","smoke":"node scripts/smoke.mjs","start":"tsx cv-claude-channel.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"travisbogardpx","email":"travis@phononx.com"},"repository":{"url":"git+https://github.com/PhononX/cv-claude-channel.git","type":"git"},"_npmVersion":"10.9.8","description":"Carbon Voice Claude Channel server - bridges Carbon Voice conversations into Claude Code sessions","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.0.0","socket.io-client":"^4.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":true,"devDependencies":{"tsx":"^4.0.0","vitest":"^2.1.9","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cv-claude-channel_0.3.0_1789528857704_0.057642073943954486","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"_id":"@carbonvoice/cv-claude-channel@0.3.1","bin":{"cv-claude-channel":"dist/cv-claude-channel.js"},"bugs":{"url":"https://github.com/PhononX/cv-claude-channel/issues"},"dist":{"shasum":"3801d8eb419c1cd7920ec5faf8d6e0085f0b633a","tarball":"https://registry.npmjs.org/@carbonvoice/cv-claude-channel/-/cv-claude-channel-0.3.1.tgz","fileCount":32,"integrity":"sha512-B2Lo4IEnAh+4DK34IjqRIVVwJct6yLID+AiV2r68yznoySwa36Tb6ck4R+kYpgbPbWHT/3L9TW+fddFdJxOxDQ==","signatures":[{"sig":"MEUCIALTnDgf/GKHo2Ii8yTc3g4hbYvJVZXy4hcvoyFihJGaAiEAmuiWo71UQbgX/qxgZZbANtfw/Irv6yc/40nMEH07eWs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDD9VljZYp2x5zdLXnsoBvy5CDQQgwlwwynC1w6h6Z4rgIgNcxT8sK/Vrbv0OR1Yx7SoOqJhKipeckE64wxmiCgvUk="}],"unpackedSize":335344},"main":"./dist/cv-claude-channel.js","name":"@carbonvoice/cv-claude-channel","type":"module","types":"./dist/cv-claude-channel.d.ts","author":{"name":"PhononX"},"engines":{"node":">=18.0.0"},"gitHead":"0970a8c5a58b2088d1f23859b9998c7b37010944","license":"MIT","scripts":{"test":"vitest run","build":"tsc","smoke":"node scripts/smoke.mjs","start":"tsx cv-claude-channel.ts","test:watch":"vitest","prepublishOnly":"npm run build"},"version":"0.3.1","_npmUser":{"name":"cristian_murillo","email":"cristianmgm7@gmail.com"},"homepage":"https://github.com/PhononX/cv-claude-channel#readme","keywords":["claude-code","mcp","channel","carbon-voice","voice","audio"],"repository":{"url":"git+https://github.com/PhononX/cv-claude-channel.git","type":"git"},"_npmVersion":"10.9.8","description":"Carbon Voice Claude Channel server - bridges Carbon Voice conversations into Claude Code sessions","directories":{},"maintainers":[{"name":"cristian_murillo","email":"cristianmgm7@gmail.com"},{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"_nodeVersion":"22.22.3","dependencies":{"zod":"^3.0.0","socket.io-client":"^4.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":true,"devDependencies":{"tsx":"^4.0.0","vitest":"^2.1.9","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cv-claude-channel_0.3.1_1790359812448_0.008653501172668276"}}},"time":{"created":"2026-05-09T23:46:27.951Z","modified":"2026-09-25T18:10:12.822Z","0.1.0":"2026-05-09T23:46:28.241Z","0.1.1":"2026-05-10T16:32:54.347Z","0.1.2":"2026-05-22T07:08:37.245Z","0.1.3":"2026-05-22T20:06:22.330Z","0.1.4":"2026-05-26T21:21:39.479Z","0.1.5":"2026-05-26T21:48:43.777Z","0.1.6":"2026-06-01T21:47:28.268Z","0.1.7":"2026-06-06T06:19:48.405Z","0.1.8":"2026-06-08T05:35:49.664Z","0.3.0":"2026-09-16T03:20:57.789Z","0.3.1":"2026-09-25T18:10:12.589Z"},"bugs":{"url":"https://github.com/PhononX/cv-claude-channel/issues"},"author":{"name":"PhononX"},"license":"MIT","homepage":"https://github.com/PhononX/cv-claude-channel#readme","keywords":["claude-code","mcp","channel","carbon-voice","voice","audio"],"repository":{"url":"git+https://github.com/PhononX/cv-claude-channel.git","type":"git"},"description":"Carbon Voice Claude Channel server - bridges Carbon Voice conversations into Claude Code sessions","maintainers":[{"name":"cristian_murillo","email":"cristianmgm7@gmail.com"},{"name":"russellclarvoepx","email":"russell@phononx.com"},{"name":"travisbogardpx","email":"travis@phononx.com"},{"name":"fredericomartini","email":"frederico@phononx.com"}],"readme":"# Carbon Voice Claude Channel for Claude Code\n\n[![npm version](https://badge.fury.io/js/@carbonvoice%2fcv-claude-channel.svg)](https://www.npmjs.com/package/@carbonvoice/cv-claude-channel)\n\nA Claude Code channel that bridges Carbon Voice conversations into a running Claude Code session. Send a voice message, Claude does the work on your machine, and the reply comes back as audio.\n\nIf your computer is offline, messages queue and are delivered when the connection is restored.\n\n## Features\n\n- **Real-time message delivery** via WebSocket (primary) with polling fallback\n- **Two-way communication** — Claude replies back into Carbon Voice conversations\n- **Sender gating** — deny-by-default allowlist, managed from the terminal only\n- **Permission relay** — approve or deny `Bash`/`Write`/`Edit` prompts from your phone\n- **Attachments** — files sent in Carbon Voice are downloaded for Claude to read\n- **Deduplication** and **state persistence** — resumes from the last-seen cursor\n\n## Setup\n\n### Before you start: you need two Carbon Voice accounts\n\nThe Personal Access Token identifies the **Claude side** of the conversation. Messages from that account are treated as Claude's own and are ignored, so **you cannot message the channel from the account whose token you used** — nothing will arrive, and there is no error.\n\nSo either:\n\n- **Team use (the normal case).** Use your own token. Colleagues message you in Carbon Voice, Claude does the work on your machine and replies in your conversation.\n- **Solo use.** Create a second Carbon Voice account to act as the bot, use *its* token, and message it from your personal account.\n\n### Steps\n\n1. **Get a Personal Access Token** from Carbon Voice, for whichever account is the Claude side.\n\n2. **Install the plugin.**\n\n   ```\n   /plugin marketplace add PhononX/cv-claude-channel\n   /plugin install cv-channel@carbonvoice\n   ```\n\n   Choose the **user** scope so it works across projects. If the summary says `Run /reload-plugins to activate.`, run that.\n\n3. **Save the token.**\n\n   ```\n   /cv-channel:configure <your-personal-access-token>\n   ```\n\n   Until you do this the channel's MCP server has no token and exits — `/mcp` showing it as failed before this step is expected, not a bug.\n\n4. **Restart with the channel enabled.** See the table below for the flag your plan needs.\n\n5. **Allow yourself.** Every sender is denied by default, so the first message is *supposed* to be dropped. Send one voice message from your other account. Claude reports the sender ID; then run:\n\n   ```\n   /cv-channel:access allow <user-id>\n   ```\n\n   That takes effect on the next message — no restart. Message again and it reaches Claude.\n\nAllowing someone lets them send messages Claude acts on **and** approve relayed tool prompts like `Bash` and `Write`. Only allow people you trust with that.\n\n### Troubleshooting the first run\n\n| Symptom | Cause |\n| --- | --- |\n| Nothing arrives, no error | You messaged from the token's own account. Use a different one. |\n| `/mcp` shows the server failed | No token yet — run `/cv-channel:configure`. |\n| Messages dropped, Claude mentions an unknown sender | Working as intended. Allow the ID (step 5). |\n| Startup says \"blocked by org policy\" | Your organization has not enabled channels; no flag gets around it. |\n| Channel never connects, but the server is healthy | You started Claude without the channel flag, so the channel isn't registered. |\n\n### Who can run it, and how\n\nChannels are in research preview, and which flag you need depends on your plan:\n\n| You are | Command | Prerequisites |\n| --- | --- | --- |\n| Pro/Max, no organization | `claude --dangerously-load-development-channels plugin:cv-channel@carbonvoice` | none |\n| Team/Enterprise | `claude --channels plugin:cv-channel@carbonvoice` | admin sets **both** `channelsEnabled` and `allowedChannelPlugins` |\n\nTwo things worth knowing before you file a bug:\n\n- **`channelsEnabled` is off by default on Team and Enterprise plans**, and it blocks the development flag too. If you are in an organization and see \"blocked by org policy\" at startup, no flag will get you around it — an admin has to enable channels first.\n- This plugin is not on Anthropic's curated channel allowlist, so `--channels` alone will not load it outside an organization that has allowlisted it. That is expected, not a misconfiguration.\n\nFor an admin, the managed-settings entry is:\n\n```json\n{\n  \"channelsEnabled\": true,\n  \"allowedChannelPlugins\": [\n    { \"marketplace\": \"carbonvoice\", \"plugin\": \"cv-channel\" }\n  ]\n}\n```\n\n### Without the plugin\n\nThe bare MCP server still works and is supported for one more release. Add it to `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"cv-claude-channel\": {\n      \"command\": \"npx\",\n      \"args\": [\"@carbonvoice/cv-claude-channel\"],\n      \"env\": { \"CV_PAT\": \"your-personal-access-token\" }\n    }\n  }\n}\n```\n\nand start with `claude --dangerously-load-development-channels server:cv-claude-channel`. New installs should prefer the plugin — `/cv-channel:configure` keeps your token out of `.mcp.json`, which usually gets committed.\n\n## Configuration\n\nThe Personal Access Token is the only required setting. `/cv-channel:configure` writes it to `~/.claude/channels/cv/.env` (mode 0600); an explicit `CV_PAT` in the environment takes precedence.\n\n| Variable | Default | Purpose |\n| --- | --- | --- |\n| `CV_PAT` | — | Personal Access Token. Required unless set via `/cv-channel:configure`. |\n| `CV_ENV_PATH` | `~/.claude/channels/cv/.env` | Where the token file lives |\n| `CV_CONVERSATION_ID` | all | Scope to a single conversation |\n| `CV_PROJECT_NAME` | `this project` | Project name shown to a newly allowed sender |\n| `CV_ACCESS_PATH` | `~/.claude/channels/cv/access.json` | Allowlist file |\n| `CV_STATE_PATH` | `~/.claude/channels/cv/state.json` | Cursor file |\n| `CV_ATTACHMENTS_DIR` | `~/.claude/channels/cv/attachments` | Downloaded attachments |\n| `CV_POLL_INTERVAL_MS` | `5000` | Polling interval when WebSocket is down |\n| `CV_WS_RETRY_MAX_MS` | `30000` | Max WebSocket retry backoff |\n| `CV_ATTACHMENT_TIMEOUT_MS` | `600000` | How long to wait for a pending upload |\n| `CV_ATTACHMENT_NUDGE_MS` | `120000` | When to nudge about a slow upload |\n| `CV_OWN_USER_ID` | resolved via API | Skip the identity lookup at startup |\n| `CV_PERMISSION_TTL_MS` | `600000` | How long a relayed approval prompt stays answerable |\n| `CV_PERMISSION_CONTEXT_TTL_MS` | `600000` | How stale the target conversation may be before a prompt is not relayed |\n| `CV_PERMISSION_PREVIEW_MAX` | `400` | Characters of tool input shown in a relayed prompt |\n| `CV_REACTION_ID` | 👀 | Emoji used as the processed marker |\n| `CV_PERMISSION_ALLOW_REACTION` | ✅ | Emoji meaning \"allow once\" |\n| `CV_PERMISSION_ALLOW_ALWAYS_REACTION` | 💯 | Emoji meaning \"allow for this session\" |\n| `CV_PERMISSION_DENY_REACTION` | ⛔,👎 | Emoji meaning \"deny\" (both accepted) |\n| `CV_LOG_FILE` | stderr only | Mirror the log to a file |\n\n> Each takes a comma-separated list of emoji — any emoji, not just the curated set — or a legacy curated slug, which is normalized to its emoji. Deny accepts two by default: ⛔ is what the app's one-tap quick row shows and what the legacy `negative` reaction normalizes to, while 👎 is the glyph the pre-migration UI drew for that same reaction, so both muscle memories work. The prompt names every glyph it accepts, and the server warns at startup if a value is not a single emoji, if two verdicts share a glyph, or if the processed marker collides with an approval emoji.\n\n## Usage\n\n### Receiving messages\n\n```\n<channel source=\"plugin:cv-channel:cv-channel\" channel_id=\"...\" message_id=\"...\" sender_id=\"...\" is_reply=\"false\" reply_to_id=\"...\">\n  transcript of what was said\n</channel>\n```\n\n### Replying\n\nClaude calls `send_message` with `channel_id`, `reply_to_message_id`, and `text`. Carbon Voice converts the text to audio.\n\n### Permission prompts\n\nWhen Claude needs approval for a tool, the prompt is relayed to Carbon Voice:\n\n```\nClaude wants to run Bash: Delete the build directory\n\n{\"command\":\"rm -rf ./build\"}\n\n✅ = allow once. 💯 = allow Bash for the rest of this session, whatever the arguments. ⛔ or 👎 = deny.\nOr reply \"yes abcde\" or \"no abcde\".\n```\n\nReact, or reply `yes <id>` / `no <id>`. The local terminal dialog stays open the whole time — whichever answer arrives first wins.\n\nThe prompt shows the tool's actual arguments, not just Claude's description, because for `Bash` the description is often the bare string `Run shell command`. Long values are truncated for playback, and Claude Code masks recognizable credentials as `[REDACTED]` before the server ever sees them. Note that masking can hide key *names* as well as values, so a displayed key may not match the real input.\n\nA relayed prompt expires after `CV_PERMISSION_TTL_MS` and can no longer be answered from Carbon Voice; the terminal dialog is unaffected.\n\n## Security\n\n### Sender gating\n\n**Every sender is denied by default.** Unauthorized messages are dropped silently.\n\nAccess is managed from the terminal with `/cv-channel:access`:\n\n```\n/cv-channel:access list\n/cv-channel:access allow <user-id>\n/cv-channel:access remove <user-id>\n/cv-channel:access block <user-id>\n/cv-channel:access unblock <user-id>\n```\n\nAllowlist changes are **only** made this way. The channel server reads\n`access.json` and never writes it, and it exposes no tool that can widen access\n— so no inbound message, forwarded message, or attachment can talk Claude into\nallowlisting anyone. The skill itself refuses requests that arrived over the\nchannel. Edits take effect on the next inbound message, without a restart.\n\nWhen an unknown sender messages, Claude is told once per session so it can pass the ID along to you. Acting on it is your call, at the terminal.\n\nIf the allowlist is completely empty, the sender gets one reply in Carbon Voice: *\"Allow Sender list is currently empty. Go to Claude to approve senders.\"*\n\n### What allowing someone grants\n\nAn allowlisted sender can send messages Claude acts on **and** can approve or deny relayed tool-use prompts, including `Bash`, `Write`, and `Edit`. Only allow people you would trust with that. This is why the allowlist is deliberately awkward to change.\n\n## Development\n\n```bash\nnpm install\nnpm start          # run against the TypeScript source\nnpm run build      # compile to dist/\nnpm test           # vitest\nnpm run smoke      # protocol smoke test (needs a build first; hits no network)\n```\n\nTest the plugin without publishing:\n\n```bash\nnpm run build\nclaude --plugin-dir . --dangerously-load-development-channels plugin:cv-channel@inline\nclaude plugin validate . --strict\n```\n\n### Publishing\n\n```bash\nnpm publish\n```\n\n`prepublishOnly` runs the build. The published tarball is an installable plugin as well as an MCP server — the `.claude-plugin/`, `.mcp.json`, and `skills/` entries are what the marketplace `npm` source resolves.\n\n## Requirements\n\n- Node.js >= 18\n- A Carbon Voice account with a Personal Access Token\n- Claude Code with channels available on your plan (see the table above)\n\n### Known incompatibility\n\nClaude Code does not register a channel server that negotiates MCP protocol revision `2026-07-28`. No published `@modelcontextprotocol/sdk` speaks that revision yet, and it is only reachable if you set `MCP_PROTOCOL_NEGOTIATION=auto`. If a future SDK adds it and the channel stops registering, leave that variable unset or set it to `legacy`.\n\n## License\n\nMIT\n\n## Support\n\n- GitHub Issues: https://github.com/PhononX/cv-claude-channel/issues\n- Carbon Voice API: https://api.carbonvoice.app\n\n## Acknowledgments\n\nBuilt following the [Claude Code Channels specification](https://code.claude.com/docs/en/channels-reference).\n","readmeFilename":"README.md"}