You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Correction after rechecking the current dev injection contract: my HTTPS example above used the obsolete header form. Codex CLI 0.146+ should use env_key, not env_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:
Set OPENCODEX_API_AUTH_TOKEN in 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 with needs-info until the SSH-tunnel path is confirmed.
지금 dev HEAD d23c3179f에서 코드가 이미 답을 갖고 있음. 리포터 설정은 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를 옮기면 리베이스하지 말고 닫고 다시 짜라. 지금은 그 정도 아님.
Activity
Ingwannu commentedon 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:
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:
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.lidge-jun commentedon 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이 작성했습니다
spinachomes commentedon Aug 21, 2026
1.把category json下载到本地
2.不用主账号登录,号池添加账号即可
3.配置增加个header 设置api key
4.本地我都不登录账号了,就像用中转一样
Ingwannu commentedon Aug 21, 2026
补充说明:上面的 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。mobaicloud commentedon Aug 22, 2026
我现在应该怎么做,可否提供一个可以尝试或者正确的配置方式呢
Ingwannu commentedon Aug 29, 2026
可以。若目标是 本地 Codex App 继续保持 ChatGPT 登录,同时使用远端 OpenCodex 模型,请先只测试下面这条最小路径。
127.0.0.1:10100,不要把该端口直接暴露到公网。opencodex-catalog.json安全复制到本地,例如本地保存为:或 macOS/Linux:
~/.codex/config.toml的根级位置加入下面两行:Windows 路径建议用正斜杠,例如:
它们会改变本地原生账号语义,正是你看到 ChatGPT 登录状态消失的原因。
$CODEX_HOME。如果仍失败,请回复三项经过脱敏的信息:本地操作系统、SSH 隧道命令的错误输出、以及本地
config.toml中上述两行的实际路径。不要贴 token。确认这条路径可用后,我们再把它整理成正式文档。spinachomes commentedon Aug 30, 2026
最新成功测试(opencodex、chatgpt客户端均是最新版),在本地config.toml设置中调整或新增以下配置
这样可以也保持本机登录chatgpt账号,可以使用快速模式,模型列表也能看到其他自定义模型
也可以不登录chatgpt账号,纯当中转用,由opencodex统一管理账号,auth.json里使用opencodex api key即可
远程服务器可使用codex login --device-auth 登录主账号
lidge-jun commentedon Sep 3, 2026
Closing 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.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结果。