{"_id":"codex-claude-bridge","_rev":"27-88c8d7b85093a0d4050113aab341e021","name":"codex-claude-bridge","dist-tags":{"latest":"1.9.0"},"versions":{"0.1.0":{"name":"codex-claude-bridge","version":"0.1.0","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@0.1.0","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"432c7e01220637a826bf9b049e7041bf842434d6","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-0.1.0.tgz","fileCount":4,"integrity":"sha512-HnMW4ynEEUsDhhDIjTiCWgYXA77Lja5GBSC7SY09Y4dSTVxosEDM7BB3ddAT0YJIgS/Fy0zslsOPIcAcJZmCHg==","signatures":[{"sig":"MEUCIQDKyIcFwLDS1CPDeMNXdyGYc22ACkCoDeukshK3B2FOTgIgZ4wDidR01hNoKXTcxKMLNoZVL7Oa5uw99dZ+2Rg9RFE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35971},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"b4dcf7775e1df1ce4900e0d399d211bcb1ea8e3a","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","better-sqlite3":"^12.6.2","@openai/codex-sdk":"^0.104.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_0.1.0_1771610341520_0.32019095817211496","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"codex-claude-bridge","version":"0.1.1","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@0.1.1","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"b95b0acaf6963edae0a4b7d9a09aca9df62f4aaf","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-0.1.1.tgz","fileCount":4,"integrity":"sha512-um9xQdNZs82WYUY+kc3xJ+6KwHoUW/7h28s8InnOp3a65m5myp6b2fZaiBicfBanuGb5smqq14/23NHxkpXwNQ==","signatures":[{"sig":"MEYCIQDH+KWJErBct5TvbVcM7tMeNIIi+ioFYG1IR/65fKMKzgIhAIpS/WPOdtYyLpUZYyUgJGiiqkCCA/rLyY8+wR77pgtQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44508},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"d654949b445b627217394f1c5f84a5f2897fa586","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","better-sqlite3":"^12.6.2","@openai/codex-sdk":"^0.104.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_0.1.1_1771620298203_0.24610509093821276","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"codex-claude-bridge","version":"0.1.2","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@0.1.2","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"2cdeab5d195cd3e83d36eb2be5d3b2d9a796263b","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-0.1.2.tgz","fileCount":4,"integrity":"sha512-enLVVzC1ajystws9ICpB0A6hctR8EaSNv062voAuda0M5+33cboS4ANhrNkGjOWN0ufE2VI5ZN7PrKcQw+cTTg==","signatures":[{"sig":"MEUCIQCpDXale8VkoDR3s3x61gj7dAHThMgE+hiiDQxvZWE1EgIgMnAVh/F49/528dJPhPd+YpcmNMfi5lXulmoJCoaF+ws=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69739},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"ce058b383f4c691b5501d533fc381bab666e9794","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"^0.104.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_0.1.2_1771752934010_0.22240873757294133","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"codex-claude-bridge","version":"0.1.3","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@0.1.3","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"7b7261976e6aa2d955546d92982ede06b19e8ea2","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-0.1.3.tgz","fileCount":4,"integrity":"sha512-Ea1GBxq++dxI2hZ2nbxYAWKJTL2r+EwpPThyqLi14c2UBMwjHS4mxwgkXtIzTYLkvXhWX2VUN29h0X/r0KvIkg==","signatures":[{"sig":"MEQCIBrf22NG/moO+PhtdB7D9nunycBo4JAVY1FChkFPReAQAiA1aBREeDy1C7tK3KR+JxXXEABBQdSbgsrLVYDucApJcw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70248},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"e63d775e2a127ba6e8bd04089a9e7684ba33aa54","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"^0.104.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_0.1.3_1773089746839_0.5798554528616107","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"codex-claude-bridge","version":"0.1.4","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@0.1.4","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"c1bf1b24bc42e69c7e49eed79e3373b99223c4c8","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-0.1.4.tgz","fileCount":4,"integrity":"sha512-nB+1s3RtgB/CBz8UDUMn3dj2oxKX3u3Df4MHj3oPZPbEnsRG4hf8gMmTDSsz76BXzZF7gI3d8tQxeFMBHbXEOA==","signatures":[{"sig":"MEUCIQDedG/pnJtSPo+fVuXE1qLRARufZ4gzc8Dl06hHVR9EEAIgC74201ygd58Pw1fhJhjmHxBCnMNKymmI89zDvM1i/z4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71991},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"827b0b2891903a82a8f64f8ec4f8407d57f6fca5","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"^0.104.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_0.1.4_1773091207593_0.6155439873753883","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"codex-claude-bridge","version":"0.2.0","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@0.2.0","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"ef3086b4581a1c13dbaae2ed275e451fe85860ee","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-0.2.0.tgz","fileCount":4,"integrity":"sha512-NE6z60ORv+ZJDyV0UDoX0fkCmX+KsKCP3WsFGSN8QvWo0N0fKVw+MqUSaENYusGHweDMpRcWkfZu2pTcDSfizg==","signatures":[{"sig":"MEUCIQDP8DcOEB5MJ0o1q9USAcSl2hxmGxvkR49zFl8nq83oXAIgcLnfUh24nNUB3RPdkRQtIVEnzNBOnBElwLGUAtNHqkM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80095},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"55e869243199feb1684ac91727139e9c174ede63","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"^0.104.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_0.2.0_1773098060895_0.9551451750478863","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"codex-claude-bridge","version":"0.3.0","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@0.3.0","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"0112c56515088b9a96220d767647524bbcb36c37","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-0.3.0.tgz","fileCount":4,"integrity":"sha512-s828y95BDqAc5p/HW+0Evwb5gHMcHDUigRfjN4ru3Cn3c0ZyD8ZVGd6Vo/tRFTAJZpOFinY5Fi7YfTboKn+v+Q==","signatures":[{"sig":"MEQCIFDn/BC/RwEjOBP0MyTXoRvUqujrzXaliBfDQtzm5zrwAiAMSWHNVMsJgp+KPOxiCqpeLnr36UIhIaR4iru4cxnpCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82514},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"558912ddad6bfdfe4ddf7f343b3ca258fa971731","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"^0.104.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_0.3.0_1776970230597_0.35394362673586444","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"codex-claude-bridge","version":"0.3.1","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@0.3.1","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"30b8356f3198e760beb4bcd467b0567401cbf059","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-0.3.1.tgz","fileCount":4,"integrity":"sha512-TOWckPYIwbyM0LrGmACa85wpLjj9NnkkuhEToxmhP9B9kaWX6Z8XyOLnQuKDk77VKJ6RLXkdD4l2AuV62RkvLg==","signatures":[{"sig":"MEUCIEreyG/00tznaT7CBP1OT1Qwx7cVvB4RL5lCzyDqVgnqAiEAjsXBmvUY8G0tVXC4Fq6bBQ5UWqMEiVcx31QEobFcYQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82554},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"14d279287b8b190e0c3bed33d5430ba75fbf55c8","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"^0.104.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_0.3.1_1776973410369_0.9257623395386234","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"codex-claude-bridge","version":"0.3.2","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@0.3.2","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"d6ab5034801fef09b0202108b2a44335bbe58d9f","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-0.3.2.tgz","fileCount":4,"integrity":"sha512-NVgh82Yf+LSV1PGPUIEPSE+E5vfXjrw6rIcqn1C8J1gotHIUhM10cjYJJkSv/w2m47OzkD4TVHrv66r7M3lIyg==","signatures":[{"sig":"MEUCICsEk84+hB/sCLmleW0uNLYp49p1IJZ3zmS+TEqbJwp2AiEAqzsImkUQoOz+UdPlcRBYeWDG6R9aDKX1uc54+h0gi5E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83111},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"1a976165e86a043ab1fb352e1b4e124a37279296","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"^0.104.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_0.3.2_1776974413918_0.9303796855001503","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"codex-claude-bridge","version":"0.3.3","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@0.3.3","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"7b7b889f773756e45153ca89d2ee994d6401749d","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-0.3.3.tgz","fileCount":4,"integrity":"sha512-J6tZXi57M22lxdz/BIoviHXwCxL84bnjPNBiwegRXiMLpTp9GxwnsQ5/mPqShLnku8rnwe7XV25iQ/vtSKpk8Q==","signatures":[{"sig":"MEUCIFfE1BfD/3VhOMtPb3HKQYZ0QIUbwS2J7Fwra8HO/WJMAiEA4QkbF0rDxUbj1zcDbitG6WS94zzQGmFVGxTP0g7zfB0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87168},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"2d6367d9b94b36b4ede8c1830f6f41c14c30e729","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"^0.104.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_0.3.3_1776981174173_0.17211588695952718","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"codex-claude-bridge","version":"0.3.4","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@0.3.4","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"dbd5a9870417136ed70146369a7d5568eeef3c3f","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-0.3.4.tgz","fileCount":4,"integrity":"sha512-riXu1Zx1O9EoQf+mNn40eel2/wBQLNE7GkGPsdiXMRqWD+SeYZUrMuL/VkP/Io7m0bHR8HiJKbFDIH7y20zohQ==","signatures":[{"sig":"MEYCIQCLH02qvR9VgBOoo8UIPlvVkYp763EtDD3dHfswMHasmwIhAM+k2pvp0neM/+yTaHmPecf7nymsFflVkZic+VsfEXzv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87463},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"d48947d4f44eb3d188352dcd809308d81fb06722","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"^0.104.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_0.3.4_1776985404467_0.27553410456132843","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"codex-claude-bridge","version":"0.3.5","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@0.3.5","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"768db2a8af9823cdd0ec26297c942133bb967c9c","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-0.3.5.tgz","fileCount":4,"integrity":"sha512-CgxdPfTNq/ZZSYQcIDP+ss8q8Qz+CBUAXeUs0klV6MZRIQrBibiM382H4zRIaBJo1jjqT4qjE/1UY07gM7ZrPA==","signatures":[{"sig":"MEUCIQCwcktzJJOpPv1+AQzI3X/1RouhxZhbieypoTXtKVeL3wIgRyACh4944A9kdBzK9wGrjAthnpwpzeYVYcVCWdRO9j8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87216},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"343909151bb6b458992cb5f105f3ac9ed30a9cf5","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"^0.104.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_0.3.5_1776986089275_0.4236466700375763","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"codex-claude-bridge","version":"0.3.6","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@0.3.6","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"b49897dcef20e3d84fc1e90f586608849332a76c","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-0.3.6.tgz","fileCount":4,"integrity":"sha512-YKecp3NkdnKX84MRhp/eMzQZwVPacRFPhpe6V+2Kw3tSEGoj3zGzba3jKVP09bfLzx5lC2Df3H5tCtyQo8ZrdA==","signatures":[{"sig":"MEUCIQDk4lGT2TUltGM3qwTMTBuVFR/2LpgPXBIqDVHyiKtKPQIga6OHuJG5NNCN3V29HkNhQ73SH/GFKRvnzzhurGE3c4Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91139},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"4b0113fbddbf280f41fec6664593fe7550a86955","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"^0.104.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_0.3.6_1777193392824_0.8934572479096006","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"codex-claude-bridge","version":"1.0.0","keywords":["mcp","claude","codex","code-review","openai","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@1.0.0","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"81977b5f20e5e7d9c4a3a373462d8a66d07b10d1","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.0.0.tgz","fileCount":4,"integrity":"sha512-DlegIHIF7v9kTs4ghtbFThvVwEXG3nYxl2qWpU+D2AY2KcW5hStU9Ax6Go2fY9eg97lWLgly5Nt+jafK7CzDxQ==","signatures":[{"sig":"MEUCIC5+s6t4iItWibyS3sxaumxpVguv/3219xzSSWIaV0r/AiEAgEH69/uppktsMPI/kk6ZSdNeK+71wPDoxgcDe1ySJbE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92224},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"a07a757d9f8f158712056cd835ebf21ab94b59ab","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server that automates code review workflows between Claude Code and OpenAI Codex","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.128.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_1.0.0_1777770069464_0.404095847608857","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"codex-claude-bridge","version":"1.1.0","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@1.1.0","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"22f03ba936495bccc93d60c2a5970af3080d6fee","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.1.0.tgz","fileCount":4,"integrity":"sha512-nRUYat1iQvZVb97geV7R5nkW8oLCsa+MMAjgTjfdDNL0vKAnoZRiLFLasPTwQgGokRS1fUMl4W91pz7NooVMDA==","signatures":[{"sig":"MEYCIQC2Bayd8nAF5LuF7xHSENecoWaxQvtITJJeVeTbZpDuVwIhAMOJTe+oPVDSxQ/RzZkiYkbR22Wz/ytiAJSg1bXl6Hgq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116558},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"7ead86525c1eba70ab2b42b34d51403b84fdd52f","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.128.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_1.1.0_1782803845617_0.4577189874691092","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"codex-claude-bridge","version":"1.2.0","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@1.2.0","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"d182a064d9a9b2cbca570a4f07995d59a6b25e7e","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.2.0.tgz","fileCount":4,"integrity":"sha512-yY3gzazP/yaSlPq7ddPLrF3A8OJQ1xex992/1uGiwlo7YLKs+wsathU5nGQVRrBVxxNhiTCZx3g8/vPJNti//Q==","signatures":[{"sig":"MEUCIQDb9hM6xQDkQVsb026f3kcrzKD6Q+Q7SCto4aXsp22/fQIgc9wHblsHCL7crKiGZYxwSGXxhrybyOm5hm+HidiGx4s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125884},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"bc712c8c546033f69b8cf15aa21d7730cb346525","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.128.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_1.2.0_1782881080335_0.49688192851402246","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"codex-claude-bridge","version":"1.3.0","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@1.3.0","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"db738be9d91cba9325c8169e5f531d7f61bd2adb","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.3.0.tgz","fileCount":4,"integrity":"sha512-Yw2t22r8wQo98hu/J5S1dEbwLua4VXqU67UtAUPLDC0nTE5x+lQNxEc9hRaTOidOcqLmCSZEP7keYeJFaly7WA==","signatures":[{"sig":"MEYCIQDKFRIOozkYKSpVhaJhLY7m4PnXwl0gMXT3k/kQ7GZc+AIhAIArgA67QMsQDWir2P9+p94dGpkOeCyEGz2J4MvhGx4Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132644},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"f82bfce72160e0890d1b8dcb8e262fea33aa2aa5","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.128.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_1.3.0_1782897107816_0.32274034996320733","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"codex-claude-bridge","version":"1.3.1","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@1.3.1","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"187d839abce831dce2eb2ba7aa3f7184f5454bee","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.3.1.tgz","fileCount":4,"integrity":"sha512-7RrqR6nDND0MR8zOm+HY9/qICs6FD/tFJTwsfew8YdaGhNAqFTI7AVA0d/kG30dbIqHy3JsUPavc5Pf/1cHq4A==","signatures":[{"sig":"MEQCIHuQerEccuNf7MM5N5gDTb9q3FY0dcjvoYQ7eOqcASe5AiAow6pUHkPlUdgJLZXAtdvMddALbbDdTL33V9g5TdCe/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134741},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"dff0b947e2c9812297e96613b52cfcb28cd21ac9","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.128.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_1.3.1_1782932642995_0.06904735333605583","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"codex-claude-bridge","version":"1.4.0","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@1.4.0","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"9743cd9bb0d4eb174fadee775319a3741d5cbcdf","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.4.0.tgz","fileCount":4,"integrity":"sha512-CGeFvmkPsCH33RtRKf3CPwo8IZjJYxnTl2Aq79jgxp2+oQzZKUaLHEgKhLvpFAfz95pQqRoHoEOsKanTUQlMcA==","signatures":[{"sig":"MEQCICusw2spBoSIqSR92VgThuJNOCjSyTZ0G7Kifx6PpoQKAiBUgo9Ev8enPRyUAikQAE0evbmZcjrTyZkKv31TjqrfVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136129},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"d5b0f2855d2995669775be31fcc4c97ca3e413be","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.128.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_1.4.0_1782934913019_0.30833189336098665","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"codex-claude-bridge","version":"1.5.0","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@1.5.0","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"677e7567b2de73496cb484edd857206a302c70b0","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.5.0.tgz","fileCount":4,"integrity":"sha512-9b2HoamRm+lj0bGQ4dKG4pSDVcTMJkPFU/xGb0sGTWvyRwldLNZU6FNRkQ8yW5JA64R1Ee3oE44g1zuNRAJZCA==","signatures":[{"sig":"MEQCIAJYbnxXqZ9o1cbNbGvPs5aUb7wImkHWR+fTpx+fKRgEAiBJueBcf9zTzWZFWOAvbjO72KBpfVfTrWSV38QF5Z9nhw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154613},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"71e33ac619e84adf57f960107195ee8c634c1d57","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.128.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_1.5.0_1782971427651_0.8725190922923383","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"codex-claude-bridge","version":"1.5.1","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@1.5.1","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"102bc34b988afae163d24e9eb432fcd2f5987959","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.5.1.tgz","fileCount":4,"integrity":"sha512-kCFWUl3Zbs6/F3CFmc/A4ObPVTRpEmHYzl/aw1mGqd1qFtoJG36KD4eFspARX3qt2B1u3jPVif4lOMr/KeXkUQ==","signatures":[{"sig":"MEUCIQCOm+5wuB58CgmXHI3LUHM5vpqcRVFDyRmuu8JaTLR0KQIgRzQ6FKGhLRhLV7YFNSWgDiz3rIIfCWWQjXr850ETRt0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158274},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"4e52cebb200ccebbd6d94d7939cc799ba85fa304","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.128.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_1.5.1_1782977158280_0.5017074306981659","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"codex-claude-bridge","version":"1.5.2","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@1.5.2","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"fec2e932d35f4ec408f58600b816e0f55457c4e1","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.5.2.tgz","fileCount":4,"integrity":"sha512-SP93553OYb3ev75nAtltDkd8sFSnWf9wW4LDOgmZsdw6cntzio7UoRs/50PtYyVm/MdvHvizdnv28qj5+vd1QA==","signatures":[{"sig":"MEUCIGFp/QJ0hDQJtfIi4q8r+ABVjPFEm+ZMTwU1CDJE0Kx0AiEAkSIYn/+wfcv7iTkbewv3lEwPpAYgptvsBf5ELRX7QeE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158387},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"4fa7fa14a4eeffdc1d6bf506e2e9b37adeb26943","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.128.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_1.5.2_1782978738531_0.6839989643921929","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"codex-claude-bridge","version":"1.6.0","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@1.6.0","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"dec923fbdc25f39d5d81ce0f57c5180b4904e4ae","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.6.0.tgz","fileCount":4,"integrity":"sha512-hCue+urreslBpgySbOf18PXK/2Ndv5qzGuQzwpRa/PnYGNzZHznNdfiu9WPImMFDMzJ72E6RxklOcEylqHb64A==","signatures":[{"sig":"MEUCIHvQm994iobPDHZrh60A19XtNtw596W7BHf+qpN3yFTwAiEA8FQ8sobjtMZzcbTBg9w3atDalsUMFBsmM48oZGn7WSc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158484},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"18fd5a9903396e42ce22f37b2e24996ad5f8e2c6","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.144.0","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_1.6.0_1783639274724_0.11392544591865583","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"codex-claude-bridge","version":"1.7.0","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@1.7.0","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"33b4c32edca53970de49d73761ef97b3c6eef0c6","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.7.0.tgz","fileCount":4,"integrity":"sha512-yG7fPp+mP4zG6KeDxMkS7tE3o5OHLSPWACm9BemGRNkqVTwOS65GRMj8DPkDexJyRJCUnutXqi/IkdyIfhHmYw==","signatures":[{"sig":"MEYCIQC9eRk/gCTBatT+K1RWdiCB7bikXve1EwntQcMVHMg30wIhAPp8TokFvYx2wVmj9KqQeOscmydHLIEykOXPGpVxhbzL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":280802},"main":"./dist/index.js","type":"module","_from":"file:/tmp/bridge-release-review/codex-claude-bridge-1.7.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"_resolved":"/tmp/bridge-release-review/codex-claude-bridge-1.7.0.tgz","_integrity":"sha512-yG7fPp+mP4zG6KeDxMkS7tE3o5OHLSPWACm9BemGRNkqVTwOS65GRMj8DPkDexJyRJCUnutXqi/IkdyIfhHmYw==","repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.153.4","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_1.7.0_1788831855266_0.35952110931343295","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"codex-claude-bridge","version":"1.7.1","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@1.7.1","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"965fa00ed43f29d5cae4c88167c9a611290d20fb","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.7.1.tgz","fileCount":4,"integrity":"sha512-Re4FjN57vlLjGt6qxBl1bujTTbst2hwn1MqFvFXsJYqE/cbdnRULjGbDUtYS4a6rprSx0oarSfQfFJ/FIWr3wA==","signatures":[{"sig":"MEUCIQD4nCbfpD8eiqWF2a8aavAVWg8d19FD7iBzamPKFn0MpgIgPvbFHnEfw5xmW2rkBN7wCCxUEAosrTk1Fpm0rGgm73c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":283717},"main":"./dist/index.js","type":"module","_from":"file:/tmp/codex-claude-bridge-1.7.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"_resolved":"/tmp/codex-claude-bridge-1.7.1.tgz","_integrity":"sha512-Re4FjN57vlLjGt6qxBl1bujTTbst2hwn1MqFvFXsJYqE/cbdnRULjGbDUtYS4a6rprSx0oarSfQfFJ/FIWr3wA==","repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.153.4","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_1.7.1_1789079689976_0.5590167687316954","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"codex-claude-bridge","version":"1.8.0","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"author":{"name":"Amir Shayegh"},"license":"MIT","_id":"codex-claude-bridge@1.8.0","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"bin":{"codex-claude-bridge":"dist/index.js"},"dist":{"shasum":"82198e4b870a3b3977b877b904a751b6d6c1de6b","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.8.0.tgz","fileCount":4,"integrity":"sha512-zMUQ6xX4Z0aVffmADnnIWGWwtjg7Fh8o5m2cXThtivuh/Dyrx0+LEXkRN7cARdWtZ3D1GNAhNuPQf/OM7qFxqw==","signatures":[{"sig":"MEYCIQDOMpyX1XhUOVzNnHkMW1KKMXoWcKFwtdvsx7ydwHuiGwIhAI7L5MMIeuXmnlVQ0COEjLv9hL0gF0m+g+PeiS/ma8N4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDtrphkYBhMZQD43AY/F60YBwmPWZ1eKeTV9wJRKEfVqAIgW+wjLRWilmw0e0cH/OwdD3S+iSjtQTmP2pJK1EyhtOM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":306694},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"0d9d868b18cd3fa9691e94f83715f711dc3a33a7","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.153.4","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/codex-claude-bridge_1.8.0_1789486979172_0.4031173194535136","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"_id":"codex-claude-bridge@1.9.0","bin":{"codex-claude-bridge":"dist/index.js"},"bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"dist":{"shasum":"3609d89186840feddaa87574892df32bb1b67b24","tarball":"https://registry.npmjs.org/codex-claude-bridge/-/codex-claude-bridge-1.9.0.tgz","fileCount":4,"integrity":"sha512-RN/vA3UtWf9NcScLYVi0yRlf+mw3OL9lk1I85PpZ6Ingga7lgjEfz5a4j3OJb8fc6n7Flq8DZ9BQtdRDvApFzw==","signatures":[{"sig":"MEUCIQDiWGVW5Kmbpz1ied7YClLhO9z+rjhSz4pNEdEucxyyUgIgLHMXdiPMLUm4sY556xBMtRA3G/dSPHoh5rj7RYd9gfc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGwNo5WGDb68SJF+nhvhkRXt1KGrJQ4yCjjeWVwfrz20AiBj5G/uufS/W1/8stNkks4B+fA8vMR6ypQHNzPI/3bybw=="}],"unpackedSize":319395},"main":"./dist/index.js","name":"codex-claude-bridge","type":"module","types":"./dist/index.d.ts","author":{"name":"Amir Shayegh"},"engines":{"node":">=18"},"gitHead":"a98f8792375836dddf92624f4383e06739cc2ed4","license":"MIT","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm test"},"version":"1.9.0","_npmUser":{"name":"ashayegh","email":"shayegh@me.com"},"homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"_npmVersion":"10.9.3","description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","directories":{},"maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"_nodeVersion":"22.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.1.0","picomatch":"^4.0.3","picocolors":"^1.1.1","better-sqlite3":"^12.6.2","@openai/codex-sdk":"0.153.4","@modelcontextprotocol/sdk":"^1.26.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.0.0","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/picomatch":"^4.0.2","typescript-eslint":"^8.56.0","@types/better-sqlite3":"^7.6.13","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/codex-claude-bridge_1.9.0_1789898924820_0.5648676007448288"}}},"time":{"created":"2026-02-20T17:59:01.519Z","modified":"2026-09-20T10:08:45.054Z","0.1.0":"2026-02-20T17:59:01.666Z","0.1.1":"2026-02-20T20:44:58.347Z","0.1.2":"2026-02-22T09:35:34.159Z","0.1.3":"2026-03-09T20:55:46.992Z","0.1.4":"2026-03-09T21:20:07.758Z","0.2.0":"2026-03-09T23:14:21.055Z","0.3.0":"2026-04-23T18:50:30.742Z","0.3.1":"2026-04-23T19:43:30.517Z","0.3.2":"2026-04-23T20:00:14.206Z","0.3.3":"2026-04-23T21:52:54.306Z","0.3.4":"2026-04-23T23:03:24.608Z","0.3.5":"2026-04-23T23:14:49.403Z","0.3.6":"2026-04-26T08:49:52.957Z","1.0.0":"2026-05-03T01:01:09.602Z","1.1.0":"2026-06-30T07:17:25.744Z","1.2.0":"2026-07-01T04:44:40.509Z","1.3.0":"2026-07-01T09:11:47.962Z","1.3.1":"2026-07-01T19:04:03.151Z","1.4.0":"2026-07-01T19:41:53.150Z","1.5.0":"2026-07-02T05:50:27.796Z","1.5.1":"2026-07-02T07:25:58.433Z","1.5.2":"2026-07-02T07:52:18.657Z","1.6.0":"2026-07-09T23:21:14.864Z","1.7.0":"2026-09-08T01:44:15.402Z","1.7.1":"2026-09-10T22:34:50.137Z","1.8.0":"2026-09-15T15:42:59.255Z","1.9.0":"2026-09-20T10:08:44.903Z"},"bugs":{"url":"https://github.com/AmirShayegh/codex-claude-bridge/issues"},"author":{"name":"Amir Shayegh"},"license":"MIT","homepage":"https://github.com/AmirShayegh/codex-claude-bridge#readme","keywords":["mcp","claude","codex","gemini","code-review","openai","google","anthropic"],"repository":{"url":"git+https://github.com/AmirShayegh/codex-claude-bridge.git","type":"git"},"description":"MCP server for automated code review in Claude Code — OpenAI Codex or Google Gemini reviews your plans and diffs inline, with automatic failover between providers.","maintainers":[{"name":"ashayegh","email":"shayegh@me.com"}],"readme":"# Claude Review Bridge — Codex + Gemini\n\nMCP server for automated code review. Claude Code writes the code; a second model reviews it and structured feedback comes back inline, no copy-pasting between tools. The reviewer is [OpenAI Codex](https://developers.openai.com/codex) by default, or Google Gemini (via the Antigravity `agy` CLI).\n\n**Works with a subscription you already have — $0 marginal cost.** Codex runs on your ChatGPT plan; Gemini runs on your Google AI Pro plan.\n\n**Out of usage on one provider?** When both are set up, the bridge automatically fails over to the other so a review still comes back — see [Provider failover](#provider-failover).\n\n## Quick Start\n\nAdd the MCP server to Claude Code (same for every provider):\n\n```bash\nclaude mcp add codex-bridge -- npx -y codex-claude-bridge@latest\n```\n\nThen set up at least one reviewer. **Codex is the default**; set up both and the bridge fails over between them automatically.\n\n### Codex (default) — your ChatGPT subscription\n\nInstall the Codex CLI and sign in:\n\n```bash\nnpm install -g @openai/codex\ncodex login\n```\n\nThe SDK reads OAuth tokens from `~/.codex/auth.json` (created by `codex login`); when no `OPENAI_API_KEY` is set it uses your ChatGPT subscription automatically. To pay per token instead, `export OPENAI_API_KEY=sk-...`.\n\n### Gemini — your Google AI Pro subscription\n\nInstall the Antigravity (`agy`) CLI, then run it once to sign in with your Google account (AI Pro):\n\n```bash\nagy        # first run prompts a Google sign-in\n```\n\nSelect Gemini with a `.reviewbridge.json` at your project root:\n\n```json\n{ \"provider\": \"gemini\" }\n```\n\nRestart Claude Code after setup. The review tools are now available.\n\n### Prerequisites\n\n- **Node.js 18+** — [nodejs.org](https://nodejs.org/)\n- **Claude Code** — [code.claude.com](https://code.claude.com/docs/en/overview)\n- **Codex CLI** (Codex path) — `npm install -g @openai/codex`, then `codex login`\n- **Antigravity `agy` CLI** (Gemini path) — install it, then run `agy` to sign in (Google AI Pro)\n\n## What You Get\n\nOnce set up, Claude Code gains five new tools:\n\n- **`review_plan`** — Send an implementation plan for architectural review. Get a verdict (approve / revise / reject) with specific findings.\n- **`review_code`** — Send a code diff for review. Get findings with file and line references.\n- **`review_precommit`** — Quick sanity check before committing. Automatically captures your staged git changes.\n- **`review_status`** — Check whether a review is still in progress, completed, or failed.\n- **`review_history`** — Look up past reviews by session or count.\n\nAll successful review calls return structured JSON with `models[]` (the providers/models that\ncontributed) and `provenance` (whether the result was durably recorded, memory-only, or synthetic).\n\n### Responding-model evidence\n\nEach `models[]` entry reports:\n\n```json\n{\n  \"provider\": \"codex\",\n  \"role\": \"review\",\n  \"requested\": null,\n  \"resolved\": \"gpt-5.6-sol\",\n  \"observed\": \"gpt-5.6-sol\",\n  \"evidence\": \"runtime_session_record\"\n}\n```\n\n- `requested` is the per-call/config selector considered for the turn. It is `null` for provider\n  defaults and Codex resumes where no model override is applied.\n- `resolved` is the concrete label selected or retained by the bridge.\n- `observed` is a runtime-recorded label when one is available. Codex reads it from its local\n  session record; Gemini reports the model `agy` named in its own `init` event for a run made by\n  this server process, and `null` for a session this process did not run. A mismatch between\n  `resolved` and `observed` is logged on stderr.\n- `role` distinguishes normal review turns from deliberate-deep adjudication turns.\n- `evidence` says whether identity came from a runtime session record, bridge selection, or was\n  unavailable.\n\nThis is control-plane evidence about the model labels selected and recorded by the clients. It is\nnot cryptographic proof of underlying weights or an audit of a provider's internal routing.\n`models[]` lists successful contributors, not every provider that received input, so it is not a\ndata-egress audit.\n\n## Usage (MCP)\n\nIn Claude Code, just describe what you want reviewed. Claude Code will pick the right tool:\n\n**Plan review:**\n\n> \"Review this implementation plan before I start coding.\"\n> \"Check my plan for security issues and scalability risks.\"\n\n**Code review:**\n\n> \"Review the changes I just made.\" (Claude Code runs `git diff` and passes it)\n> \"Review this diff for bugs and security issues.\"\n\n**Pre-commit check:**\n\n> \"Run a pre-commit check on my staged changes.\"\n> \"Check if these changes are safe to commit.\"\n\n**Session continuity** — pass the `session_id` from a plan review into a code review to maintain context across the full review lifecycle.\n\n## Standalone CLI\n\nRun reviews directly from the terminal — no MCP setup required.\n\n**Pre-commit check (auto-captures staged changes):**\n\n```bash\nnpx codex-claude-bridge@latest review-precommit\n```\n\n**Block commits on issues (CI-friendly, exits 2 on blockers):**\n\n```bash\nnpx codex-claude-bridge@latest review-precommit && git commit\n```\n\n**Review a plan:**\n\n```bash\nnpx codex-claude-bridge@latest review-plan --plan plan.md\n```\n\n**Review a diff:**\n\n```bash\ngit diff main | npx codex-claude-bridge@latest review-code --diff -\n```\n\n**Review a branch or landed commits (no pasted diff, no scratch worktree):**\n\n```bash\nnpx codex-claude-bridge@latest review-code --base main            # main..HEAD\nnpx codex-claude-bridge@latest review-code --base v1.2.0 --head v1.3.0\n```\n\n**Review another checkout or worktree:**\n\n```bash\nnpx codex-claude-bridge@latest review-precommit --cwd ../app/.worktrees/feature-x\n```\n\n`--cwd` picks the repository being reviewed: it decides where git captures from, which repository\ninstruction files apply, and where the reviewer runs. Relative paths resolve against your current\ndirectory. It does **not** change how `--plan`, `--diff`, or `--config` are resolved — those stay\nrelative to where you ran the command.\n\nAdd `--json` to any command for raw JSON output. Use `--help` to see all options.\n\n## Tools Reference\n\n### `review_plan`\n\nSend an implementation plan for architectural/feasibility review.\n\n| Parameter    | Type                      | Required | Description                                                                                                                                                                                                                                                                                               |\n| ------------ | ------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `plan`       | string                    | yes      | The implementation plan to review                                                                                                                                                                                                                                                                         |\n| `cwd`        | string                    | no       | Absolute path to the directory this review runs in — the repository or git worktree being reviewed. Omit to use the directory the server was started in. Not expanded for `~`; applies to this call only.                                                                                                 |\n| `context`    | string                    | no       | Project context and constraints                                                                                                                                                                                                                                                                           |\n| `focus`      | string[]                  | no       | Review focus areas (e.g. `[\"architecture\", \"security\"]`)                                                                                                                                                                                                                                                  |\n| `depth`      | `\"quick\"` \\| `\"thorough\"` | no       | Review depth                                                                                                                                                                                                                                                                                              |\n| `session_id` | string                    | no       | Continue from a previous review session                                                                                                                                                                                                                                                                   |\n| `model`      | string                    | no       | Override the model for this call (e.g. `\"gpt-5.6-sol\"` or `\"latest\"`). May be combined with `session_id` to change model mid-session (both providers). Without it a resumed session keeps the model it was recorded with, re-sent on every turn; the bridge reports any different runtime-observed label. |\n\nReturns: `{ verdict, summary, findings[], session_id, models[], provenance }`\n\n### `review_code`\n\nSend a code diff for code review.\n\n| Parameter    | Type     | Required | Description                                                                                                                                                                                                                                                                                                                                 |\n| ------------ | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `diff`       | string   | no       | Git diff to review. Omit to auto-capture `git diff HEAD`.                                                                                                                                                                                                                                                                                   |\n| `base`       | string   | no       | Review a committed range instead: the ref to diff from (e.g. `\"main\"`, `\"origin/main\"`, `\"HEAD~1\"`, a commit). Runs `git diff <base> <head>` in `cwd`. Cannot be combined with `diff`.                                                                                                                                                      |\n| `head`       | string   | no       | The ref to diff to when `base` is given (default: `\"HEAD\"`). Requires `base`.                                                                                                                                                                                                                                                               |\n| `cwd`        | string   | no       | Absolute path to the directory this review runs in — the repository or git worktree being reviewed. Auto-capture, repository instruction files, and the reviewer subprocess all use it. Required for auto-capture unless `require_cwd` is `false`, in which case omitting it uses the server's launch directory. Applies to this call only. |\n| `auto_diff`  | boolean  | no       | Auto-capture working-tree changes via `git diff HEAD` when `diff` is omitted or blank (default: `true`)                                                                                                                                                                                                                                     |\n| `context`    | string   | no       | Intent of the changes                                                                                                                                                                                                                                                                                                                       |\n| `session_id` | string   | no       | Continue from previous review (e.g. plan review session)                                                                                                                                                                                                                                                                                    |\n| `criteria`   | string[] | no       | Review criteria (e.g. `[\"bugs\", \"security\", \"performance\"]`)                                                                                                                                                                                                                                                                                |\n| `model`      | string   | no       | Override the model for this call (e.g. `\"gpt-5.6-sol\"` or `\"latest\"`). May be combined with `session_id` to change model mid-session. Without it a resumed session keeps its recorded model; compare `resolved` and `observed` to see what the runtime recorded.                                                                            |\n\nReturns: `{ verdict, summary, findings[], session_id, models[], provenance }`, plus `captured_from`\nwhen the diff was auto-captured or taken from a `base`/`head` range.\n\nFindings include `file` and `line` references when available.\n\n### `review_precommit`\n\nQuick pre-commit sanity check. Auto-captures staged git changes by default.\n\n| Parameter    | Type     | Required | Description                                                                                                                                                                                                                                                                                                                                 |\n| ------------ | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `auto_diff`  | boolean  | no       | Auto-capture `git diff --staged` (default: `true`)                                                                                                                                                                                                                                                                                          |\n| `diff`       | string   | no       | Explicit diff instead of auto-capture                                                                                                                                                                                                                                                                                                       |\n| `cwd`        | string   | no       | Absolute path to the directory this review runs in — the repository or git worktree being reviewed. Auto-capture, repository instruction files, and the reviewer subprocess all use it. Required for auto-capture unless `require_cwd` is `false`, in which case omitting it uses the server's launch directory. Applies to this call only. |\n| `session_id` | string   | no       | Continue from previous review                                                                                                                                                                                                                                                                                                               |\n| `checklist`  | string[] | no       | Custom pre-commit checks                                                                                                                                                                                                                                                                                                                    |\n| `model`      | string   | no       | Override the model for this call (e.g. `\"gpt-5.6-sol\"` or `\"latest\"`). May be combined with `session_id` to change model mid-session. Without it a resumed session keeps its recorded model; compare `resolved` and `observed` to see what the runtime recorded.                                                                            |\n\nReturns: `{ ready_to_commit, blockers[], warnings[], session_id, models[], provenance }`, plus\n`captured_from` when the diff was auto-captured.\n\n#### Choosing the directory to review (`cwd`)\n\nOne server can review several repositories. Pass `cwd` — an absolute path — and that directory\ndecides everything about where the review happens:\n\n- which repository `auto_diff` / `review_precommit` capture from,\n- which `.github/copilot-instructions.md` and `.github/instructions/*.instructions.md` apply,\n- which directory the reviewer subprocess itself runs in.\n\nOmit `cwd` and the bridge uses the directory the MCP client launched the server in. That default is\nfrequently _not_ where you are working — a git worktree, a second checkout, or an agent driving work\nin another repository all end up somewhere else — which is exactly what `cwd` is for.\n\n```jsonc\n// review the worktree, not wherever the server happens to have been started\n{ \"cwd\": \"/Users/me/code/app/.worktrees/feature-x\" }\n```\n\nRules:\n\n- **Absolute only.** A relative path would resolve against the _server's_ directory, which is the\n  confusion this parameter removes. `~` is not expanded.\n- **Per call.** `cwd` is not stored on the session. Pass it again on every call, including resumes.\n- **Symlinks are fine** — the path is canonicalized with `realpath`, so worktrees reached through a\n  symlink work.\n- A missing path, a broken symlink, a file, or a directory that cannot be read returns\n  `INVALID_INPUT` before any reviewer is contacted.\n- `review_plan` and explicit-diff reviews work in any readable directory. **Auto-capture needs a git\n  work tree**: pointing it at a plain directory returns `INVALID_INPUT` rather than silently\n  reviewing nothing.\n- Capture is anchored at the **repository root**, so a subdirectory still reviews the whole\n  repository — the same thing `git diff` does from a subdirectory.\n\nThe CLI takes the same option as `--cwd <path>`, where relative paths resolve against your shell's\ncurrent directory. It does **not** rebase `--plan`, `--diff`, or `--config`, which stay relative to\nwhere you ran the command.\n\n#### Where the diff came from\n\nAuto-captured results (`review_code` without a `diff`, `review_precommit` without a `diff`) carry\n`captured_from`: the absolute directory the bridge ran git in — the repository root of the resolved\n`cwd`, or of the server's launch directory when you passed none. It is the answer to \"which\nrepository is this review actually about\", and it is worth checking whenever a result surprises you:\nan empty result means \"nothing staged **there**\", not \"nothing staged\".\n\nEmpty auto-captures say so explicitly — `No staged changes found in /path/to/repo` — and git failures\nappend `capture attempted from \"/path/to/repo\"`. If `captured_from` is not the repository you meant,\npass `cwd`, or supply the diff yourself:\n\n```bash\ngit diff --staged | <your client's review_precommit with an explicit diff>\n```\n\nExplicit diffs never carry `captured_from` — even when the bridge resolved a repository for them —\nand the field is never persisted to review history or shown to the reviewer.\n\n### `review_status`\n\nCheck status of a review session.\n\n| Parameter    | Type   | Required | Description         |\n| ------------ | ------ | -------- | ------------------- |\n| `session_id` | string | yes      | Session ID to check |\n\nReturns: `{ status, session_id, elapsed_seconds }`\n\n### `review_history`\n\nQuery past reviews.\n\n| Parameter    | Type   | Required | Description                                                        |\n| ------------ | ------ | -------- | ------------------------------------------------------------------ |\n| `session_id` | string | no       | Query reviews for a specific session                               |\n| `last_n`     | number | no       | Return 1–100 reviews (default: 10 recent; 100 for a session)       |\n| `cursor`     | string | no       | Decimal row cursor returned as `next_cursor` by the preceding page |\n\nReturns: `{ reviews[], next_cursor }`. Recent pages are newest-first; session pages are oldest-first.\nEach entry includes `models` plus `model_metadata_status` (`recorded`, `legacy_unrecorded`, or\n`invalid`). Legacy rows are never backfilled from today's defaults, and malformed stored metadata\nis returned as `models: null`.\n\n## Configuration\n\nCreate `.reviewbridge.json` in your project root to customize review behavior:\n\n```json\n{\n  \"provider\": \"codex\",\n  \"fallback\": true,\n  \"model\": \"gpt-6-astra\",\n  \"reasoning_effort\": \"medium\",\n  \"timeout_seconds\": 300,\n  \"max_chunk_tokens\": 8000,\n  \"review_standards\": {\n    \"plan_review\": {\n      \"focus\": [\"architecture\", \"feasibility\"],\n      \"depth\": \"thorough\"\n    },\n    \"code_review\": {\n      \"criteria\": [\"bugs\", \"security\", \"performance\", \"style\"],\n      \"require_tests\": true\n    },\n    \"precommit\": {\n      \"auto_diff\": true,\n      \"block_on\": [\"critical\", \"major\"]\n    }\n  },\n  \"project_context\": \"Your project description and constraints.\"\n}\n```\n\nAll fields are optional. Missing fields use the defaults shown above. Large diffs are automatically split into chunks of approximately `max_chunk_tokens` tokens and reviewed sequentially. `review_code` and `review_precommit` results report `chunks_reviewed` (how many reviewer calls ran) and, when the diff was split, `chunk_files` — the files each chunk held, in order — so you can tell whether any single call saw two files together.\n\n- **`provider`** — `\"codex\"` (default) or `\"gemini\"`. Selects which backend reviews.\n- **`mode`** — `\"failover\"` (default), `\"single\"`, `\"deliberate\"`, or `\"deliberate-deep\"`. Picks how the two providers combine; see [Provider failover](#provider-failover) and [Deliberation](#deliberation). When unset it's derived from `fallback`.\n- **`fallback`** — `true` (default) auto-fails-over to the other provider when the configured one is out of usage or unavailable. Set `false` (equivalently `\"mode\": \"single\"`) for strict single-provider behavior.\n- **`require_cwd`** — `true` (default) refuses an MCP `review_code`/`review_precommit` call that would auto-capture a diff without `cwd`, returning `INVALID_INPUT` instead of capturing from the server's launch directory (which, from a worktree or second checkout, is silently the wrong repository). Set `false` for a server that only ever serves the repository it was started in. Explicit diffs, `review_plan`, and the CLI are unaffected.\n- **`reasoning_effort`** — Codex only. Gemini's effort is baked into its model name (e.g. `\"Gemini 3.8 Flash (High)\"`), so the field is ignored for Gemini.\n- **`codex_path`** — absolute path to a codex binary for the Codex SDK to spawn (the `CODEX_PATH` env var works too; the config field wins). Normally unnecessary: when unset, the SDK uses its own bundled binary, and if that binary can't run the bridge **auto-discovers** a working system codex from your PATH and the usual install locations (`~/.local/bin`, `/opt/homebrew/bin`, `/usr/local/bin`), retries, and logs the substitution on stderr. Set it explicitly to pin a specific binary — an explicit path disables auto-discovery entirely.\n\n### Where the config is discovered\n\nWhen the MCP server or CLI starts, it looks for `.reviewbridge.json` in this order. The first match wins; nothing is merged.\n\n1. **`RB_CONFIG_PATH` env var** — if set, load exactly that file. Useful when the bridge is launched from a directory that isn't your project (e.g. an MCP host launches it from your home dir). Missing or unreadable file is a hard startup error so typos are surfaced immediately, not silently ignored.\n2. **Walk-up from the working directory** — looks for `.reviewbridge.json` in the current directory, then each parent. The walk stops at the first `.git` boundary so a project nested inside an unrelated git repo doesn't accidentally inherit a parent project's config.\n3. **`$HOME/.reviewbridge.json`** — a per-machine default. Drop one here to pin a model (e.g. `{\"model\": \"gpt-5.6-sol\"}`) for every project on the box without having to touch each one.\n4. **Built-in defaults** — what you get if nothing is found anywhere.\n\nA startup log line on stderr names the source (`[codex-bridge] config source: project (/repo/.reviewbridge.json)`) so you can confirm which file is in effect.\n\nThe CLI's `--config <dir>` flag is an explicit override: it looks only at `<dir>/.reviewbridge.json` and skips the cascade entirely (env vars and `$HOME` are not consulted in that mode).\n\n> **Selected files must parse cleanly.** Once a `.reviewbridge.json` is found, malformed JSON or schema-invalid values abort startup. The walk-up does **not** silently skip past a broken file to the next candidate — that would hide your typo and leave you running on defaults.\n\n### Model selection\n\nTwo selectors pick the reviewing model; a call passes one of them, not both:\n\n- `tier` — pick by capability: `\"max\"`, `\"balanced\"`, or `\"fast\"` (CLI: `--tier`).\n- `model` — pick by id (e.g. `\"gpt-5.6-sol\"`) or `\"latest\"` (CLI: `--model`). A tier word is still accepted here for compatibility.\n\nWhen neither is set, each provider resolves its own default: Codex runs the `balanced` tier and Gemini the `max` tier. Gemini's Flash line is quick but shallower than Codex at the same tier, so the two defaults are meant to land at a comparable depth of review rather than on a matching tier name. Either way `selection` reports `provider_default`, so a caller that needs a specific tier can tell it was never asked for one.\n\n**Tiers** let a caller pick by difficulty or urgency instead of tracking model ids. Each provider maps a tier to its own model, and the tier carries across provider failover:\n\n| Tier       | Pick it for                                                               | Codex          | Gemini                      |\n| ---------- | ------------------------------------------------------------------------- | -------------- | --------------------------- |\n| `max`      | Hardest problems: architecture, concurrency, security, subtle bugs        | `gpt-6-astra`  | `Gemini 3.1 Pro (High)`     |\n| `balanced` | Everyday code and plan review                                             | `gpt-5.6-sol`  | `Gemini 3.8 Flash (High)`   |\n| `fast`     | Small diffs, precommit sanity checks, style passes, quick iteration loops | `gpt-5.6-luna` | `Gemini 3.8 Flash (Medium)` |\n\nRule of thumb for an agent: `fast` for a precommit check or a diff under a few hundred lines with no cross-file logic, `max` when the plan or diff touches concurrency, auth, data integrity, or a design you are unsure about, `balanced` otherwise. The tier name is reported back as `requested` in `models`, with the concrete id in `resolved`. Each `models[]` entry also carries `selection`: `requested` (the call or config chose it), `provider_default` (nothing was asked, so the provider's own default ran — a signal worth gating on), or `session` (a resumed session kept its recorded model).\n\n#### Unknown arguments\n\nTool arguments are written by a model that never sees the server's stderr, so a key the tools do not know is never dropped silently. Each one gets exactly one disposition, reported in the result:\n\n- **Folded** — an alias or near-miss of a real parameter (`modle`, `sessionId`, `working_directory`) whose value validates is rewritten into it and listed in `argument_corrections`.\n- **Echoed** — anything else is ignored, listed in `ignored_arguments` next to `accepted_arguments`, and the review proceeds.\n- **Refused** — an unknown key whose value is a model selector (a tier word, a known model id, or `\"latest\"`) while neither `model` nor `tier` was given returns `INVALID_INPUT` with the fold hint (`did you mean tier: \"max\"?`) before any provider call: proceeding would review at the default tier, and that is the one case where a resend is cheaper than the review. `review_status` and `review_history` only fold or echo.\n\n**Codex** — default `gpt-5.6-sol` (the `balanced` tier). Pass `tier: \"max\"` for `gpt-6-astra`:\n\n| Model          | Description                                                           |\n| -------------- | --------------------------------------------------------------------- |\n| `gpt-6-astra`  | Latest flagship agentic coding model (the `max` tier).                |\n| `gpt-5.6-sol`  | Previous flagship (the `balanced` tier). Default when nothing is set. |\n| `gpt-5.6-luna` | Cheap and fast line (the `fast` tier).                                |\n\n**Gemini** — default `Gemini 3.1 Pro (High)` (the `max` tier). Effort is part of the model name:\n\n| Model                       | Description                                          |\n| --------------------------- | ---------------------------------------------------- |\n| `Gemini 3.1 Pro (High)`     | Heavier reasoning line. Default when nothing is set. |\n| `Gemini 3.8 Flash (High)`   | Balanced review line                                 |\n| `Gemini 3.8 Flash (Medium)` | Fast review line                                     |\n\n`\"latest\"` is a separate selector from the default: it resolves to the newest Flash the installed `agy` lists (falling back to `Gemini 3.8 Flash (High)` if that query fails) for Gemini, or the SDK-pinned flagship for Codex. These are the models we document and recommend; the `model` field, the `model` tool parameter, and the `--model` CLI flag accept any trimmed, control-free selector up to 200 characters, so you can run others. For Gemini, an unrecognized model triggers a non-blocking stderr warning (agy may silently run a different one) — run `agy models` to see the live list.\n\n### Provider failover\n\nWhen `fallback` is on (the default) and both providers are set up, a review that fails because the configured provider is **out of usage or unavailable** (rate-limited / usage cap, model not available on your tier, or not signed in) is automatically retried on the other provider. You'll see a one-line note on stderr:\n\n```\n[codex-bridge] codex unavailable (RATE_LIMITED); falling back to gemini\n```\n\nThe result is tagged with the provider that actually served it (`\"provider\": \"gemini\"`) and carries a `failover` block saying what happened, so a Gemini answer to a Codex request is never mistaken for the primary having served:\n\n```json\n\"failover\": {\n  \"from\": \"codex\",\n  \"error\": \"MODEL_ERROR: Model \\\"gpt-5.3-codex-spark\\\" was rejected, ...\",\n  \"requested_model\": \"gpt-6-astra\",\n  \"carried_model\": \"max\"\n}\n```\n\nEvery result also carries `failover_occurred` (boolean), true exactly when that block is present, so the event is stated outright rather than inferred from an absent field — `review_mode: \"failover\"` alone only means the failover composition is configured. `requested_model` is what the call asked for; `carried_model` is what the other provider was handed. A tier (`max` / `balanced` / `fast`) carries as-is, and a provider-specific id that is one of that provider's tier models is carried as its tier (`gpt-6-astra` → `max`, so Gemini answers with its Pro model rather than dropping to its own default). Any other id cannot be mapped: `carried_model` is `null` and the secondary resolves its own default. The `models[]` entry keeps the original `requested` selector either way. `review_mode` says which composition is _configured_; the presence of `failover` says one actually _happened_. Notes:\n\n- **Fresh reviews only.** A resumed session lives in one provider's conversation store, so a `session_id` review is not failed over — start a fresh review on the other provider to continue.\n- **Data egress.** Failover can send your diff to the other vendor (e.g. OpenAI → Google) when the primary is down. Set `\"fallback\": false` to disable this (also good for CI determinism).\n- Failover never triggers on a bad diff or a malformed model response — only on genuine provider-unavailability.\n\n### Deliberation\n\n`\"mode\": \"deliberate\"` sends `review_plan` and `review_code` to **both** providers independently, then returns where they **agree** vs **diverge** so the caller (Claude Code) can synthesize. Findings both providers flag are high-confidence; findings only one flags need a judgment call.\n\n```json\n{ \"provider\": \"codex\", \"mode\": \"deliberate\" }\n```\n\nThe result keeps the usual shape (a merged `verdict`/`findings`, worst-verdict wins) plus an additive `deliberation` block:\n\n```json\n{\n  \"verdict\": \"reject\",\n  \"findings\": [\n    /* deduped union of both providers */\n  ],\n  \"deliberation\": {\n    \"providers\": [\"codex\", \"gemini\"],\n    \"verdicts\": [\n      { \"provider\": \"codex\", \"verdict\": \"request_changes\" },\n      { \"provider\": \"gemini\", \"verdict\": \"reject\" }\n    ],\n    \"agreement\": \"conflict\", // agree | mixed | conflict\n    \"agreed\": [\n      /* findings BOTH flagged — high confidence */\n    ],\n    \"divergent\": [\n      {\n        \"provider\": \"gemini\",\n        \"finding\": {\n          /* only one flagged */\n        }\n      }\n    ]\n  }\n}\n```\n\nNotes:\n\n- **Cost/egress:** deliberation always runs both providers and sends the diff to both vendors — best for high-stakes reviews, not every precommit. `review_precommit` stays failover under this mode.\n- **Degrades gracefully:** if one provider is out of usage, you get the other's review with `deliberation.degraded` set and `deliberation.agreement: \"degraded\"` (it subsumes failover).\n- **Resumed sessions deliberate too:** passing a `session_id` resumes the review on the provider that owns that session while the _other_ provider reviews fresh, then the two are combined — so plan→code lifecycles keep deliberating instead of silently dropping to one provider. The combined result keeps the resumed session's id.\n- **Per-call toggle:** `review_plan`/`review_code` accept a `deliberate` boolean (CLI: `--deliberate` / `--no-deliberate`) that overrides the configured mode for a single call — `true` forces deliberation, `false` forces single-provider failover. Requesting `deliberate: true` under `\"mode\": \"single\"` returns an error (no second provider).\n- **`review_mode` on every result:** every review result carries a `review_mode` field (`single` / `failover` / `deliberate` / `deliberate-deep`) naming the composition that actually ran, so the absence of a `deliberation` block is never ambiguous.\n\n### Deliberate-deep (cross-review round)\n\n`\"mode\": \"deliberate-deep\"` is deliberation plus one more step: after both providers review, each **divergent** finding (one only one provider flagged) is handed to the **other** provider to adjudicate — confirm it's a real issue, dispute it as a false positive, or mark it unsure. Because providers word findings differently and cite different line numbers, semantically-identical issues often land in `divergent` rather than `agreed`; the cross-review round tells you which of those one-sided findings the other provider actually stands behind.\n\n```json\n{ \"provider\": \"codex\", \"mode\": \"deliberate-deep\" }\n```\n\nEach divergent item gains an optional `adjudication` (the `agreed` findings and top-level shape are unchanged):\n\n```json\n\"divergent\": [\n  {\n    \"provider\": \"codex\",\n    \"finding\": { \"severity\": \"major\", \"category\": \"Null safety\", \"file\": \"src/auth.ts\", \"line\": 5, \"description\": \"…\" },\n    \"adjudication\": { \"by\": \"gemini\", \"verdict\": \"confirmed\", \"reason\": \"returns undefined for a header with no space\" }\n  }\n]\n```\n\nNotes:\n\n- **`verdict`** is `confirmed` (a real issue), `disputed` (a false positive here), or `unsure` (can't tell from the change). `by` is the provider that adjudicated — always the one that did _not_ raise the finding.\n- **Top-level `verdict` is not folded back:** under deliberate-deep the result's `verdict` still reflects both providers' _independent_ reviews (worst-of-both). The per-finding `adjudication`s are advisory input for **your** synthesis — the bridge does not recompute the verdict from them (ISS-015). A `reject` resting on findings the other provider `disputed` still reports `reject`; it's up to you to weigh the adjudications.\n- **Cost:** adds up to two more provider calls per review (one per side that has divergent findings). Skipped entirely when there's nothing divergent. The cross-review subject is sliced to just the files the divergent findings touch, so it stays small even on large diffs.\n- **Best-effort:** if a provider is out of usage or errors during the cross-review round, its side is simply left un-adjudicated and reported in `deliberation.cross_review_failures` — the deliberation result still returns.\n\n## Storage\n\nSet `REVIEW_BRIDGE_DB` to persist review history and session state:\n\n```bash\nexport REVIEW_BRIDGE_DB=~/.review-bridge.db\n```\n\nDefaults to `reviews.db` in the current directory. Set to `:memory:` for ephemeral storage.\n\nReview execution is admitted before large inputs enter a provider: at most four logical reviews may\nrun globally and only one may run for a given `session_id`. Excess work returns `REVIEW_BUSY`\nimmediately. If durable outcome recording fails after a provider succeeds, the successful review is\nstill returned with `provenance.persistence: \"memory_only\"` and a sanitized warning. Synthetic\nno-change/no-staged results use `not_recorded` and do not create or mutate sessions.\n\n## Troubleshooting\n\nError codes are provider-neutral. With `fallback` on (default), many of these auto-recover by retrying on the other provider — the messages below apply when there's no second provider set up or `fallback` is off.\n\n| Error                                                     | Fix                                                                                                                                                                                                                                                                                                                                                                         |\n| --------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `AUTH_ERROR` (Codex)                                      | Run `codex login`, or set `OPENAI_API_KEY`. Check that `~/.codex/auth.json` exists.                                                                                                                                                                                                                                                                                         |\n| `AUTH_ERROR: agy is not authenticated` (Gemini)           | Run `agy` once to sign in with your Google account (AI Pro), then retry.                                                                                                                                                                                                                                                                                                    |\n| `CONFIG_ERROR: 'agy' ... not found on PATH` (Gemini)      | Install the Antigravity `agy` CLI and sign in, or set `\"provider\": \"codex\"`.                                                                                                                                                                                                                                                                                                |\n| `MODEL_ERROR: Model \"X\" is not supported`                 | Try a different model, switch `\"provider\"`, or (Codex) use API-key auth. For Gemini, run `agy models` for valid ids.                                                                                                                                                                                                                                                        |\n| `PROVIDER_UNAVAILABLE: The codex binary could not be run` | On macOS, XProtect can false-positively quarantine the SDK's **bundled** codex binary. The bridge auto-discovers a working system codex (PATH, `~/.local/bin`, `/opt/homebrew/bin`, `/usr/local/bin`) and retries; the stderr log names the binary it picked. If nothing is found, install the Codex CLI (`codex login` machine) or set `\"codex_path\"` to a working binary. |\n| `RATE_LIMITED` (rate limit or usage cap)                  | Wait and retry, or rely on failover to the other provider.                                                                                                                                                                                                                                                                                                                  |\n| `NETWORK_ERROR`                                           | Check your internet connection.                                                                                                                                                                                                                                                                                                                                             |\n| `PROVIDER_MISMATCH`                                       | The `session_id` was created by a different provider. Start a new session, or switch `\"provider\"` back to continue it.                                                                                                                                                                                                                                                      |\n| `REVIEW_BUSY`                                             | Four reviews are already active, or this session already has a review in progress. Retry after the active call finishes.                                                                                                                                                                                                                                                    |\n| `SESSION_ROUTING_UNAVAILABLE`                             | Resume ownership could not be read safely. Restore durable storage or start a fresh review without `session_id`; the bridge will not guess a provider.                                                                                                                                                                                                                      |\n| `REVIEW_TIMEOUT: review timed out`                        | Increase `\"timeout_seconds\"` in `.reviewbridge.json` (default: 300).                                                                                                                                                                                                                                                                                                        |\n| `STORAGE_UNAVAILABLE`                                     | Review storage never opened, usually because the SQLite native addon could not load. Reviews still run; history is not kept. See [SQLite native addon cannot load](#sqlite-native-addon-cannot-load).                                                                                                                                                                       |\n\n### SQLite native addon cannot load\n\nBoth disk-backed and in-memory review storage require `better-sqlite3`'s native addon. If it is missing or incompatible with the MCP host's Node.js version or architecture, the server still starts and keeps serving reviews, but without any review storage: the startup diagnosis is logged once on stderr, `review_history` and `review_status` (for sessions this process is not running) answer `STORAGE_UNAVAILABLE` with that diagnosis, and every review result carries `provenance.persistence: \"not_recorded\"` with the diagnosis as its `warning`. Session resume works only within the running process. Switching `REVIEW_BRIDGE_DB` to `:memory:` cannot fix this. Ordinary database-file failures still fall back to memory after it successfully initializes.\n\n**After a Node.js upgrade or switch** (nvm, Volta, Homebrew), the previously built addon no longer matches the host's ABI and fails with a `NODE_MODULE_VERSION` mismatch. Run `npm rebuild better-sqlite3` in the affected installation with the new Node.js active, then reconnect.\n\nA missing addon can follow an incomplete installation or disabled install scripts; the error alone does not identify the cause. ABI errors can also occur after changing Node.js versions.\n\n1. Stop the bridge and use a terminal with the **same Node.js version and architecture as the MCP host**.\n2. For an npx installation, locate the affected install root from the binding paths in the error: the directory immediately above `node_modules` (typically `~/.npm/_npx/<id>`). For a local installation, use the project containing that `node_modules` directory.\n3. In that directory, run `npm rebuild better-sqlite3 --ignore-scripts=false` and let it finish outside the MCP startup timeout. If it fails, resolve the reported prebuilt-binary download or native build prerequisite error before retrying. A fresh installation must also complete with install scripts enabled.\n4. Restart the MCP connection after the rebuild succeeds.\n\nThe bridge does not rebuild dependencies or remove npm caches automatically. Reconnecting alone may reuse an incomplete npx installation.\n\n## Architecture\n\n```\n                                  ┌─ @openai/codex-sdk ──► OpenAI Codex\nClaude Code ──MCP/CLI──► bridge ──┤\n                          │       └─ agy subprocess ─────► Google Gemini\n                      SQLite DB\n                    (review history)\n```\n\nBoth providers sit behind one `ReviewBackend` seam. Codex uses `@openai/codex-sdk` (which spawns `codex exec` internally; ChatGPT and API-key auth share the same path); Gemini wraps the `agy --print --sandbox` subprocess. A failover decorator wraps the two so an out-of-usage primary retries on the other.\n\n```\nsrc/\n  index.ts          → Entry point (routes to MCP or CLI)\n  mcp.ts            → MCP server startup\n  server.ts         → Server setup, tool registration\n  cli/              → Standalone CLI (Commander.js)\n  tools/            → MCP tool handlers (5 tools)\n  backends/         → Provider backends behind one seam: codex, gemini (agy),\n                      a shared orchestrator, and the failover decorator\n  codex/            → Prompts, Zod response schemas, shared types\n  config/           → .reviewbridge.json loader\n  storage/          → SQLite persistence (reviews, sessions)\n  utils/            → Git diff, chunking, error types\n```\n\n## Development\n\n```bash\ngit clone https://github.com/AmirShayegh/codex-claude-bridge.git\ncd codex-claude-bridge\nnpm install\nnpm test\nnpm run build\n```\n\n| Command             | Description        |\n| ------------------- | ------------------ |\n| `npm test`          | Run tests (Vitest) |\n| `npm run build`     | Bundle with tsup   |\n| `npm run typecheck` | Type checking      |\n| `npm run lint`      | ESLint             |\n| `npm run format`    | Prettier           |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}