Repository navigation
[Bug]: ocx status reports the proxy healthy while routing is native, so nothing actually routes #2411
Description
Client or integration
Codex CLI
Area
Proxy and routing
Summary
ocx status reports the proxy running and healthy in a state where no routed request can succeed, because Codex is not pointed at the proxy. The user-visible error blames the model or the account, so the real cause is hard to find.
ocx doctor does detect the condition (routing=native). ocx status does not mention routing at all, and it is the command people run first.
Reproduction
-
Get into the state: have a running proxy while
~/.codex/config.tomlhas noopenai_base_url. This happens afterocx restore/ocx stop, or when the autostart shim is replaced by a version-manager reinstall ofcodex(filed separately as [Bug]: a package-manager reinstall of codex destroys the shim and its .opencodex-real backup, with no self-heal #2412). -
Ask
ocx statuswhether things are working:ocx status
✅ Proxy: running (PID 59101) Health: http://127.0.0.1:10100/healthz ok (live) -
Confirm the proxy itself really is fine, by calling it directly:
P=$(jq -r .port ~/.opencodex/runtime-port.json) curl -s -X POST localhost:$P/v1/responses \ -H 'content-type: application/json' -H 'authorization: Bearer probe' \ -d '{"model":"opencode-go/deepseek-v4-pro","input":"say ok","stream":false}' \ | jq -r '.output[]?|select(.type=="message")|.content[0].text'
ok -
Now make the same request through Codex:
codex exec -m opencode-go/deepseek-v4-pro -s read-only --skip-git-repo-check \ "Reply with exactly: ok" < /dev/null
ERROR: The 'opencode-go/deepseek-v4-pro' model is not supported when using Codex with a ChatGPT account.That error reads as an auth or entitlement problem. It is neither — Codex sent the request to the real OpenAI endpoint, which does not know the namespaced model id.
-
The two checks that actually discriminate:
ocx doctor | grep -A2 'Codex restart safety' # ok native Codex routing (no opencodex restart dependency) # routing=native, service=installed-but-unhealthy, shim=stale grep -c openai_base_url ~/.codex/config.toml # 0
-
ocx restore backfixes it, adding exactly three lines and removing nothing:model_catalog_json = "/home/<user>/.codex/opencodex-catalog.json" # Auto-injected by opencodex openai_base_url = "http://127.0.0.1:10100/v1"
Expected: ocx status indicates that routing is native and that the running proxy is therefore unused.
Actual: ocx status shows only green proxy health, with no routing information.
Version
opencodex 2.29.0
Operating system
Ubuntu 24.04.4 LTS (WSL2, kernel 6.18.33.2-microsoft-standard-WSL2)
Provider and model
opencode-go / deepseek-v4-pro (any routed provider/model id reproduces it)
Logs or error output
$ ocx status
✅ Proxy: running (PID 59101)
Health: http://127.0.0.1:10100/healthz ok (live)
$ codex exec -m opencode-go/deepseek-v4-pro "Reply with exactly: ok"
ERROR: The 'opencode-go/deepseek-v4-pro' model is not supported when using Codex with a ChatGPT account.
$ ocx doctor | grep -A2 'Codex restart safety'
Codex restart safety
ok native Codex routing (no opencodex restart dependency)
routing=native, service=installed-but-unhealthy, shim=stale
Suggested fix: surface routing state in ocx status and warn on the healthy-proxy-plus-routing=native combination — ocx doctor already computes it. A more specific error when a namespaced provider/model id reaches the native OpenAI endpoint would also point at the real cause instead of the account.
Activity
github-actions commentedon Aug 22, 2026
Issue reopened
The report now contains the information required by the automated check. Thanks for updating it.
lidge-jun commentedon Aug 22, 2026
리뷰 · 우선순위 57 / 80
설명: 이 이슈는 프록시가 살아 있는데 코덱스가 프록시를 안 보고, ocx status 가 초록만 보여서, 사용자는 모델이나 계정 오류로 읽는다고 한다. 원인은 2412 심 파괴와 같다. 지금 CURRENT
devHEAD 는4f41a8e93이다. 이번 시간에 origin/dev 는 그대로다. 새 머지는 없다. 착지는 여전히 2396 사용량 CLI 오늘 비용이다. package.json 은 2.27.0 이다. src/config.ts 는 3975줄이다. src/runtime 폴더는 지금 HEAD 에 없다. 지금 HEAD 의 src/cli/index.ts 843줄 handleStatus 는 프록시 피아이디나 health 가 괜찮으면 초록으로 찍는다. 라우팅이 네이티브여도 같다. 867줄 Restart safety 는 startupHealthSummary 를 쓴다. src/codex/autostart-health.ts 144줄은 네이티브를 오픈코덱스 재시작 의존이 없다고 좋은 말로 적는다. 프록시가 안 쓰인다는 말은 없다. src/cli/doctor.ts 983줄은 같은 요약을 찍고, 985줄에 routing= 을 붙인다. 작성자가 본 routing=native 는 닥터에만 있다. 상태 사람 글에는 routing= 이 없다. src/codex/inject.ts 403줄 getCodexRoutingKind 는 설정 파일이 없거나 openai_base_url 이 없으면 native 다. 작성자 재현과 같다. 직접 프록시로 보낸 요청은 되고, 코덱스 exec 는 진짜 오픈에이아이로 가서 네임스페이스 모델이 챗지피티 계정에서 안 된다고 한다. 작성자 버전은 2.29.0 이다. 지금 origin/dev 패키지는 2.27.0 이지만 같은 상태 초록 길이 있다. PR 이 아직 없다. bug, account-pool, catalog, cli, proxy 라벨이 있다. 사용자 길이로는 프록시가 살아 있는데 요청이 네이티브로 가서 계정 오류처럼 보이는 구멍이라서 57. 카탈로그 팁은 Ox Alpha x-preview-f-free + deepseek-v4-flash-vision-exp. Cursor 정적 카탈로그는 opus-4-8-fast / opus-5-fast. 2334 CursorCredentialRouter 는 여전히 src/providers/cursor-pool.ts 모듈+테스트만 있고 어댑터에 연결되지 않았다. 2332 H2 는 discovery 전용. 2320 overflow + 2342 는 이미 dev. 2188 사이드카는 이미 dev. 2382 데스크톱 앱 재시작은 이미 dev. 2292 는 아직 연다.src/cli/index.ts 라인 843 - 프록시가 살아 있으면 초록이다. 라우팅이 native 여도 첫 줄이 바뀌지 않는다
src/cli/index.ts 라인 867 - Restart safety 는 네이티브를 재시작 의존이 없다고 찍는다. 프록시가 안 쓰인다는 경고가 아니다
src/codex/autostart-health.ts 라인 144 - native 요약은 좋은 말이다. 닥터도 이 줄을 ok 로 찍는다
src/cli/doctor.ts 라인 985 - routing= 은 닥터에만 있다. 상태 사람 글에는 같은 칸이 없다
src/codex/inject.ts 라인 403 - 설정에 openai_base_url 이 없으면 native 다. 작성자 재현과 같다
이슈 본문 2.29.0 - 작성자 버전이다. 지금 origin/dev 는 2.27.0 이지만 같은 상태 초록 구멍이 있다
메인테이너의 판단이 필요한 지점
너의 추천
닥터가 이미 가진 routing= 을 상태에 경고로 올린다. 프록시 초록과 네이티브 라우팅이 같이 있으면 프록시가 안 쓰인다고 말하게 한다. 이슈는 열어 둔다. 2412 는 닫지 않는다. 라벨은 그대로 둔다. 프리뷰 배포가 아니다.
이 댓글은 grok-bot이 작성했습니다
fix(management): validate the sidecar pair against the submitted back…
fix(cli): report Codex routing in ocx status and name an unused proxy (…
fix(codex): report a destroyed shim instead of bailing silently (#2519)
devlog: operator visibility train roadmap unit (260825) (#2520)
lidge-jun commentedon Aug 25, 2026
Landed on
devasb06cb1b4dvia #2518. PRs here targetdev, so GitHub does not auto-close.ocx statusnow prints the routing tokenocx doctoralready printed, and warns when a live proxy is paired with native routing. Reproduced against a running proxy before and after:The proxy line keeps its check on purpose: that claim is narrow and true, which your own successful
curldemonstrated. The missing signal was added rather than the honest one corrupted.fix(management): validate the sidecar pair against the submitted back…
fix(cli): report Codex routing in ocx status and name an unused proxy (…
fix(codex): report a destroyed shim instead of bailing silently (lidg…
devlog: operator visibility train roadmap unit (260825) (lidge-jun#2520)
fix(management): validate the sidecar pair against the submitted back…
fix(cli): report Codex routing in ocx status and name an unused proxy (…
fix(codex): report a destroyed shim instead of bailing silently (lidg…
devlog: operator visibility train roadmap unit (260825) (lidge-jun#2520)