{"_id":"@desplega.ai/claude-bridge","_rev":"16-ef2c6d7b51ddd2c0653aa8521c65285e","name":"@desplega.ai/claude-bridge","dist-tags":{"latest":"0.2.2"},"versions":{"0.1.0":{"name":"@desplega.ai/claude-bridge","version":"0.1.0","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.1.0","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"02553837dffde6606ecb117843b3a2bbe5d322d8","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.1.0.tgz","fileCount":14,"integrity":"sha512-koOr4c+E0HRBLR60ytFzwwadXy5ewVm1gD6DW7EUWi/W5LGZPOnjg6jhQ8Den8vivKINxFPBgRcFh5mpaApNRw==","signatures":[{"sig":"MEUCIQCeEC23miOc0eNQlxdrwxJ+B4JO1tc79uL0HNcG7xo/8gIgeCfM6etlPN6k7Bum5+v8/URzFkbTYq80yWiOAdeg6fw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97247},"type":"module","engines":{"bun":">=1.1"},"gitHead":"c8149b0e4bd63ca08a18888576fb1b8e81f67191","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:json-schema && bun run test:hooks && bun run test:preaccept && bun run test:print-result","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.1.0_1780585777591_0.1772955205530704","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@desplega.ai/claude-bridge","version":"0.1.1","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.1.1","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"24e0050eb71c1c8118df670692ede9b8d76c6059","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.1.1.tgz","fileCount":15,"integrity":"sha512-bVfZM5sWPGJDClToUXx/6+hL6d5wVSgNOdw1FSjspXKBrTJE6A5nKEJPZpXF/mTPAx1Ue7kg1m/nbvoUykGHUA==","signatures":[{"sig":"MEYCIQDVxku0VsIdOsEEiyIx6ssfUM55tcb0u5/3ezZgfxi5oQIhALmdREE/i4wY8g9l909xsiW95ocIoYSIsUNd1mSWR2Qy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100391},"type":"module","engines":{"bun":">=1.1"},"gitHead":"054787ee47374f89bd3a82281ce30bda93338596","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:release-script":"bun ./src/test-release-script.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.1.1_1780589444664_0.03617675085595318","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@desplega.ai/claude-bridge","version":"0.1.2","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.1.2","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"39dc052a640fff7d8435d6d95f2069912b1a4ec6","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.1.2.tgz","fileCount":16,"integrity":"sha512-NemYghs2+ngS2iPk94MKQhh2l0GaWgsftvSWVKJCTX+N4bcAnY9d6vlUHI0UPTjGREQw1F1AkUk/xvPtvo83qQ==","signatures":[{"sig":"MEYCIQCU02yQg+qCtgXME9bkzwlvEN6HD79bBK6qJ5rgS0juBgIhAILd71d8/dD1ctSHlFu7N6615f8/vXhd7QI5lnBt1uOQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104226},"type":"module","engines":{"bun":">=1.1"},"gitHead":"94a41e65be89b684d5d98c5751329b980ec4aa42","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:release-script":"bun ./src/test-release-script.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.1.2_1780590484166_0.13551561582271288","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@desplega.ai/claude-bridge","version":"0.1.3","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.1.3","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"522327171eed2c6b4d0963d8e6f01eb40b67cf78","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.1.3.tgz","fileCount":16,"integrity":"sha512-DRQzy3v2WoAJcKBAEhLySusVdfiSewD2zH1nbXDEl98cID58Y1TlDg05TitA23kgejApuMSxOyLMbiQOjATSPA==","signatures":[{"sig":"MEUCID9TI7mjYAVttwH0iw/GEVr0v+Ow8vBLsEuAt5oYrgSBAiEA6l9YRB3EYIPgZ/Kiq5SFhY6fiDRGlX1IpfJHu4HLgyE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104726},"type":"module","engines":{"bun":">=1.1"},"gitHead":"b274d1e7373183da1c040dfba0a835ef524e9adc","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:release-script":"bun ./src/test-release-script.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.1.3_1780591073291_0.8878442008585592","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@desplega.ai/claude-bridge","version":"0.1.4","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.1.4","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"325da5010cd7be5529e327c8f5937439425f488f","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.1.4.tgz","fileCount":16,"integrity":"sha512-JOW6rx6QfZpCL+jWbyJCiUXc0q2dBlCbDBo12N3grPn87evok0HE22lIx3XwH9wXATVYx15QvHhgtB5pNuvTPQ==","signatures":[{"sig":"MEUCIEW8Zbak87SfvH88Etb52FLEbgTHsOcqzD1bK0bVosnSAiEA0sU2A37OGFGNdoB9QLoP3E2Ndv0bk1zXSorrSX89iMM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107493},"type":"module","engines":{"bun":">=1.1"},"gitHead":"cf246af8bff471029396d66d01a357a8c44241bc","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:release-script":"bun ./src/test-release-script.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.1.4_1780592186805_0.884402695207525","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@desplega.ai/claude-bridge","version":"0.1.5","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.1.5","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"a449246b126735f037c2c959ddc43a1ebb1fe590","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.1.5.tgz","fileCount":16,"integrity":"sha512-bE4bcH2oZGM+lnlEloOkyFqJVWL6m1wUyjrivA4J4D5NRYOKwLIh8PmRiBJ5Xbj6fzU/NZI3crcN9nLFO+Wj6Q==","signatures":[{"sig":"MEUCIQDrSDiFI6Wnk0HP1QD2wklC4IQiiNSAZ6dTOKmgVy/oCQIgMz28GB9AjdGSfrQWvl9lkR5aVU9lUvwVDwhwprFmZBc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108164},"type":"module","engines":{"bun":">=1.1"},"gitHead":"1213aafb19432450765d63ebeeb8872785ade14e","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:release-script":"bun ./src/test-release-script.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.1.5_1780592756310_0.9279080450793029","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@desplega.ai/claude-bridge","version":"0.1.6","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.1.6","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"781a0babc4afb6999c38f31dc4956612e3b3767a","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.1.6.tgz","fileCount":16,"integrity":"sha512-rXaXFaVS/H+kzBQXS7kiU04YIY2yvMALgH2rFPPJkLPAvd80NSTTcIRDTLcuJeWgxbD7vrS1McLy5lIOud1pRA==","signatures":[{"sig":"MEQCIE2MqdmQHWeY0evYDP3xWt8XXXVHaXF+Eaa/p7GU+jnBAiAIfg78a3DipS9Svyy+vjqc1NpwxmTh+Ip/+F3P4j5RGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113762},"type":"module","engines":{"bun":">=1.1"},"gitHead":"e7aec97bd19257c4aad936f97a0b8bd60bf734c9","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:release-script":"bun ./src/test-release-script.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.1.6_1780754075641_0.6632684181181283","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@desplega.ai/claude-bridge","version":"0.1.7","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.1.7","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"0d38383391bf80bb42e06036f5e75571a762f167","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.1.7.tgz","fileCount":16,"integrity":"sha512-9iY4qXMhWQyMIr63K2G/8v4EQ+PO5j726GvQf/l+wO+QQEDPhsebV34AjnyDjyPI7YhLciqb1ST4/1uJi0+ftw==","signatures":[{"sig":"MEYCIQCecg/Su4QbGN6JxCBlTI4FByCmzdr5NNv87wcHCjqAQAIhAN4eANQVhEqln8Dg5q2q94oENsImZwlAerVmqQSpxxa3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113809},"type":"module","engines":{"bun":">=1.1"},"gitHead":"6dc132cb7366a69bcabb7369b71d06f296eb0f01","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:release-script":"bun ./src/test-release-script.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.1.7_1780759409341_0.766268863319121","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@desplega.ai/claude-bridge","version":"0.1.8","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.1.8","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"1878cdd89eef562ee9fff8b1d66d3e93e2a78176","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.1.8.tgz","fileCount":16,"integrity":"sha512-bsrE2Ji0pGwdyN/xz9XzOZjPy/ViDBuCtJNpZlkEFf2Bns/5TcELqLmqyOkxFPkOo68Ha+NidCUl0usr11y9zA==","signatures":[{"sig":"MEQCIHqCZTyj6djtpu3Q7XPtU9XTh5Bl+HUtQFDNuUElHcvDAiA7BnlzKXDglwdXe6ge4DCBb7/RTl7MFtrEAmObcv9pUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115066},"type":"module","engines":{"bun":">=1.1"},"gitHead":"25946969a1db998ad7953577a9826f25ef493e5a","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:release-script":"bun ./src/test-release-script.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.1.8_1780918805460_0.8742591669080066","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@desplega.ai/claude-bridge","version":"0.1.10","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.1.10","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"c7da60453088ce2f5fed43662a5176494fc598a1","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.1.10.tgz","fileCount":16,"integrity":"sha512-rQzap1SxXvQCgphChRhNESToRydqf+iqTP2pwGkSbeCRecG9lKZl6P/ZnV9jxjrXx6+Hb78Zw5lOrd3TuwsVDg==","signatures":[{"sig":"MEUCIQDQk1fpHzI4glJ0LsJPXFHQMSMydNmn/IaZTXmfirt9tAIgGceWxa5qdTa2RkrJb2pwZ54JnqGJ+Px5YSV+OlQJLHI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115591},"type":"module","engines":{"bun":">=1.1"},"gitHead":"5d18404f308dc31840e535e60e0e71b525b1d9ce","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:release-script":"bun ./src/test-release-script.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.1.10_1781094229882_0.384688600547322","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@desplega.ai/claude-bridge","version":"0.1.11","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.1.11","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"bfa8c91d3b65180f5fadccd6cb5bb4bac8951870","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.1.11.tgz","fileCount":16,"integrity":"sha512-X2VvWYsUBvNMJqoxReNoqZEgPdDEDSCwCLnFpoT6JKnZI4NOfDY8EQlQLwMH8lVd1SiyNM6HRH3gMvZXSb0GvA==","signatures":[{"sig":"MEYCIQCsJKl/eygLJbkfoBqopHCdB0IukSkNa6IBxmeepaRLJwIhAJ8VTjXpaLeM9EQ8wxMRYJK6FZBvh2G8smvODRHwdZPm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115785},"type":"module","engines":{"bun":">=1.1"},"gitHead":"12bf407635994573dd0bbdaba2d8d4ba089b2f17","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:release-script":"bun ./src/test-release-script.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.1.11_1781109725369_0.19538478592508213","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@desplega.ai/claude-bridge","version":"0.1.12","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.1.12","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"4061f3891d88ddde25f6ecf4f5d9e947d5b576ac","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.1.12.tgz","fileCount":16,"integrity":"sha512-mXaVvV9jYGa0kxGPUrMAKmvRC+hezBShqMOlc9+KOjkt8SPhtJHZ/lsydf5+13Oe5octGPUnipQZLG8orrCwsA==","signatures":[{"sig":"MEUCIQCaGV67rxuFKJTTSfZfgrmGsRGcn8chWJuR7ZoairX9WwIgUblCdEpgUkf5T13UhWMJCN2Rt5WVhHMI1urpcHP6nIU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117238},"type":"module","engines":{"bun":">=1.1"},"gitHead":"946c518693dfb0cba15427d89c245855bcb0675e","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:release-script":"bun ./src/test-release-script.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.1.12_1781138544814_0.27580589550612045","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@desplega.ai/claude-bridge","version":"0.1.13","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.1.13","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"a22660a0e2f6b0a625837a1c1211340d0773a523","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.1.13.tgz","fileCount":16,"integrity":"sha512-5hdWL2JAQC7X1O+oU3OC+IMLidPyHRrWXVjz4IcmV5AKjsUumd4tAMPBbn3vIcTPVQ9X/EPa3PmPwRtNF4gwiw==","signatures":[{"sig":"MEYCIQCwfFVu5lmJu13Ubr8ERXpePKjYIr1XcH4XBSERmcWufwIhALX68TCzETJB1NnUEBY1Ij0SSltLMx+gFj2QnW2zaGVc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117689},"type":"module","engines":{"bun":">=1.1"},"gitHead":"9ce30f64c4f8d153dd6b942c1ffd5622822fecdd","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:release-script":"bun ./src/test-release-script.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.1.13_1781541130229_0.4506105345475573","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@desplega.ai/claude-bridge","version":"0.2.0","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.2.0","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"23f89c420634ad2f663713c3a5377088144f65d9","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.2.0.tgz","fileCount":18,"integrity":"sha512-JMkoQcuiRNKlxfsrN9Lug4JvBQLkY7bmhgTLzDIkZPZMInbwoV/An0aHdJYsThdnKRheCFByOcOtgJS2YM2t8A==","signatures":[{"sig":"MEUCIQDZ2fT3bcfs1Pppz0Td9EjEfS/SBSQdRQsx/lscWGUSUgIgZ6jKuPdt78isATkU9XJPiUKcR58BwTHeF/vVR7XUMxI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141922},"type":"module","engines":{"bun":">=1.1"},"gitHead":"981cdb03eab4e2952da8b1c47013a05200ce394a","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:claude-compat && bun run test:model-pricing && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:claude-compat":"bun ./src/test-claude-compat.ts","test:model-pricing":"bun ./src/test-model-pricing.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:release-script":"bun ./src/test-release-script.ts","update:model-pricing":"bun ./scripts/update-model-pricing.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.2.0_1781704346834_0.16190435951572368","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@desplega.ai/claude-bridge","version":"0.2.1","keywords":["claude","claude-code","tmux","json-schema","cli"],"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","_id":"@desplega.ai/claude-bridge@0.2.1","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"homepage":"https://github.com/desplega-ai/claude-bridge#readme","bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"bin":{"claude-bridge":"src/cli.ts"},"dist":{"shasum":"e02496e308529a9e637f65dc81968250b3637466","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.2.1.tgz","fileCount":19,"integrity":"sha512-x7oAxqjUOGmqz9xFOhfFFcuvxmaTQyfAQ0nZhxUqQtZe+OtkMTMyBSorPkLVgE26mQ52I2/E9PVwgaOfGXX6Wg==","signatures":[{"sig":"MEYCIQCxLVuxjjzMT2D56SQHmCk88WLJQWFCAScf+bIk3/iCzAIhAOWhgFarXAoJonnRHG4Dg1XL26eof31foYEa8ojW5tUG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151138},"type":"module","engines":{"bun":">=1.1"},"gitHead":"2327472bbea0ee4c64d1f49921afe4119408abbf","scripts":{"test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:claude-compat && bun run test:model-pricing && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script && bun run test:package-files","start":"bun ./src/cli.ts","channel":"bun ./src/mcp-channel.ts","release":"bun ./scripts/release.ts","test:args":"bun ./src/test-args.ts","typecheck":"bun tsc --noEmit","test:hooks":"bun ./src/test-hooks.ts","test:smoke":"bun ./src/test-smoke.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:transcript":"bun ./src/test-transcript.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:print-result":"bun ./src/test-print-result.ts","test:claude-compat":"bun ./src/test-claude-compat.ts","test:model-pricing":"bun ./src/test-model-pricing.ts","test:package-files":"bun ./src/test-package-files.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:release-script":"bun ./src/test-release-script.ts","update:model-pricing":"bun ./scripts/update-model-pricing.ts"},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"repository":{"url":"git+https://github.com/desplega-ai/claude-bridge.git","type":"git"},"_npmVersion":"10.9.8","description":"Bridge Claude Code's interactive session through tmux and transcript output.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/claude-bridge_0.2.1_1781732544284_0.17579642387447447","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@desplega.ai/claude-bridge","version":"0.2.2","description":"Bridge Claude Code's interactive session through tmux and transcript output.","type":"module","license":"MIT","author":{"name":"desplega.sh","email":"contact@desplega.sh"},"maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"repository":{"type":"git","url":"git+https://github.com/desplega-ai/claude-bridge.git"},"bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"homepage":"https://github.com/desplega-ai/claude-bridge#readme","keywords":["claude","claude-code","tmux","json-schema","cli"],"publishConfig":{"access":"public"},"bin":{"claude-bridge":"src/cli.ts"},"scripts":{"start":"bun ./src/cli.ts","ci:live-smoke":"bun ./scripts/ci-live-smoke.ts","release":"bun ./scripts/release.ts","channel":"bun ./src/mcp-channel.ts","test:smoke":"bun ./src/test-smoke.ts","test:args":"bun ./src/test-args.ts","test:auth-env":"bun ./src/test-auth-env.ts","test:hooks":"bun ./src/test-hooks.ts","test:json-schema":"bun ./src/test-json-schema.ts","test:launch-command":"bun ./src/test-launch-command.ts","test:claude-compat":"bun ./src/test-claude-compat.ts","test:model-pricing":"bun ./src/test-model-pricing.ts","update:model-pricing":"bun ./scripts/update-model-pricing.ts","test:preaccept":"bun ./src/test-preaccept.ts","test:print-result":"bun ./src/test-print-result.ts","test:release-script":"bun ./src/test-release-script.ts","test:package-files":"bun ./src/test-package-files.ts","test:transcript":"bun ./src/test-transcript.ts","test":"bun run test:smoke && bun run test:transcript && bun run test:args && bun run test:auth-env && bun run test:json-schema && bun run test:launch-command && bun run test:claude-compat && bun run test:model-pricing && bun run test:hooks && bun run test:preaccept && bun run test:print-result && bun run test:release-script && bun run test:package-files","typecheck":"bun tsc --noEmit"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.4","zod":"^4.4.3"},"devDependencies":{"@types/bun":"latest","@types/node":"^22.0.0","typescript":"^5.6.0"},"engines":{"bun":">=1.1"},"_id":"@desplega.ai/claude-bridge@0.2.2","gitHead":"c93215166ee0c504f4f0c58fdd5c02b864f274fb","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-5pSdq367GlMR6QpgfJvPodteulr5KHrT2DnHqefnlAZqSNiv+gg+NAgfOpOz6LUy1Oa82hzxIQSoAkvsFdqGEw==","shasum":"f06e8065d5501c9f931c892b179f9c87e59c0bef","tarball":"https://registry.npmjs.org/@desplega.ai/claude-bridge/-/claude-bridge-0.2.2.tgz","fileCount":19,"unpackedSize":152004,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCsGHTwlRbujU8l8B8qS78DB5KdeThVqr/X2RnTpIF5eQIhAJ0vadyEHDlHCP6QqdBEuYhTpZ053pCVSdKnVGjfxhUw"}]},"_npmUser":{"name":"tarasyarema","email":"tarasyarema@pm.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/claude-bridge_0.2.2_1781791550985_0.25618215002242106"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-04T15:09:37.365Z","modified":"2026-06-18T14:05:51.317Z","0.1.0":"2026-06-04T15:09:37.741Z","0.1.1":"2026-06-04T16:10:44.824Z","0.1.2":"2026-06-04T16:28:04.322Z","0.1.3":"2026-06-04T16:37:53.497Z","0.1.4":"2026-06-04T16:56:26.953Z","0.1.5":"2026-06-04T17:05:56.458Z","0.1.6":"2026-06-06T13:54:35.788Z","0.1.7":"2026-06-06T15:23:29.479Z","0.1.8":"2026-06-08T11:40:05.601Z","0.1.10":"2026-06-10T12:23:50.000Z","0.1.11":"2026-06-10T16:42:05.502Z","0.1.12":"2026-06-11T00:42:24.955Z","0.1.13":"2026-06-15T16:32:10.367Z","0.2.0":"2026-06-17T13:52:26.966Z","0.2.1":"2026-06-17T21:42:24.415Z","0.2.2":"2026-06-18T14:05:51.160Z"},"bugs":{"url":"https://github.com/desplega-ai/claude-bridge/issues"},"author":{"name":"desplega.sh","email":"contact@desplega.sh"},"license":"MIT","homepage":"https://github.com/desplega-ai/claude-bridge#readme","keywords":["claude","claude-code","tmux","json-schema","cli"],"repository":{"type":"git","url":"git+https://github.com/desplega-ai/claude-bridge.git"},"description":"Bridge Claude Code's interactive session through tmux and transcript output.","maintainers":[{"name":"tarasyarema","email":"tarasyarema@pm.me"},{"name":"3z3","email":"ezequiel.cura@gmail.com"}],"readme":"# claude-bridge\n\n`claude-bridge` is a bridge-owned replacement for common `claude -p`\nautomation.\n\nInstead of delegating to raw `claude -p`, it starts normal interactive Claude\nCode inside a detached [tmux](https://github.com/tmux/tmux) pane, sends your\nprompt through tmux, waits for Claude Code's `Stop` hook, reads the hook's\n`last_assistant_message` and `transcript_path`, formats the reply, and exits at\nturn end.\n\nThat keeps prompt dispatch, transcript capture, `--output-format`, JSON schema\nvalidation, and process exit behavior inside the bridge without ever invoking\nClaude Code's non-interactive runtime.\n\n```sh\n# Raw Claude Code print mode\nclaude -p \"say hi\" --output-format json\n\n# Bridge-owned replacement\nbunx @desplega.ai/claude-bridge -p \"say hi\" --output-format json\n```\n\nThe rich transcript source is the same JSONL file Claude writes under\n`~/.claude/projects/<slug>/<session-uuid>.jsonl`. In print mode the `Stop` hook\nhands the bridge that path together with the final assistant message. Outside\nprint mode, piped consumers get bridge envelopes and TTY users get a compact\nreadable view while the bridge tails the transcript for interactive display.\n\nThe orchestrator also pre-clears the prompts that would otherwise block\nClaude's UI:\n\n  - Claude's global config is edited so\n    `projects[<workdir>].hasTrustDialogAccepted` and\n    `hasCompletedProjectOnboarding` are set. This is `~/.claude.json` by\n    default, or `$CLAUDE_CONFIG_DIR/.claude.json` when `CLAUDE_CONFIG_DIR` is\n    set. The previous file is backed up alongside it as\n    `.claude.json.claude-bridge-backup`.\n  - A per-workdir `.claude/settings.local.json` sets\n    `defaultMode: \"bypassPermissions\"` and\n    `skipDangerousModePermissionPrompt: true`.\n  - `claude` is launched with `--dangerously-skip-permissions`.\n  - Theme/security startup prompts are auto-accepted by watching\n    `tmux capture-pane` for marker text and sending `Enter`. With\n    `--desplega-local-auth`, the custom API key confirmation prompt is also\n    auto-accepted. Login-method selection is deliberately not auto-accepted.\n\n```\n+--------------------+\n| claude-bridge      |\n|  - tmux paste      |\n|  - Stop hook wait  |\n+----------+---------+\n           |\n           | tmux paste-buffer + Enter\n           v\n    +------+-----------------------------+\n    |  tmux session  claude-bridge-<id>  |\n    |   pane 0: claude --dangerously-... |\n    +------------------------------------+\n```\n\n## Billing Invariant\n\n**`claude -p`, Agent SDK, and headless `--output-format stream-json` MUST NEVER\nbe used in the bridge.** This is a hard invariant, not a guideline.\n\nClaude Code distinguishes interactive subscription-billed usage from\nnon-interactive programmatic-credit-billed usage via an `isInteractive` flag\ncomputed as:\n\n```txt\nisInteractive = !(hasPrint || hasInitOnly || hasSdkUrl || !stdout.isTTY)\n```\n\nAny of these triggers set `isInteractive=false`, which bills against the\nseparate programmatic credit instead of the subscription:\n\n- The `-p`/`--print` flag.\n- `stdout` not being a TTY, including piped or redirected headless runs.\n- The `--init-only` flag.\n- The `--sdk-url` flag used by Agent SDK mode.\n\nThe bridge stays on subscription billing by spawning Claude as a real\ninteractive TUI session inside a tmux pty: no `-p`, no Agent SDK, no headless\n`stream-json`, and stdout remains a TTY. Output formats are bridge-owned views\nover that one interactive path.\n\n## Requirements\n\n- [Bun](https://bun.sh) (`>= 1.1`)\n- `claude` CLI on PATH, version `>= 2.1.80`\n- `tmux` on PATH.\n- Claude Code authenticated for the spawned `claude` process.\n\n## Use From npm\n\nRun without installing:\n\n```sh\n# Drop-in print-mode usage.\nbunx @desplega.ai/claude-bridge -p \"say hi\"\nbunx @desplega.ai/claude-bridge -p \"say hi\" --output-format json\nbunx @desplega.ai/claude-bridge -p \"say hi\" --output-format stream-json\n\n# Opt in to Desplega/bridge envelopes for bridge-specific consumers.\nbunx @desplega.ai/claude-bridge -p \"say hi\" --output-format stream-json --desplega-format\n```\n\nInstall globally with Bun:\n\n```sh\nbun install -g @desplega.ai/claude-bridge\nclaude-bridge -p \"say hi\"\nclaude-bridge --help\n```\n\nInstall globally with npm:\n\n```sh\nnpm install -g @desplega.ai/claude-bridge\nclaude-bridge -p \"say hi\"\n```\n\nThe installed command is `claude-bridge`. Bun is still required at runtime\nbecause the published bin uses `#!/usr/bin/env bun`.\n\n## Print Mode\n\n```sh\nclaude-bridge -p \"say hi\"\nclaude-bridge -p \"say hi\" --model sonnet\nclaude-bridge -p \"say hi\" --output-format json\nclaude-bridge -p \"say hi\" --output-format stream-json\nprintf 'say hi\\n' | claude-bridge --print\n```\n\nPrint mode is intended for shell automation that would otherwise call\n`claude -p`:\n\n```sh\nclaude -p \"say hi\" --output-format json\nclaude-bridge -p \"say hi\" --output-format json\n\nclaude -p \"say hi\" --output-format stream-json\nclaude-bridge -p \"say hi\" --output-format stream-json\n```\n\nThis is intended as a drop-in replacement for common `claude -p` automation.\nIn print mode the wrapper starts an interactive Claude session in tmux, waits\nfor the pane to become ready, sends the prompt through tmux, prints the\nrequested format, then kills the tmux session.\n\nBy default, print-mode stdout is reserved for the requested Claude-compatible\noutput. Bridge envelopes and bridge debug events are not written to stdout in\n`json` or `stream-json` mode unless you explicitly pass `--desplega-format`.\n\n## Auth\n\n`claude-bridge` does not call the Anthropic API itself. It launches the local\n`claude` CLI and relies on whatever authentication that `claude` process can\nuse.\n\nFor local interactive machines, first make sure interactive `claude` works:\n\n```sh\nclaude auth status\nclaude\n```\n\nThen run the bridge:\n\n```sh\nclaude-bridge -p \"say hi\"\n```\n\nFor headless CI, use the long-lived Claude Code OAuth token from:\n\n```sh\nclaude setup-token\n```\n\nSet it exactly as printed:\n\n```sh\nexport CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat01-...\nclaude-bridge -p \"say hi\" --output-format json\n```\n\nBy default, the spawned Claude process receives `HOME`, `CLAUDE_CONFIG_DIR`,\nand `CLAUDE_CODE_OAUTH_TOKEN`; Anthropic provider env vars such as\n`ANTHROPIC_API_KEY` and `ANTHROPIC_AUTH_TOKEN` are cleared so the bridge does\nnot accidentally test a different auth path.\n\nUse `--desplega-local-auth` when you intentionally want the spawned Claude\nprocess to receive local auth-related env vars. If Claude shows the custom API\nkey confirmation prompt, this mode selects the API-key path:\n\n```sh\nANTHROPIC_API_KEY=... claude-bridge --desplega-local-auth -p \"say hi\"\n```\n\nIf Claude shows a browser login or login-method selector, the bridge will not\nauto-select it. Run `claude auth status`, run `claude setup-token`, or attach\nto the tmux pane shown in the banner and complete the prompt manually.\n\n## Output Formats\n\n`-p`/`--print` requires a prompt argument or piped stdin. `--output-format`\nrequires print mode and accepts `text`, `json`, or `stream-json`; the default is\n`text`. `--json-schema` is also print-only.\n\nCompatibility mode is the default. If you are replacing `claude -p` in scripts,\ndo not pass `--desplega-format`.\n\nThe final result comes from Claude Code's interactive `Stop` hook. The hook\nprovides both `last_assistant_message` and `transcript_path`; the bridge uses\nthe assistant message as the fast path and hydrates transcript metadata from\nthe JSONL file.\n\n- `text`: prints only the final answer text plus a trailing newline. Wrapper\n  errors go to stderr and exit non-zero.\n- `json`: prints one final Claude-compatible JSON result object with the\n  answer in `result`, plus available metadata: `session_id`, `duration_ms`,\n  `stop_reason`, `usage`, and a `total_cost_usd` recomputed from token usage and\n  models.dev pricing.\n- `stream-json`: emits the same event stream as Claude Code's headless\n  `claude -p --output-format stream-json` — a `system`/`init` event, `assistant`\n  events, `user` events for tool results, and a terminal `result` event — by\n  reshaping the live interactive transcript into that schema. Interactive-only\n  rows (`mode`, `permission-mode`, `attachment`, `ai-title`, `stop_hook_summary`,\n  `turn_duration`) are dropped and wrapper fields are remapped (`sessionId` →\n  `session_id`, `requestId` → `request_id`, etc.). `total_cost_usd` and\n  `modelUsage` are recomputed from token usage and models.dev pricing (see\n  `scripts/update-model-pricing.ts`) and match the headless cost to the cent.\n  Rate-limit / overloaded / retry rows (`system/api_error`) and safety\n  `model_refusal_fallback` rows are surfaced — a superset of headless, which\n  retries silently. Failed turns emit a headless-shaped\n  `subtype:\"error_during_execution\"` result. Fields only the headless API client\n  can produce (`ttft_ms`, `duration_api_ms`) are emitted as `null`, and the\n  `init` tool/mcp/agent inventory is empty placeholders, because the bridge\n  drives the interactive TUI and never sees them. Full field-level contract in\n  [docs/stream-json-compat.md](docs/stream-json-compat.md). The bridge learns\n  `transcript_path` from early runtime hook events and falls back to transcript\n  discovery / Stop-time catch-up if needed. It does not invoke Claude Code's\n  headless `--output-format stream-json`.\n\nUse `--desplega-format` when you want the older bridge-owned JSON envelopes in\n`json` or `stream-json` modes. This flag is for bridge-specific consumers, not\ndrop-in `claude -p` replacement scripts:\n\n```sh\nclaude-bridge -p \"say hi\" --output-format stream-json --desplega-format\n```\n\nWith `--desplega-format`, `json` includes bridge debug metadata when\n`--desplega-verbose` is set, and `stream-json` prints newline-delimited bridge\nevents as the run progresses, then a final `result` event. This is a custom\n`claude-bridge` event stream, not Claude's native headless `stream-json` schema.\n\nTypical `--desplega-format --output-format stream-json` event types are:\n\n```jsonc\n{\"type\":\"push\",\"id\":\"ab12cd34\",\"content\":\"say hi\"}\n{\"type\":\"transcript_folder\",\"path\":\"/Users/.../.claude/projects/...\"}\n{\"type\":\"transcript_open\",\"path\":\"/Users/.../<uuid>.jsonl\",\"session_id\":\"...\"}\n{\"type\":\"transcript\",\"row\":{\"type\":\"assistant\",\"message\":{...}}}\n{\"type\":\"result\",\"subtype\":\"success\",\"is_error\":false,\"result\":\"Hi.\",\"session_id\":\"...\"}\n```\n\nThese custom `transcript` events only exist with `--desplega-format`. In the\ndefault compatibility mode, `stream-json` emits the claude -p event schema\n(`system`/`init`, `assistant`, `user`, terminal `result`) synthesized from the\nlive transcript as rows are appended — not the raw interactive rows — and never\nemits bridge-owned `delta`/`final` rows.\n\nThe compatibility is structural, not byte-identical: some headless-only fields\nare synthesized, approximated, or omitted. See\n[docs/stream-json-compat.md](docs/stream-json-compat.md) for the field-level\ncontract and the bridge / Claude Code / models.dev version pins it was verified\nagainst.\n\n## Structured JSON\n\n`--json-schema <schema|file>` is bridge-owned. It is not forwarded to raw\n`claude -p`; the wrapper keeps the normal interactive tmux path, injects\nschema guidance with `--append-system-prompt`, extracts the last JSON value\nfrom the final assistant text, and validates it locally with Zod.\n\nExisting user-provided `--append-system-prompt` values are preserved. When a\nschema is present, the wrapper merges those prompts with its schema instruction\ninstead of replacing them.\n\nSchema print mode also installs a global Claude Code `Stop` hook in\n`~/.claude/settings.json`. The hook is inert outside `claude-bridge` schema\nruns; during a schema run it checks the final assistant text before Claude\nstops and blocks the stop if it does not validate. That gives Claude a bounded\nnumber of extra turns to answer with valid JSON before the wrapper exits.\n\nControl that hook explicitly with:\n\n```sh\nclaude-bridge --desplega-install\nclaude-bridge --desplega-uninstall\n```\n\nInstall is append-only and idempotent: unrelated hooks are preserved, and stale\nold `claude-bridge` hook commands are replaced with the current command.\n\nThe schema argument may be inline JSON or a path to a JSON file:\n\n```sh\nclaude-bridge -p \"Return the repo name\" \\\n  --json-schema '{\"type\":\"object\",\"required\":[\"name\"],\"properties\":{\"name\":{\"type\":\"string\"}}}' \\\n  --output-format json\n\nclaude-bridge -p \"Return the repo name\" \\\n  --json-schema ./schema.json \\\n  --output-format text\n```\n\nExtraction is intentionally simple and deterministic:\n\n1. Try the whole reply as JSON.\n2. Otherwise use the last fenced `json` block.\n3. Otherwise use the final balanced JSON object or array in the reply.\n\nValidation uses Zod's `z.fromJSONSchema()` converter. That API is still marked\nexperimental by Zod, but it keeps the bridge aligned with Zod's JSON Schema\nsupport instead of maintaining a handwritten validator here. If Zod cannot\nconvert the schema, the wrapper treats that as a print-mode error.\n\nWith `--output-format text`, successful schema mode prints the extracted JSON\nvalue as compact JSON. With `--output-format json`, the final result includes\n`structured_output` alongside the original reply text in `result`. With\n`--desplega-format`, bridge JSON results also include\n`structured_output_source`.\n\nIf schema extraction or validation fails after Claude replies, `json` and\n`stream-json` error results include `raw_response` with the unmodified Claude\nreply. In `text` mode the same raw reply is printed to stderr under\n`Raw Claude reply:`.\n\nThe compact stringified schema is capped before Claude starts. The default cap\nis roughly `15000` tokens, estimated as `ceil(chars / 4)`. Configure it with:\n\n```sh\nCLAUDE_BRIDGE_JSON_SCHEMA_MAX_TOKENS=30000 claude-bridge -p \"...\" --json-schema schema.json\nclaude-bridge -p \"...\" --json-schema schema.json --desplega-json-schema-max-tokens=30000\n```\n\n## Wrapper-owned vs forwarded\n\nThe wrapper owns these options and does not forward them to Claude:\n\n- `-p`/`--print`, `--output-format`, and `--json-schema`\n- `--desplega-verbose`, `--desplega-local-auth`, and other\n  `--desplega-<name>[=<value>]` flags\n- `--claude-help`\n- `-h`/`--help`\n- `-v`/`--version`\n\nMost interactive `claude -h` options pass through to the spawned Claude session,\nfor example `--model sonnet`, `--permission-mode acceptEdits`, `--append-system-prompt`,\nor `--allowed-tools`. The wrapper always prepends its own launch flags:\n`--dangerously-skip-permissions`.\n\nThe initial prompt is wrapper-owned too. It is not passed to Claude as a CLI\nargument; once the pane is ready, the wrapper sends it through tmux. In\nnon-print mode, stdin remains a small REPL that sends each entered line through\nthe same tmux/transcript bridge.\n\nClaude subcommands are intentionally blocked; run `claude <cmd>` directly for\ncommands such as `doctor`, `mcp`, `plugin`, `update`, `agents`, or `auth`.\nClaude modes that conflict with the bridge or the billing invariant are also\nblocked: `--tmux`, `--replay-user-messages`/`--replay*`, `-w`/`--worktree`,\n`--init-only`, and `--sdk-url`.\n\nUse `--claude-help` to see raw Claude help, with the caveat that wrapper-owned\nmodes behave as described here. Use `-v`/`--version` to print the wrapper\npackage version, the full `claude` path from `which claude`, and the\n`claude -v` output.\n\nUse `--desplega-verbose` for extra wrapper debug output and raw transcript\nrows. Other `--desplega-<name>[=<value>]` flags are reserved for future wrapper\nfeatures and are not forwarded to Claude.\n\n## Interactive Mode\n\nThe CLI prints a banner with the tmux session name and run state path:\n\n```\n   tmux session : claude-bridge-2026abcd\n   cwd          : /path/to/current/project\n   run state    : /path/to/current/project/.claude-bridge/runs/2026-05-15T.../\n\n   attach to the Claude UI in another terminal:\n     tmux attach -t claude-bridge-2026abcd\n\n   Type a message + Enter on stdin to send it to Claude.\n   Assistant and useful transcript rows print below.\n   Use --desplega-verbose for raw transcript rows and wrapper debug.\n   Ctrl-D to quit (kills the tmux session).\n\n>\n```\n\nWhen stdout is a TTY, the orchestrator pretty-prints a human-friendly feed:\n\n```\n14:02:17 transcript /Users/taras/.claude/projects/.../<uuid>.jsonl\n14:02:21 → push     id=a1b2c3 what files exist?\n14:02:22 user       what files exist?\n14:02:22 assistant  Let me check.\n                    [tool_use Bash {\"command\":\"ls\"}]\n14:02:23 user       [tool_result] file.txt\\n.gitignore\n14:02:23 assistant  I found two files: file.txt and .gitignore.\n14:02:23 system     turn_duration=2345ms\n```\n\nBy default, TTY output hides raw transcript metadata and only shows useful\nhuman-friendly rows. `--desplega-verbose` adds wrapper debug output and the\nverbatim JSONL row dimmed below each friendly transcript summary.\n\n```sh\nclaude-bridge --desplega-verbose             # friendly rows plus raw rows\n```\n\nThe orchestrator shows a `> ` prompt for stdin and redraws it after every\noutput line, so you always know where you can type.\n\nAttach the live Claude UI in another terminal if you want to see what Claude\nis doing:\n\n```sh\ntmux attach -t claude-bridge-2026abcd\n```\n\nThe orchestrator pre-accepts trust and dangerous-mode prompts, and watches for\ntheme/security prompts. You shouldn't need to touch the pane unless Claude asks\nfor login selection or authentication.\n\nNow type in the orchestrator window:\n\n```\nwhat's in the current directory?\n```\n\nStdout will show, in order: the `push` envelope, a stream of `transcript`\nenvelopes as Claude works (each row is whatever Claude wrote to the JSONL —\nuser, assistant, tool_use, tool_result, system, etc.):\n\n```jsonc\n{\"type\":\"push\",\"id\":\"ab12cd34\",\"content\":\"what's in the current directory?\"}\n{\"type\":\"transcript_open\",\"path\":\"/Users/.../<uuid>.jsonl\",\"session_id\":\"...\"}\n{\"type\":\"transcript\",\"row\":{\"type\":\"user\",\"message\":{...}}}\n{\"type\":\"transcript\",\"row\":{\"type\":\"assistant\",\"message\":{...}}}\n{\"type\":\"transcript\",\"row\":{\"type\":\"tool_use\",\"name\":\"Bash\",\"input\":{...}}}\n{\"type\":\"transcript\",\"row\":{\"type\":\"tool_result\",\"output\":\"...\"}}\n```\n\nCtrl-D on the orchestrator kills the tmux session and exits.\n\n## Contributing and CI\n\nInstall local dependencies:\n\n```sh\nbun install\n```\n\nRun the CLI from the repo:\n\n```sh\nbun ./src/cli.ts -p \"say hi\"\nbun ./src/cli.ts -p \"say hi\" --output-format json\nbun ./src/cli.ts --help\n```\n\nRun deterministic tests:\n\n```sh\nbun run test\nbun run typecheck\n```\n\nThe smallest hermetic smoke test does not require tmux or Claude:\n\nA hermetic test stands up the Unix socket, spawns `mcp-channel.ts` as a stdio\nMCP subprocess, drives it through `initialize` / `tools/list` / `tools/call`,\nand asserts that push envelopes become channel notifications and that reply\ntool calls produce reply envelopes back on the socket:\n\n```sh\nbun run test:smoke\n```\n\nExpected: 13 PASS lines and `result: PASS`.\n\n`.github/workflows/ci.yml` runs deterministic tests and typechecking on pushes\nand pull requests.\n\nThe workflow also has a gated live smoke job. If the GitHub Actions environment\nhas `CLAUDE_CODE_OAUTH_TOKEN` available, it installs `tmux` and Claude Code,\nnormalizes that token into the job environment, and then runs a matrix across:\n\n- `--output-format text`\n- `--output-format json`\n- `--output-format stream-json`\n- schema mode enabled and disabled\n\nIf the secret is not available, the live smoke is skipped while the\ndeterministic job still runs. Use the `CLAUDE_CODE_OAUTH_TOKEN` path exactly as\n`claude setup-token` prints it; do not remap it to `ANTHROPIC_AUTH_TOKEN`.\nThe smoke command clears inherited `ANTHROPIC_*` variables so unrelated\nprovider headers or API-key configuration cannot change the auth path under\ntest.\n\nThe workflow uses a reusable script that can be run locally:\n\n```sh\nCLAUDE_BRIDGE_SMOKE_OUTPUT_FORMAT=json \\\nCLAUDE_BRIDGE_SMOKE_SCHEMA=true \\\nbun run ci:live-smoke\n```\n\nTo run that script with local auth env vars instead of the CI OAuth-token path:\n\n```sh\nCLAUDE_BRIDGE_SMOKE_LOCAL_AUTH=true \\\nCLAUDE_BRIDGE_SMOKE_OUTPUT_FORMAT=json \\\nbun run ci:live-smoke\n```\n\n## Release\n\nThe npm package is `@desplega.ai/claude-bridge`.\n\nSee [docs/releasing.md](docs/releasing.md) for the full release runbook.\n\nReleases are automated from `master`: when `package.json`'s `version` changes,\n`.github/workflows/release.yml` validates the package, publishes the public npm\npackage with `NPM_TOKEN`, creates the `vX.Y.Z` git tag, and creates a GitHub\nRelease.\n\nPrepare a release on a branch:\n\n```sh\nnpm version --no-git-tag-version patch\nbun install\ngit add package.json bun.lock\n```\n\nThe package tarball is intentionally allowlisted in `package.json`. Keep tests,\nCI scripts, `.github`, `AGENTS.md`, and `CLAUDE.md` out of the public npm\npackage.\n\n## Future Notes\n\nStructured output should stay bridge-native. Future AI SDK integration can be a\nrepair or fallback layer after the transcript result, not a replacement for the\nbridge-owned turn. Plausible provider knobs are\n`--desplega-structured-provider=anthropic|openai|google|openrouter` with the\nusual `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GOOGLE_GENERATIVE_AI_API_KEY` /\n`GEMINI_API_KEY`, or `OPENROUTER_API_KEY` env vars. That mode would validate\nthe transcript result first, then optionally ask a provider to repair invalid\nJSON into the schema.\n\nRemote/SSH support should also keep the bridge boundary. The likely shape is a\ntransport abstraction (`tmux` today, HTTP MCP later) plus a tunnel abstraction\n(`none`, Tailscale Serve/Funnel, SSH reverse tunnel, cloudflared, ngrok). For a\nremote Claude session, the remote host still needs `claude`, `tmux`, Bun, and\nthe bridge entrypoint. Tunnels only expose/connect the transport; they do not\nremove the need for a Claude Code process on the remote host. Public tunnels\nsuch as Tailscale Funnel must require a per-run bearer token and should default\nto localhost binding unless explicitly exposed.\n\n## Layout\n\n- `src/cli.ts` — orchestrator (tmux launcher + stdin REPL + hook/transcript result handling).\n- `src/auth-env.ts` — auth environment forwarding and local-auth handling.\n- `src/mcp-channel.ts` — optional channel MCP kept for hermetic protocol tests\n  and future transport experiments.\n- `src/bridge.ts` — newline-delimited JSON framing for the optional channel MCP.\n- `src/transcript.ts` — Shannon-style transcript discovery + poll-and-tail.\n- `src/preaccept.ts` — pre-writes Claude's global trust entry +\n  `.claude/settings.local.json` to suppress trust and permission prompts.\n- `src/hook-install.ts` and `src/stop-hook.ts` — install and execute the\n  runtime Stop/MessageDisplay hooks and the schema validation Stop hook.\n- Each run writes its run state and schema copy under\n  `.claude-bridge/runs/<id>/` in the target cwd.\n\n## Optional channel protocol\n\nThe default CLI path does not depend on Claude Code Channels. The channel MCP is\nstill present as an optional experimental transport. Its envelopes are JSON,\nnewline-delimited:\n\n```ts\ntype Envelope =\n  | { kind: \"hello\"; pid: number; channel: string }                       // mcp -> orchestrator on connect\n  | { kind: \"push\"; id: string; content: string; meta?: Record<string,string> } // orchestrator -> mcp\n  | { kind: \"reply\"; chat_id: string; text: string };                     // mcp -> orchestrator\n```\n\n`push` becomes a `notifications/claude/channel` event for Claude; the `id`\ntravels in `meta.id`, so Claude sees:\n\n```\n<channel source=\"bridge\" id=\"ab12cd34\">what's in the current directory?</channel>\n```\n\nThe channel's `instructions` tell Claude to call `reply` with `chat_id` set to\nthat same id so the orchestrator can correlate replies.\n\n## Notes / known limitations\n\n- This is a single-pane POC. A real version would multiplex multiple sessions\n  per orchestrator and persist transcripts.\n- This wrapper deliberately blocks Claude subcommands and bridge-conflicting\n  modes: `--tmux`, `-w`/`--worktree`, and\n  `--replay-user-messages`/`--replay*`. Run `claude <cmd>` or raw `claude`\n  directly for those modes.\n- The auto-acceptor for startup prompts is a regex over `tmux capture-pane`. If\n  Claude's prompt copy changes the heuristic may miss it; you can still attach\n  to the pane and press `Enter` yourself.\n- Permission prompts and tool approvals are pre-bypassed via\n  `--dangerously-skip-permissions`. **This effectively runs Claude in\n  auto-execute mode against the target cwd.** By default that is the current\n  directory; use `--desplega-cwd <path>` when you need to point the run\n  somewhere else, and do not point this at sensitive paths.\n- To relay permission prompts off the pane instead of bypassing them, a future\n  transport can either parse the transcript/pane or revive the optional channel\n  path with `experimental['claude/channel/permission']`.\n","readmeFilename":"README.md"}