Client or integration
Codex App
Area
Proxy and routing
Summary
Follow-up to #11 (the maintainer asked for a new issue if history/sidebar visibility problems remain). With the provider-table routing form, the ChatGPT mobile app's Codex remote thread list hides every thread tagged model_provider = "openai", even though the same threads are listed in Codex Desktop and are served by the same local proxy.
Cause, measured against the local remote-control daemon (codex app-server --remote-control, Codex 0.157.0) over its control socket:
thread/list call |
Result |
no modelProviders (what the mobile remote sends) |
47 threads, all opencodex |
modelProviders: [] |
100 threads = 47 opencodex + 53 openai |
So with no filter, app-server returns only the config.toml root model_provider, which ocx sets to opencodex in the provider-table form (codexClientCompaction=true here).
The openai tags are not legacy-only. Ephemeral thread/start calls without modelProvider against the same daemon were tagged opencodex for 5 different models, but threads created by clients keep getting openai: in this state DB, Desktop-created user threads are 85 openai / 33 opencodex, and mobile-created ones are 8 openai / 2 opencodex. From the user's side, sessions opened by hand "randomly" disappear from the phone while being visible on Desktop.
Both tags reach the same proxy here (the [model_providers.opencodex] table and the root openai_base_url both point at http://127.0.0.1:10100/v1, requires_openai_auth = true), so the difference is list visibility only.
Reproduction
- Provider-table form: root
model_provider = "opencodex" in ~/.codex/config.toml (here via codexClientCompaction=true, codexDesktopAuthless=false, syncResumeHistory=false).
- Pair the ChatGPT mobile app with the Mac's Codex remote control.
- Create threads from Codex Desktop and from the mobile app; some are stored with
model_provider = "openai".
- Open the thread list in the mobile app: the
openai-tagged threads are missing; Desktop still shows them.
- Confirm with
thread/list over the daemon socket: no filter -> only opencodex; modelProviders: [] -> both.
Version
opencodex 2.61.0 running (the 2.65.0 tarball has byte-identical src/codex/inject/routing-target.ts); Codex CLI/app-server 0.157.0; Codex Desktop 26.915.31945; ChatGPT Android app (remote client codex_chatgpt_android_remote).
Operating system
macOS 26.5.2 (arm64) host; Android phone as remote client
Provider and model
Any; observed with openai/gpt-6-luna, opencode-go/deepseek-v4.1-flash, anthropic/claude-haiku-4-5 threads
Logs or error output
No error. The threads are silently absent from the mobile list.
Screenshots and supporting files
No response
Redacted configuration
model_provider = "opencodex"
openai_base_url = "http://127.0.0.1:10100/v1"
[model_providers.opencodex]
name = "OpenCodex Proxy"
base_url = "http://127.0.0.1:10100/v1"
wire_api = "responses"
requires_openai_auth = true
What would help
Any one of these would remove the trap:
- In the provider-table form, keep user-facing threads (
source vscode/cli) tagged with the active proxy provider id, e.g. as an opt-in part of history sync, since clients keep creating openai-tagged threads after injection.
- Document this as a known limitation of the provider-table form next to the Desktop label note, with the
modelProviders: [] evidence.
- If it belongs upstream (app-server's default
thread/list provider filter, or the mobile client not sending modelProviders), say so and I will file it with openai/codex.
Local workaround in use: a periodic retag of openai -> opencodex for recent vscode/cli threads. Upsert writes the in-memory provider back while a thread is loaded, so the retag has to repeat.
Checks
Client or integration
Codex App
Area
Proxy and routing
Summary
Follow-up to #11 (the maintainer asked for a new issue if history/sidebar visibility problems remain). With the provider-table routing form, the ChatGPT mobile app's Codex remote thread list hides every thread tagged
model_provider = "openai", even though the same threads are listed in Codex Desktop and are served by the same local proxy.Cause, measured against the local remote-control daemon (
codex app-server --remote-control, Codex 0.157.0) over its control socket:thread/listcallmodelProviders(what the mobile remote sends)opencodexmodelProviders: []opencodex+ 53openaiSo with no filter, app-server returns only the config.toml root
model_provider, which ocx sets toopencodexin the provider-table form (codexClientCompaction=truehere).The
openaitags are not legacy-only. Ephemeralthread/startcalls withoutmodelProvideragainst the same daemon were taggedopencodexfor 5 different models, but threads created by clients keep gettingopenai: in this state DB, Desktop-created user threads are 85openai/ 33opencodex, and mobile-created ones are 8openai/ 2opencodex. From the user's side, sessions opened by hand "randomly" disappear from the phone while being visible on Desktop.Both tags reach the same proxy here (the
[model_providers.opencodex]table and the rootopenai_base_urlboth point athttp://127.0.0.1:10100/v1,requires_openai_auth = true), so the difference is list visibility only.Reproduction
model_provider = "opencodex"in~/.codex/config.toml(here viacodexClientCompaction=true,codexDesktopAuthless=false,syncResumeHistory=false).model_provider = "openai".openai-tagged threads are missing; Desktop still shows them.thread/listover the daemon socket: no filter -> onlyopencodex;modelProviders: []-> both.Version
opencodex 2.61.0 running (the 2.65.0 tarball has byte-identical
src/codex/inject/routing-target.ts); Codex CLI/app-server 0.157.0; Codex Desktop 26.915.31945; ChatGPT Android app (remote clientcodex_chatgpt_android_remote).Operating system
macOS 26.5.2 (arm64) host; Android phone as remote client
Provider and model
Any; observed with openai/gpt-6-luna, opencode-go/deepseek-v4.1-flash, anthropic/claude-haiku-4-5 threads
Logs or error output
No error. The threads are silently absent from the mobile list.
Screenshots and supporting files
No response
Redacted configuration
What would help
Any one of these would remove the trap:
sourcevscode/cli) tagged with the active proxy provider id, e.g. as an opt-in part of history sync, since clients keep creatingopenai-tagged threads after injection.modelProviders: []evidence.thread/listprovider filter, or the mobile client not sendingmodelProviders), say so and I will file it with openai/codex.Local workaround in use: a periodic retag of
openai->opencodexfor recent vscode/cli threads. Upsert writes the in-memory provider back while a thread is loaded, so the retag has to repeat.Checks