Repository navigation
opencodex部署在远端主机,本地codex app如何实现自动注入远端模型 #2288
Description
Activity
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentation
on Aug 21, 2026 Correction after rechecking the current
devinjection contract: my HTTPS example above used the obsolete header form. Codex CLI 0.146+ should useenv_key, notenv_http_headers.The SSH-tunnel recommendation is unchanged and remains the safest first test:
# root keys, before the first [table] model_catalog_json = "/absolute/local/path/to/opencodex-catalog.json" openai_base_url = "http://127.0.0.1:20100/v1"
Do not set
model_provider = "opencodex"for that loopback/tunnel form.If a trusted TLS endpoint requires the dedicated provider form, the corrected configuration is:
# root keys model_provider = "opencodex" model_catalog_json = "/absolute/local/path/to/opencodex-catalog.json" [model_providers.opencodex] name = "OpenCodex Remote" base_url = "https://your-host/v1" wire_api = "responses" requires_openai_auth = true env_key = "OPENCODEX_API_AUTH_TOKEN"
Set
OPENCODEX_API_AUTH_TOKENin the local Codex App/CLI environment. This keeps the login/account UX while using the remote OpenCodex admission token. Thank you to the follow-up review for catching the outdated field. The issue should remain open withneeds-infountil the SSH-tunnel path is confirmed.- addedneeds-infoWaiting on reporter for a concrete spec or reproductionWaiting on reporter for a concrete spec or reproduction
on Aug 21, 2026 리뷰 · 우선순위 41 / 80
지금
devHEADd23c3179f에서 코드가 이미 답을 갖고 있음. 리포터 설정은model_provider = "opencodex"+[model_providers.opencodex]+requires_openai_auth = false. 그게 ChatGPT 로그인 UX를 죽임.src/codex/inject.ts:213-238buildProviderTableBlock()은 전용 테이블을 쓸 때 항상requires_openai_auth = true.false는 주입 계약이 아님. 루프백은 아예 그 테이블을 안 씀. Design B (inject.ts:113-119,:783-806)는shouldInjectApiAuthHeader()가 거짓일 때 루트openai_base_url만 넣고 네이티브openai프로바이더 id를 유지함. 히스토리 리태그 없음. 로그인 상태 유지가 그 경로임. 전용 테이블 +false는 로컬 주입이 절대 안 쓰는 조합임.원격 프로세스가 로컬
$CODEX_HOME을 자동으로 못 씀.injectCodexConfig(inject.ts:672)는 그 프로세스의CODEX_CONFIG_PATH만 읽음 (:688). 카탈로그도 그 머신 경로.chooseCatalogPathForInjection(:648-661) /setRootModelCatalogPath(:500-504). 기본 파일은src/codex/paths.tsDEFAULT_CATALOG_PATH = join(CODEX_HOME, "opencodex-catalog.json"). 원격에서 만든 JSON을 로컬 Codex 앱이 직접 못 봄. 복사가 필요함. "자동 주입"은 빠진 기능이 아니라 로컬 파일 계약임.Ingwannu가 말한 SSH 터널이 코드랑 맞음.
src/server/auth-cors.ts:50-55가ssh -L 20100:localhost:10100을 루프백 Host로 인정함. 포트가 달라도 hostname이 루프백이면 됨. 터널이면 로컬 Codex는 Design B처럼 루트openai_base_url = "http://127.0.0.1:20100/v1"+ 로컬로 복사한model_catalog_json이면 됨.model_provider = "opencodex"넣지 말 것. 넣으면inject.ts:697-717이 외부 프로바이더로 보고 주입을 건너뜀. 사용자 소유 루트openai_base_url도 안 덮음 (:1097-1110). 원격 OpenCodex는 루프백에 묶는 게 안전함.HTTPS로 원격 노출할 때만 전용 테이블임. 그때도
requires_openai_auth = true. 현재 주입은env_http_headers가 아니라env_key = "OPENCODEX_API_AUTH_TOKEN"(inject.ts:229-236, #2073). 토큰을 TOML에 박지 말 것. Codex 인증 컨텍스트가 원격으로 가니까 TLS/SSH만. 원격 호스트에서 끝나는 프로바이더 OAuth는 거기서 끝내거나 콜백 포트를 같이 포워드. 메인 계정 로그인이 "원격에서 안 되냐"는 Direct 모드가 호출자 Codex 로그인을 쓰는 거랑, 원격 박스에서 OAuth를 띄우는 거랑 다름.문서 구멍은 맞음. README/
docs에ssh -L레시피가 없음.docs/codex-app-model-catalog.md는model_catalog_json로컬 경로만 말함. 코드 버그 아님. needs-info. 리포터가 터널 폼을 확인하기 전엔 구현 PR 열지 말 것. 원격→로컬 자동 카탈로그 푸시 만들지 말 것.$CODEX_HOME을 네트워크로 쓰지 말 것. #1168이랑 다른 레인임. 카탈로그 쿼타 이슈 아님.#2188 L1–L9 사이드카 이미
dev.x_search넣지 말 것. Grok OAuth Chat 기본(#2255)/GUI 옵트인 Responses(#2266)랑 다른 레인임.types.ts/config.ts스플릿 안 씹힘. 스키마 PR 아님. 프리뷰 배포 아님. v2.29.0 이미 태그됨. 핫 크래시 아님. 비전공자 오퍼레이터가 전용 프로바이더 폼으로 로그인을 날리는 문서 구멍임. 그래서 41.해결방안: 이 이슈는 문서로 열어 둬라. 권장 경로는 원격 루프백 + SSH 터널 + 로컬
openai_base_url+ 로컬로 복사한model_catalog_json.requires_openai_auth = false쓰지 말 것. 전용 테이블이 필요하면true+env_key. 자동 원격 주입 피처로 키우지 말 것. 리포터 확인 나오면 문서 PR 하나. 스플릿이inject.ts를 옮기면 리베이스하지 말고 닫고 다시 짜라. 지금은 그 정도 아님.이 댓글은 grok-bot이 작성했습니다
1.把category json下载到本地
2.不用主账号登录,号池添加账号即可
3.配置增加个header 设置api key
4.本地我都不登录账号了,就像用中转一样补充说明:上面的 1–4 步是一种“把远端 OCX 当作中转/账号池”的可选方案,但它不会保留本地 Codex App 的 ChatGPT 主账号登录体验,所以不能直接回答本 issue 的原始需求。
如果目标是“本地仍保持 ChatGPT 登录,同时调用远端 OCX 模型”,当前受支持且风险最低的验证路径仍然是 SSH 隧道:把远端
127.0.0.1:10100映射到本地127.0.0.1:20100,在本地复制远端生成的 catalog,并只设置根级openai_base_url = "http://127.0.0.1:20100/v1"。不要设置model_provider = "opencodex";该专用 provider 形态会改变原生账号/历史语义。若必须直接暴露可信 HTTPS 端点,则使用
requires_openai_auth = true与env_key = "OPENCODEX_API_AUTH_TOKEN",不要把 token 写进 TOML。该模式与 SSH 隧道的本地原生 provider 语义不同。请 issue 作者确认 SSH 隧道 + 本地 catalog 方案是否能保留登录并正常切换模型;在得到这个结果前保留
needs-info。我现在应该怎么做,可否提供一个可以尝试或者正确的配置方式呢
可以。若目标是 本地 Codex App 继续保持 ChatGPT 登录,同时使用远端 OpenCodex 模型,请先只测试下面这条最小路径。
- 远端服务器让 OpenCodex 只监听
127.0.0.1:10100,不要把该端口直接暴露到公网。 - 在本地电脑保持一个 SSH 隧道:
ssh -N -L 20100:127.0.0.1:10100 your-user@your-server
- 把远端生成的
opencodex-catalog.json安全复制到本地,例如本地保存为:
C:\Users\你的用户名\.codex\opencodex-remote-catalog.json或 macOS/Linux:
~/.codex/opencodex-remote-catalog.json- 在 本地
~/.codex/config.toml的根级位置加入下面两行:
model_catalog_json = "/absolute/local/path/opencodex-remote-catalog.json" openai_base_url = "http://127.0.0.1:20100/v1"
Windows 路径建议用正斜杠,例如:
model_catalog_json = "C:/Users/your-name/.codex/opencodex-remote-catalog.json" openai_base_url = "http://127.0.0.1:20100/v1"
- 不要加入下面这些内容:
model_provider = "opencodex" [model_providers.opencodex] requires_openai_auth = false
它们会改变本地原生账号语义,正是你看到 ChatGPT 登录状态消失的原因。
- 保持 SSH 命令运行,然后只重启本地 Codex App。远端 catalog 更新后需要再次复制到本地;目前远端进程不会自动写入本地
$CODEX_HOME。
如果仍失败,请回复三项经过脱敏的信息:本地操作系统、SSH 隧道命令的错误输出、以及本地
config.toml中上述两行的实际路径。不要贴 token。确认这条路径可用后,我们再把它整理成正式文档。- 远端服务器让 OpenCodex 只监听
最新成功测试(opencodex、chatgpt客户端均是最新版),在本地config.toml设置中调整或新增以下配置
model_provider = "opencodex" #服务器下载的model_catalog_json model_catalog_json = "opencodex-catalog.json" [model_providers.opencodex] name = "opencodex" #替换为自己的地址 base_url = "https://opencodex/v1" wire_api = "responses" requires_openai_auth = true #替换为自己的key [model_providers.opencodex.http_headers] X-Opencodex-Api-Key = "ocx_data_xxxxxx"
这样可以也保持本机登录chatgpt账号,可以使用快速模式,模型列表也能看到其他自定义模型
也可以不登录chatgpt账号,纯当中转用,由opencodex统一管理账号,auth.json里使用opencodex api key即可
远程服务器可使用codex login --device-auth 登录主账号
Reacted by lpp and AaronClosing as implemented on
dev. Thanks @mobaicloud — 远端主机部署 + 本地 Codex app 自动注入远端模型 现在有了正式路径。The Remote Hub CLI and sync landed in 91a4f6c:
src/client/connect.tsperforms the hub readiness check, pairing-grant exchange, and model sync against the remote management URL.- The guide is at
docs-site/src/content/docs/guides/remote-hub.md, which documents connecting a local client to a hub running on another host.
如果按指南操作后仍有模型没有注入,请开新 issue 并附上
ocx connect的输出和/healthz结果。
Documentation problem type
Missing documentation
Documentation location
https://github.com/lidge-jun/opencodex/
What is wrong or missing?
已经实现了远端部署,调用模型也没问题,但是无法像在本地运行那样同时保持codex账号登录及第三方模型的随意调用,我没有找到相关文档,尝试了两个小时也没有成功。
我使用了这样的配置:
model_provider = "opencodex"
[model_providers.opencodex]
name = "OpenCodex Remote"
base_url = "xxx/v1"
wire_api = "responses"
requires_openai_auth = false
但是codex账号状态就会丢失
如果我取消这个配置,codex账号状态恢复,但是无法调用opencodex里的模型
另外远端部署的opencodex,主账号也是无法登录的吗?
What should the documentation explain instead?
已经实现了远端部署,调用模型也没问题,但是无法像在本地运行那样同时保持codex账号登录及第三方模型的随意调用,我没有找到相关文档,尝试了两个小时也没有成功。
Suggested wording or example
No response
Additional context or attachments
No response
Checks