{"_id":"@3xhaust/codexrelay","_rev":"8-c5d41cfc9b81ad84ac6f959c629ba07c","name":"@3xhaust/codexrelay","dist-tags":{"next":"0.1.0-rc.1","latest":"0.4.2"},"versions":{"0.1.0-rc.1":{"name":"@3xhaust/codexrelay","version":"0.1.0-rc.1","license":"MIT","_id":"@3xhaust/codexrelay@0.1.0-rc.1","maintainers":[{"name":"3xhaust","email":"me@3xhaust.dev"}],"homepage":"https://github.com/3x-haust/CodexRelay#readme","bugs":{"url":"https://github.com/3x-haust/CodexRelay/issues"},"bin":{"codexrelay":"npm/bin/codexrelay.cjs"},"dist":{"shasum":"f9bb3260830c11bcec046f4af896c58e6b60611a","tarball":"https://registry.npmjs.org/@3xhaust/codexrelay/-/codexrelay-0.1.0-rc.1.tgz","fileCount":12,"integrity":"sha512-QHJyxXNZWr119/qrWVqz+AqKP6d33FOfaKMC4VeCRPi5miDjY81R0w5di/bqncCTgZr+l5LFn4KtFAvbVAPLmg==","signatures":[{"sig":"MEUCIFOzm84bnqa0VIz70NvbfqZn3sgrbR4WmkVxyD/ncjFZAiEAy6GQDVUhm0OTISkHcFiDQgTwbAy4v1imlFtahKi8Om4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19403820},"_from":"file:dist/codexrelay-0.1.0-rc.1.tgz","engines":{"node":">=20"},"scripts":{"test":"node --test npm/test/*.test.cjs","release:pack":"node npm/scripts/package-release.cjs","test:install":"node npm/scripts/smoke-install.cjs"},"_npmUser":{"name":"3xhaust","email":"me@3xhaust.dev"},"_resolved":"/Users/lyu/01_Project/01_Projects/CodexRelay/dist/codexrelay-0.1.0-rc.1.tgz","_integrity":"sha512-QHJyxXNZWr119/qrWVqz+AqKP6d33FOfaKMC4VeCRPi5miDjY81R0w5di/bqncCTgZr+l5LFn4KtFAvbVAPLmg==","repository":{"url":"git+https://github.com/3x-haust/CodexRelay.git","type":"git"},"_npmVersion":"11.6.1","description":"Move Codex sessions and project changes between computers without SSH.","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/codexrelay_0.1.0-rc.1_1788842616603_0.5759716903930463","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@3xhaust/codexrelay","version":"0.1.0","license":"MIT","_id":"@3xhaust/codexrelay@0.1.0","maintainers":[{"name":"3xhaust","email":"me@3xhaust.dev"}],"homepage":"https://github.com/3x-haust/CodexRelay#readme","bugs":{"url":"https://github.com/3x-haust/CodexRelay/issues"},"bin":{"codexrelay":"npm/bin/codexrelay.cjs"},"dist":{"shasum":"027e46b39d073008da10456aa0c921667a6778d0","tarball":"https://registry.npmjs.org/@3xhaust/codexrelay/-/codexrelay-0.1.0.tgz","fileCount":12,"integrity":"sha512-N3quqqBxRx0P8zxg2/XU4yW+Q6o+2hxsM3HhwQZNDsL384T9yW8//N8prvLFLGHKvkDQJJfv+4F9ljyASa1h0w==","signatures":[{"sig":"MEUCIAcpTx1tcplLHNVFCeuSUfM2GhZn+3QuqrCImYlR7+tTAiEAgckdOzYjdR1+TKhNQO29+6EBlWX5pGi4t0jKHwxIoIQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3xhaust%2fcodexrelay@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19067795},"_from":"file:dist/codexrelay-0.1.0.tgz","engines":{"node":">=20"},"scripts":{"test":"node --test npm/test/*.test.cjs","release:pack":"node npm/scripts/package-release.cjs","test:install":"node npm/scripts/smoke-install.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6a74bc9-46cc-46bd-b89d-f1fae92bf359"}},"_resolved":"/home/runner/work/CodexRelay/CodexRelay/dist/codexrelay-0.1.0.tgz","_integrity":"sha512-N3quqqBxRx0P8zxg2/XU4yW+Q6o+2hxsM3HhwQZNDsL384T9yW8//N8prvLFLGHKvkDQJJfv+4F9ljyASa1h0w==","repository":{"url":"git+https://github.com/3x-haust/CodexRelay.git","type":"git"},"_npmVersion":"11.19.0","description":"Move Codex sessions and project changes between computers without SSH.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/codexrelay_0.1.0_1788842987753_0.49791025773459596","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@3xhaust/codexrelay","version":"0.1.1","license":"MIT","_id":"@3xhaust/codexrelay@0.1.1","maintainers":[{"name":"3xhaust","email":"me@3xhaust.dev"}],"homepage":"https://github.com/3x-haust/CodexRelay#readme","bugs":{"url":"https://github.com/3x-haust/CodexRelay/issues"},"bin":{"codexrelay":"npm/bin/codexrelay.cjs"},"dist":{"shasum":"3ec263bf94054076c80719dee3f3871afc4e8977","tarball":"https://registry.npmjs.org/@3xhaust/codexrelay/-/codexrelay-0.1.1.tgz","fileCount":12,"integrity":"sha512-eOr3a0+B1cis9cVpIBvNPYzudF2WMt//a6ZTaXTRmqnZO9KfL/R4EJS0Vic2UWqxUNEX3r4usK3SkpGEzl25mQ==","signatures":[{"sig":"MEUCIQCbi8dcRdlv9hUj6Wl/lK6DaFe2rJdEOpp0YWUyc4zx/gIgaq0NPXkkLJLxsVovgptVg5jx8miQS2lhaJUU43AeqY4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3xhaust%2fcodexrelay@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19136128},"_from":"file:dist/codexrelay-0.1.1.tgz","engines":{"node":">=20"},"scripts":{"test":"node --test npm/test/*.test.cjs","release:pack":"node npm/scripts/package-release.cjs","test:install":"node npm/scripts/smoke-install.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6a74bc9-46cc-46bd-b89d-f1fae92bf359"}},"_resolved":"/home/runner/work/CodexRelay/CodexRelay/dist/codexrelay-0.1.1.tgz","_integrity":"sha512-eOr3a0+B1cis9cVpIBvNPYzudF2WMt//a6ZTaXTRmqnZO9KfL/R4EJS0Vic2UWqxUNEX3r4usK3SkpGEzl25mQ==","repository":{"url":"git+https://github.com/3x-haust/CodexRelay.git","type":"git"},"_npmVersion":"11.19.0","description":"Move Codex sessions and project changes between computers without SSH.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/codexrelay_0.1.1_1788843690206_0.7640696275756926","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@3xhaust/codexrelay","version":"0.2.0","license":"MIT","_id":"@3xhaust/codexrelay@0.2.0","maintainers":[{"name":"3xhaust","email":"me@3xhaust.dev"}],"homepage":"https://github.com/3x-haust/CodexRelay#readme","bugs":{"url":"https://github.com/3x-haust/CodexRelay/issues"},"bin":{"codexrelay":"npm/bin/codexrelay.cjs"},"dist":{"shasum":"0f5598df9d1d4ce5500b4663c54673f4d6255f14","tarball":"https://registry.npmjs.org/@3xhaust/codexrelay/-/codexrelay-0.2.0.tgz","fileCount":12,"integrity":"sha512-TZff5Sx1BEv46ahTmWy+1HzlmxHuksHfDsATRRcJZu7hSPrcpc7OAMY7XUfMUTRSehAf5/Z6d0o5hYzMRNXAiA==","signatures":[{"sig":"MEYCIQD5b001nFG/TgHjSNoxcfXbnWg/sSNM6+7bRTg6pm2YMQIhAIY307lJ7L3x1Ee/JvaK+RM26GLwUT1M8GSNUSuaNjhp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3xhaust%2fcodexrelay@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":45612185},"_from":"file:dist/codexrelay-0.2.0.tgz","engines":{"node":">=20"},"scripts":{"test":"node --test npm/test/*.test.cjs","release:pack":"node npm/scripts/package-release.cjs","test:install":"node npm/scripts/smoke-install.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6a74bc9-46cc-46bd-b89d-f1fae92bf359"}},"_resolved":"/home/runner/work/CodexRelay/CodexRelay/dist/codexrelay-0.2.0.tgz","_integrity":"sha512-TZff5Sx1BEv46ahTmWy+1HzlmxHuksHfDsATRRcJZu7hSPrcpc7OAMY7XUfMUTRSehAf5/Z6d0o5hYzMRNXAiA==","repository":{"url":"git+https://github.com/3x-haust/CodexRelay.git","type":"git"},"_npmVersion":"11.19.0","description":"Move Codex sessions and project changes between computers without SSH.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/codexrelay_0.2.0_1788845038423_0.4655871347169511","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@3xhaust/codexrelay","version":"0.3.0","license":"MIT","_id":"@3xhaust/codexrelay@0.3.0","maintainers":[{"name":"3xhaust","email":"me@3xhaust.dev"}],"homepage":"https://github.com/3x-haust/CodexRelay#readme","bugs":{"url":"https://github.com/3x-haust/CodexRelay/issues"},"bin":{"codexrelay":"npm/bin/codexrelay.cjs"},"dist":{"shasum":"e6f366bc4c2b4cf756debf0053f8c2104e9a7b87","tarball":"https://registry.npmjs.org/@3xhaust/codexrelay/-/codexrelay-0.3.0.tgz","fileCount":12,"integrity":"sha512-Vd+A+YLsWzQP53cZdqLBmI5iqacTcsK/ILwQwse0WKFrYOvv9I2345E3lY/N6qDN6vxrgPsaJRbip58f6/rVnA==","signatures":[{"sig":"MEYCIQDCuAGcyQW2G7UJes6luAtFJ0OJPuZik6swTZANndWMcgIhALiT1uHOhCoXaxUi5vHftppXPNVpd74QTemVSC6y8GUM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3xhaust%2fcodexrelay@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46781889},"_from":"file:dist/codexrelay-0.3.0.tgz","engines":{"node":">=20"},"scripts":{"test":"node --test npm/test/*.test.cjs","release:pack":"node npm/scripts/package-release.cjs","test:install":"node npm/scripts/smoke-install.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6a74bc9-46cc-46bd-b89d-f1fae92bf359"}},"_resolved":"/home/runner/work/CodexRelay/CodexRelay/dist/codexrelay-0.3.0.tgz","_integrity":"sha512-Vd+A+YLsWzQP53cZdqLBmI5iqacTcsK/ILwQwse0WKFrYOvv9I2345E3lY/N6qDN6vxrgPsaJRbip58f6/rVnA==","repository":{"url":"git+https://github.com/3x-haust/CodexRelay.git","type":"git"},"_npmVersion":"11.19.0","description":"Move Codex sessions and project changes between computers without SSH.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/codexrelay_0.3.0_1788848738039_0.4775191972766035","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@3xhaust/codexrelay","version":"0.4.0","license":"MIT","_id":"@3xhaust/codexrelay@0.4.0","maintainers":[{"name":"3xhaust","email":"me@3xhaust.dev"}],"homepage":"https://github.com/3x-haust/CodexRelay#readme","bugs":{"url":"https://github.com/3x-haust/CodexRelay/issues"},"bin":{"codexrelay":"npm/bin/codexrelay.cjs"},"dist":{"shasum":"3467bcec14e86eb71a95759f8fae698620c02607","tarball":"https://registry.npmjs.org/@3xhaust/codexrelay/-/codexrelay-0.4.0.tgz","fileCount":12,"integrity":"sha512-zyhnW75KRanuD+NiXS4KWPNBfZ5Y0zWm3NrxmbkUDpjd+hkGJBjLohZqes2E2qrcAR86fNz/GGhK/76P+b9n5A==","signatures":[{"sig":"MEUCIQCPG08kIyBWenl+Wh+a0ItqQk9kv1k8I/ncY69a/wg4vQIgBrKgavkBqfua0yxYxuHVhAH5NJymEL+PD204keVnsjU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3xhaust%2fcodexrelay@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47114481},"_from":"file:dist/codexrelay-0.4.0.tgz","engines":{"node":">=20"},"scripts":{"test":"node --test npm/test/*.test.cjs","release:pack":"node npm/scripts/package-release.cjs","test:install":"node npm/scripts/smoke-install.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6a74bc9-46cc-46bd-b89d-f1fae92bf359"}},"_resolved":"/home/runner/work/CodexRelay/CodexRelay/dist/codexrelay-0.4.0.tgz","_integrity":"sha512-zyhnW75KRanuD+NiXS4KWPNBfZ5Y0zWm3NrxmbkUDpjd+hkGJBjLohZqes2E2qrcAR86fNz/GGhK/76P+b9n5A==","repository":{"url":"git+https://github.com/3x-haust/CodexRelay.git","type":"git"},"_npmVersion":"11.19.0","description":"Move Codex sessions and project changes between computers without SSH.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/codexrelay_0.4.0_1788851202690_0.02425265951897293","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@3xhaust/codexrelay","version":"0.4.1","license":"MIT","_id":"@3xhaust/codexrelay@0.4.1","maintainers":[{"name":"3xhaust","email":"me@3xhaust.dev"}],"homepage":"https://github.com/3x-haust/CodexRelay#readme","bugs":{"url":"https://github.com/3x-haust/CodexRelay/issues"},"bin":{"codexrelay":"npm/bin/codexrelay.cjs"},"dist":{"shasum":"5c4d51f79ed95c7c3c074a5599d4e7fd75eff2ea","tarball":"https://registry.npmjs.org/@3xhaust/codexrelay/-/codexrelay-0.4.1.tgz","fileCount":12,"integrity":"sha512-LrrDJpxm0fJ/Z5xEj2TNUeODlAz+NDIp0vrKl6HcUJYxD24C/6ca0KQpZUBFRLWNs+CabyRcXsPhl9egcC+ovg==","signatures":[{"sig":"MEYCIQDVq+1kAtoazOJ+4UDR3e5RKLwtwUgXw5WPrcWu0Zf2xQIhAIRw8o0np+4bRavxnFiERvqExYSHUStJwTmK1haWt+8K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3xhaust%2fcodexrelay@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47114481},"_from":"file:dist/codexrelay-0.4.1.tgz","engines":{"node":">=20"},"scripts":{"test":"node --test npm/test/*.test.cjs","release:pack":"node npm/scripts/package-release.cjs","test:install":"node npm/scripts/smoke-install.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6a74bc9-46cc-46bd-b89d-f1fae92bf359"}},"_resolved":"/home/runner/work/CodexRelay/CodexRelay/dist/codexrelay-0.4.1.tgz","_integrity":"sha512-LrrDJpxm0fJ/Z5xEj2TNUeODlAz+NDIp0vrKl6HcUJYxD24C/6ca0KQpZUBFRLWNs+CabyRcXsPhl9egcC+ovg==","repository":{"url":"git+https://github.com/3x-haust/CodexRelay.git","type":"git"},"_npmVersion":"11.19.0","description":"Move Codex sessions and project changes between computers without SSH.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/codexrelay_0.4.1_1788909367162_0.49561828602095104","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@3xhaust/codexrelay","version":"0.4.2","description":"Move Codex sessions and project changes between computers without SSH.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/3x-haust/CodexRelay.git"},"engines":{"node":">=20"},"bin":{"codexrelay":"npm/bin/codexrelay.cjs"},"scripts":{"test":"node --test npm/test/*.test.cjs","release:pack":"node npm/scripts/package-release.cjs","test:install":"node npm/scripts/smoke-install.cjs"},"publishConfig":{"access":"public"},"_id":"@3xhaust/codexrelay@0.4.2","bugs":{"url":"https://github.com/3x-haust/CodexRelay/issues"},"homepage":"https://github.com/3x-haust/CodexRelay#readme","_integrity":"sha512-7JW4Mx9gLuIjGrjoZ8D9y3lwiLcVAB5Qh7QbJNMC2HMrTnGSl3MKSDIc5/qEbe4BH8irIPlFhbFOCnUPjFctOQ==","_resolved":"/home/runner/work/CodexRelay/CodexRelay/dist/codexrelay-0.4.2.tgz","_from":"file:dist/codexrelay-0.4.2.tgz","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-7JW4Mx9gLuIjGrjoZ8D9y3lwiLcVAB5Qh7QbJNMC2HMrTnGSl3MKSDIc5/qEbe4BH8irIPlFhbFOCnUPjFctOQ==","shasum":"bcadde925bbf1d1334f6ca9a5f8c8aa9fd6f4c7e","tarball":"https://registry.npmjs.org/@3xhaust/codexrelay/-/codexrelay-0.4.2.tgz","fileCount":12,"unpackedSize":47114993,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3xhaust%2fcodexrelay@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFJWurL/7LVo4vaoBLp+jVZFNOJgX82YHHcYVYM7njldAiA3jqE+l9zWOSsUqijwHUgOxXjMjBpVd/mdVBlZuAr0/w=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6a74bc9-46cc-46bd-b89d-f1fae92bf359"}},"directories":{},"maintainers":[{"name":"3xhaust","email":"me@3xhaust.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/codexrelay_0.4.2_1788910804289_0.7220415383029986"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-08T04:43:36.469Z","modified":"2026-09-08T23:40:05.029Z","0.1.0-rc.1":"2026-09-08T04:43:36.867Z","0.1.0":"2026-09-08T04:49:47.992Z","0.1.1":"2026-09-08T05:01:30.565Z","0.2.0":"2026-09-08T05:23:58.782Z","0.3.0":"2026-09-08T06:25:38.442Z","0.4.0":"2026-09-08T07:06:43.084Z","0.4.1":"2026-09-08T23:16:07.618Z","0.4.2":"2026-09-08T23:40:04.687Z"},"bugs":{"url":"https://github.com/3x-haust/CodexRelay/issues"},"license":"MIT","homepage":"https://github.com/3x-haust/CodexRelay#readme","repository":{"type":"git","url":"git+https://github.com/3x-haust/CodexRelay.git"},"description":"Move Codex sessions and project changes between computers without SSH.","maintainers":[{"name":"3xhaust","email":"me@3xhaust.dev"}],"readme":"# CodexRelay\n\n[English](README.md) · [한국어](README.ko.md)\n\nChoose a Codex task. Send it to your other computer. Continue in Codex.\n\n![Conceptual overview: carry the conversation and project together](docs/images/codexrelay-overview.png)\n\nCodexRelay shows your Codex task names, conversation previews, and projects together. It moves a selected task and its Git project directly between computers on reachable private networks. No hosted relay, cloud-storage account, or SSH setup is needed.\n\n[Validation and compatibility](docs/validation.md) records the browser workflow, native restoration checks, and remaining platform limits.\n\n## Start on both computers\n\nInstall Node.js 20+ and Git on both computers. On macOS, an installed Codex desktop app supplies the native helper; a separate CLI is optional. On Windows and Linux, the `codex` command must be available on `PATH`; installing only the Windows desktop app is not enough. Sign in to Codex on the destination. Go is not required for npm users.\n\n```sh\nnpx @3xhaust/codexrelay@latest connect\n```\n\nOr install globally:\n\n```sh\nnpm install -g @3xhaust/codexrelay\ncodexrelay connect\n```\n\nKeep both computers awake with CodexRelay running. On the same LAN they can discover each other automatically. If the firewall asks, allow access on your trusted private network.\n\n1. Find the task by its Codex name or project and click **보내기** (Send).\n2. Choose the other computer. If it is already connected, transfer starts immediately.\n3. For the first connection, compare the **eight-digit code** on both screens and confirm on each computer. The selected task then continues transferring automatically.\n\nThe destination gets a new project folder, registers the restored conversation with Codex, and requests that task to open. The result reports restoration; **Codex에서 열기** (Open in Codex) sends another opening request. If a conversation started outside a Git project, choose its project through the folder picker once.\n\n**컴퓨터** (Computers) in the header manages remembered connections. **연결 해제** (Disconnect) revokes future access.\n\n## Connect by address\n\nIf the computers do not appear automatically, open **컴퓨터 → 주소로 연결** (Computers → Connect by address) on the receiving computer. Enter the sending computer's **이 컴퓨터 주소** (This computer’s address), such as `192.168.1.20:46445`, then compare and confirm the eight-digit code on both screens. Both computers need version 0.4 or newer.\n\nSelect and send the task on its original computer. The receiver fetches the selected task from the sender's server; the sender does not need to open a connection back to the receiver. Both programs stay running. The default device port is TCP 46445; `--port NUMBER` changes it, and `--port 0` chooses an available port. The private dashboard URL is for the computer running it; enter the device address on the other computer.\n\nWired and Wi-Fi networks at a school or office may allow direct TCP access even when discovery is unavailable. Address entry still requires a permitted network route to the sending computer. It cannot connect through network isolation; use an approved shared network if that route is blocked.\n\n## The project and conversation travel together\n\nTransfers use a Git repository with at least one commit. A conversation outside its project needs an explicit project association; CodexRelay does not guess which unrelated folder to send.\n\nThe transfer includes the original task identity and saved conversation through the latest completed or aborted turn, Git history, current files, and staged/unstaged changes. It retains a recovery copy of the exported conversation records. The unfinished tail is omitted.\n\nFor the latest complete snapshot, let the current Codex response finish or stop it, then pause project edits while sending. Files reflect their current state, not a rollback to the conversation cutoff. Sending does not stop the source task or prevent concurrent editing on another computer.\n\nAn existing destination folder or an already-imported session ID is rejected instead of overwritten. Account credentials, ignored files, installed tools, live processes, and terminals are not transferred. Git remotes must be reconnected separately. Submodules and symlinks are not supported. Old conversations and Git commits may contain sensitive content; encryption does not redact that history.\n\n## Codex compatibility\n\nUse the same `CODEX_HOME` as the Codex CLI or desktop app you want to continue in. Automatic opening also depends on the installed desktop app and platform. An opening failure is shown in the result.\n\nOn one Mac running two isolated processes, the new browser flow passed first-time pairing, confirmation on both screens, and transfer of a Desktop-format task. The user confirmed that the exact task opened in Codex. A second, already-trusted CLI-format transfer took two clicks, and the native app reader confirmed its name, conversation, and restored folder. That second task’s visible window was not separately confirmed. See [evidence and limits](docs/validation.md). A physical Windows-to-Mac transfer has not been verified.\n\nThe receiving computer must be able to reach the sending computer’s private device address. This does not reach an offline home computer or provide an internet relay.\n\n<details>\n<summary>Optional startup settings and file commands</summary>\n\nSelect a task and explicitly associate its Git project at startup:\n\n```sh\ncodexrelay connect --session SESSION_ID --workspace \"/path/to/project\"\n```\n\nUse `--name \"Home computer\"` to choose a device name, `--no-open` to print the dashboard address, and `codexrelay doctor` to check local tools. Keep the dashboard address private; it contains its access token.\n\nFor an explicit encrypted file transfer:\n\n```sh\ncodexrelay export --workspace \"/path/to/project\" --output task.relay --source-stopped SESSION_ID\ncodexrelay import --destination \"/path/to/new-project\" task.relay\n```\n\n`--checkpoint` selects the latest completed conversation prefix; `--attach-workspace` explicitly associates a conversation outside the repository. File-transfer passphrases are entered in the terminal and must contain at least 12 characters. Put options before positional arguments. `codexrelay --help` lists all commands.\n\n</details>\n\n## Develop and publish\n\n```sh\ngo build -o codexrelay ./cmd/codexrelay\ngo test -race ./...\ngo vet ./...\nnpm test\nnpm run release:pack\nnpm run test:install\n```\n\nRelease packages include Go binaries for macOS, Linux, and Windows on ARM64 and x64. No install script downloads an extra binary. Use `npm run release:pack -- --current` for a local smoke build only. [Publishing instructions](docs/publishing.md) cover the final release gates and npm Trusted Publishing.\n\n## License\n\n[MIT](LICENSE).\n","readmeFilename":"README.md"}