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
Thanks for writing this up. I hit a very similar Codex App sidebar symptom on Windows: project threads looked like they disappeared while opencodex was active, but ocx restore made them visible again.
I opened #13 as a related safety change. It makes resume-history remapping opt-in instead of rewriting existing openai threads to opencodex during injection. That PR intentionally does not claim to fully close this issue, because your observation suggests another possible path too: Codex App may be filtering existing openai project threads when the root model_provider is switched to opencodex, even if the old rows remain openai.
I split out the separate ocx restore --help side effect into #14. That PR only fixes the CLI help safety issue: help flags are handled before any restore/eject/uninstall/start-style command can mutate config.
I reproduced the same sidebar behavior on Windows. After starting opencodex and restarting Codex App, the zerodi-wd1 project section showed no chats while opencodex was active. After stopping/restoring the proxy, the same project chats became visible again.
Important detail: this happened with syncResumeHistory: false, so opencodex was not rewriting the old resume history rows in this run.
Local data was still present after the UI hid the chats:
platform: Microsoft Windows NT 10.0.26200.0
PowerShell: 7.6.2
opencodex: 2.1.3 dev checkout, started with `bun run src/cli.ts start`
syncResumeHistory: false
defaultProvider: umans
configured providers: openai, umans, openrouter, opencode-go
~/.codex/state_5.sqlite integrity_check: ok
threads_count: 252
provider_count openai: 229
provider_count opencode_go: 11
provider_count openrouter: 6
provider_count codexchange: 5
provider_count probe: 1
unarchived: 53
zerodi-wd1 thread rows:
openai archived=0: 13
openai archived=1: 72
opencode_go archived=0: 10
openrouter archived=0: 5
codexchange archived=0: 5
probe archived=0: 1
So this looks less like data deletion and more like Codex App filtering project threads based on the active root provider/catalog state. In this run, most existing project threads stayed as model_provider = openai, but they were hidden while the active root provider was opencodex.
Current workaround is still ocx restore / stop proxy, then restart Codex App.
Follow-up after the Windows repro: I think the framing should be slightly different.
The resume-history remap is not just an unsafe mutation; it is also the practical compatibility mode that makes existing OpenAI-backed chats visible while opencodex is the active provider. From the user's point of view, preserving existing chats in the sidebar is the important behavior.
So I updated #13 to frame syncResumeHistory as an explicit compatibility mode:
default off: do not mutate Codex's local thread index automatically;
opt-in on: remap old openai rows to opencodex so existing chats can appear while the proxy is active;
restore remains responsible for mapping remapped rows back to openai.
That still leaves the underlying Codex App provider-filtering behavior unresolved, but it makes the opencodex-side tradeoff clearer.
So the practical workaround for existing chat visibility is syncResumeHistory=true. Without the remap, the local data remains intact but Codex App hides most old OpenAI-backed project chats while opencodex is active.
Investigation update: I am actively debugging this now from a more precise reproduction path.
Current repro from the maintainer environment:
The local opencodex (ocx) — Universal provider proxy for Codex
Usage:
ocx init Interactive setup (provider + Codex config injection)
ocx start [--port ] Start the proxy server (auto-syncs models to Codex)
ocx stop Stop the proxy AND restore native Codex (plain codex works again)
ocx restore Restore native Codex without stopping (alias: eject)
ocx uninstall Remove service/shim/config and restore native Codex
ocx service Run as a background service (install|start|stop|status|uninstall)
ocx codex-shim Auto-start proxy when codex launches (install|status|uninstall)
ocx ensure Ensure the proxy is running and Codex config/cache are current
ocx sync Fetch models from providers and inject into Codex config
ocx sync-cache Refresh Codex's model cache from the active catalog
ocx status Check proxy server status
ocx login OAuth login (xai) — opens browser, stores token in ~/.opencodex/auth.json
ocx logout Remove a stored OAuth login
ocx update Update opencodex to the latest published version
ocx help Show this help message
Examples:
ocx init Set up provider and inject into Codex
ocx start Start on default port (10100)
ocx start --port 8080 Start on custom port
ocx sync Sync available models to Codex command is symlinked through opencodex (ocx) — Universal provider proxy for Codex
Usage:
ocx init Interactive setup (provider + Codex config injection)
ocx start [--port ] Start the proxy server (auto-syncs models to Codex)
ocx stop Stop the proxy AND restore native Codex (plain codex works again)
ocx restore Restore native Codex without stopping (alias: eject)
ocx uninstall Remove service/shim/config and restore native Codex
ocx service Run as a background service (install|start|stop|status|uninstall)
ocx codex-shim Auto-start proxy when codex launches (install|status|uninstall)
ocx ensure Ensure the proxy is running and Codex config/cache are current
ocx sync Fetch models from providers and inject into Codex config
ocx sync-cache Refresh Codex's model cache from the active catalog
ocx status Check proxy server status
ocx login OAuth login (xai) — opens browser, stores token in ~/.opencodex/auth.json
ocx logout Remove a stored OAuth login
ocx update Update opencodex to the latest published version
ocx help Show this help message
Examples:
ocx init Set up provider and inject into Codex
ocx start Start on default port (10100)
ocx start --port 8080 Start on custom port
ocx sync Sync available models to Codex into the current dev checkout.
2. makes the Codex App sidebar look empty, including older OpenAI-backed chats and chats created while opencodex was active.
3. ✅ Proxy (PID 67578) stopped.
↩️ opencodex not present in Codex config./restore makes the older OpenAI-backed chats visible again, but chats created while opencodex was active still do not appear.
Current evidence suggests there are two filters involved, not just one:
: when the active root provider is opencodex (ocx) — Universal provider proxy for Codex
Usage:
ocx init Interactive setup (provider + Codex config injection)
ocx start [--port ] Start the proxy server (auto-syncs models to Codex)
ocx stop Stop the proxy AND restore native Codex (plain codex works again)
ocx restore Restore native Codex without stopping (alias: eject)
ocx service Run as a background service (install|start|stop|status|uninstall)
ocx sync Fetch models from providers and inject into Codex config
ocx status Check proxy server status
ocx login OAuth login (xai) — opens browser, stores token in ~/.opencodex/auth.json
ocx logout Remove a stored OAuth login
ocx update Update opencodex to the latest published version
ocx help Show this help message
Examples:
ocx init Set up provider and inject into Codex
ocx start Start on default port (10100)
ocx start --port 8080 Start on custom port
ocx sync Sync available models to Codex, existing rows can be hidden.
: many opencodex-created rows are stored as , while the current opencodex history remap code only treats and as resumable/project-sidebar candidates.
I am digging into the Codex/codex-rs history semantics in parallel and working on an opencodex-side compatibility fix. I will keep #13 as related but not final until this provider+source behavior is accounted for.
Correction / refined investigation update: the previous maintainer comment was partially corrupted by shell quoting. This is the accurate reproduction and current hypothesis.
Maintainer repro:
The local ocx command resolves to the development checkout: /Users/jun/.local/bin/ocx -> /Users/jun/Developer/new/700_projects/opencodex/dist/bin/ocx -> ../../src/cli.ts.
ocx start makes all Codex App project history disappear from the sidebar, including old OpenAI chats and chats created while opencodex was active.
ocx stop restores the old OpenAI-side chats.
Chats created while opencodex was active remain hidden after ocx stop.
Current local DB evidence suggests this is a two-axis visibility problem, not only a provider-label problem:
old visible rows are mostly model_provider = openai with source IN (cli, vscode);
opencodex-created project rows are mostly model_provider = opencodex with source = exec;
the current opencodex history compatibility helper only remaps provider for resumable sources (cli, vscode).
So #13 is still useful as a safety change: it stops automatic mutation by default and makes the OpenAI->opencodex provider remap explicit via syncResumeHistory: true. But it is not the full fix for this issue because it does not address opencodex-created rows whose source is exec.
I am investigating Codex App / codex-rs filtering semantics now and will patch opencodex only with a reversible, opt-in compatibility path. The working devlog is devlog/220_codex-app-history-visibility/00_plan.md.
Update: pushed a follow-up fix to dev in 3244d28 (fix: eject opencodex history on native restore). This follow-up builds on @0disoft's PR #13 (Preserve Codex resume history by default) and the reproduction tracked here in #11.
Local testing found one more native-restore failure mode: after ocx stop, ~/.codex/config.toml no longer contains [model_providers.opencodex], but existing Codex history rows / rollout session_meta could still have model_provider = "opencodex". Codex App then fails to resume with:
Model provider `opencodex` not found
The dev fix changes the invariant for native restore:
Released in v2.1.6 via #20. The Codex App history compatibility work is now on main, including reversible history sync, native restore cleanup, and explicit legacy recovery handling. npm latest is @bitkyc08/opencodex@2.1.6.
This should be covered by v2.1.6, released via #20. The fix now includes reversible resume-history sync, native restore cleanup for opencodex-owned rows, and explicit legacy recovery handling. If any history/sidebar visibility problem remains after upgrading to @bitkyc08/opencodex@2.1.6, please open a new follow-up issue with the exact start/stop steps, Codex App behavior, and whether syncResumeHistory is enabled.
Activity
0disoft commentedon Jun 22, 2026
Thanks for writing this up. I hit a very similar Codex App sidebar symptom on Windows: project threads looked like they disappeared while opencodex was active, but
ocx restoremade them visible again.I opened #13 as a related safety change. It makes resume-history remapping opt-in instead of rewriting existing
openaithreads toopencodexduring injection. That PR intentionally does not claim to fully close this issue, because your observation suggests another possible path too: Codex App may be filtering existingopenaiproject threads when the rootmodel_provideris switched toopencodex, even if the old rows remainopenai.So I think there are two separate concerns here:
openaiproject threads whenever the active root provider isopencodex.Your extra
ocx restore --helpnote also looks like a separate CLI safety bug: subcommand help should not execute restore.0disoft commentedon Jun 22, 2026
I split out the separate
ocx restore --helpside effect into #14. That PR only fixes the CLI help safety issue: help flags are handled before any restore/eject/uninstall/start-style command can mutate config.So the current mapping is:
restore --helpexecuting restore instead of showing help.opencodexstill needs separate investigation.0disoft commentedon Jun 22, 2026
Additional Windows reproduction data:
I reproduced the same sidebar behavior on Windows. After starting opencodex and restarting Codex App, the
zerodi-wd1project section showed no chats while opencodex was active. After stopping/restoring the proxy, the same project chats became visible again.Important detail: this happened with
syncResumeHistory: false, so opencodex was not rewriting the old resume history rows in this run.Local data was still present after the UI hid the chats:
So this looks less like data deletion and more like Codex App filtering project threads based on the active root provider/catalog state. In this run, most existing project threads stayed as
model_provider = openai, but they were hidden while the active root provider wasopencodex.Current workaround is still
ocx restore/ stop proxy, then restart Codex App.0disoft commentedon Jun 22, 2026
Follow-up after the Windows repro: I think the framing should be slightly different.
The resume-history remap is not just an unsafe mutation; it is also the practical compatibility mode that makes existing OpenAI-backed chats visible while
opencodexis the active provider. From the user's point of view, preserving existing chats in the sidebar is the important behavior.So I updated #13 to frame
syncResumeHistoryas an explicit compatibility mode:openairows toopencodexso existing chats can appear while the proxy is active;openai.That still leaves the underlying Codex App provider-filtering behavior unresolved, but it makes the opencodex-side tradeoff clearer.
0disoft commentedon Jun 22, 2026
Confirmed on Windows: enabling the history compatibility remap makes the old project chats visible again while opencodex is active.
Test result:
Local state after the remap:
So the practical workaround for existing chat visibility is
syncResumeHistory=true. Without the remap, the local data remains intact but Codex App hides most old OpenAI-backed project chats while opencodex is active.lidge-jun commentedon Jun 22, 2026
Investigation update: I am actively debugging this now from a more precise reproduction path.
Current repro from the maintainer environment:
Usage:
ocx init Interactive setup (provider + Codex config injection)
ocx start [--port ] Start the proxy server (auto-syncs models to Codex)
ocx stop Stop the proxy AND restore native Codex (plain codex works again)
ocx restore Restore native Codex without stopping (alias: eject)
ocx uninstall Remove service/shim/config and restore native Codex
ocx service Run as a background service (install|start|stop|status|uninstall)
ocx codex-shim Auto-start proxy when
codexlaunches (install|status|uninstall)ocx ensure Ensure the proxy is running and Codex config/cache are current
ocx sync Fetch models from providers and inject into Codex config
ocx sync-cache Refresh Codex's model cache from the active catalog
ocx status Check proxy server status
ocx login OAuth login (xai) — opens browser, stores token in ~/.opencodex/auth.json
ocx logout Remove a stored OAuth login
ocx update Update opencodex to the latest published version
ocx help Show this help message
Examples:
ocx init Set up provider and inject into Codex
ocx start Start on default port (10100)
ocx start --port 8080 Start on custom port
ocx sync Sync available models to Codex command is symlinked through opencodex (ocx) — Universal provider proxy for Codex
Usage:
ocx init Interactive setup (provider + Codex config injection)
ocx start [--port ] Start the proxy server (auto-syncs models to Codex)
ocx stop Stop the proxy AND restore native Codex (plain codex works again)
ocx restore Restore native Codex without stopping (alias: eject)
ocx uninstall Remove service/shim/config and restore native Codex
ocx service Run as a background service (install|start|stop|status|uninstall)
ocx codex-shim Auto-start proxy when
codexlaunches (install|status|uninstall)ocx ensure Ensure the proxy is running and Codex config/cache are current
ocx sync Fetch models from providers and inject into Codex config
ocx sync-cache Refresh Codex's model cache from the active catalog
ocx status Check proxy server status
ocx login OAuth login (xai) — opens browser, stores token in ~/.opencodex/auth.json
ocx logout Remove a stored OAuth login
ocx update Update opencodex to the latest published version
ocx help Show this help message
Examples:
ocx init Set up provider and inject into Codex
ocx start Start on default port (10100)
ocx start --port 8080 Start on custom port
ocx sync Sync available models to Codex into the current dev checkout.
2. makes the Codex App sidebar look empty, including older OpenAI-backed chats and chats created while opencodex was active.
3. ✅ Proxy (PID 67578) stopped.
↩️ opencodex not present in Codex config./restore makes the older OpenAI-backed chats visible again, but chats created while opencodex was active still do not appear.
Current evidence suggests there are two filters involved, not just one:
Usage:
ocx init Interactive setup (provider + Codex config injection)
ocx start [--port ] Start the proxy server (auto-syncs models to Codex)
ocx stop Stop the proxy AND restore native Codex (plain codex works again)
ocx restore Restore native Codex without stopping (alias: eject)
ocx service Run as a background service (install|start|stop|status|uninstall)
ocx sync Fetch models from providers and inject into Codex config
ocx status Check proxy server status
ocx login OAuth login (xai) — opens browser, stores token in ~/.opencodex/auth.json
ocx logout Remove a stored OAuth login
ocx update Update opencodex to the latest published version
ocx help Show this help message
Examples:
ocx init Set up provider and inject into Codex
ocx start Start on default port (10100)
ocx start --port 8080 Start on custom port
ocx sync Sync available models to Codex, existing rows can be hidden.
I am digging into the Codex/codex-rs history semantics in parallel and working on an opencodex-side compatibility fix. I will keep #13 as related but not final until this provider+source behavior is accounted for.
lidge-jun commentedon Jun 22, 2026
Correction / refined investigation update: the previous maintainer comment was partially corrupted by shell quoting. This is the accurate reproduction and current hypothesis.
Maintainer repro:
ocxcommand resolves to the development checkout:/Users/jun/.local/bin/ocx->/Users/jun/Developer/new/700_projects/opencodex/dist/bin/ocx->../../src/cli.ts.ocx startmakes all Codex App project history disappear from the sidebar, including old OpenAI chats and chats created while opencodex was active.ocx stoprestores the old OpenAI-side chats.ocx stop.Current local DB evidence suggests this is a two-axis visibility problem, not only a provider-label problem:
model_provider = openaiwithsource IN (cli, vscode);model_provider = opencodexwithsource = exec;cli,vscode).So #13 is still useful as a safety change: it stops automatic mutation by default and makes the OpenAI->opencodex provider remap explicit via
syncResumeHistory: true. But it is not the full fix for this issue because it does not address opencodex-created rows whose source isexec.I am investigating Codex App / codex-rs filtering semantics now and will patch opencodex only with a reversible, opt-in compatibility path. The working devlog is
devlog/220_codex-app-history-visibility/00_plan.md.lidge-jun commentedon Jun 22, 2026
Update: pushed a follow-up fix to
devin3244d28(fix: eject opencodex history on native restore). This follow-up builds on @0disoft's PR #13 (Preserve Codex resume history by default) and the reproduction tracked here in #11.Local testing found one more native-restore failure mode: after
ocx stop,~/.codex/config.tomlno longer contains[model_providers.opencodex], but existing Codex history rows / rolloutsession_metacould still havemodel_provider = "opencodex". Codex App then fails to resume with:The
devfix changes the invariant for native restore:ocx stop/ocx restorerestore backed-up OpenAI rows toopenai;openaiso native Codex can resume them after the proxy provider is removed;execrows are promoted tocliduring native restore so they can appear in the App sidebar;model = "opencode-go/minimax-m3"are stripped when restoring native Codex.Verification on the local machine:
openai;model_provider = "opencodex"afterocx stop;config.tomlhas no opencodex provider refs and no root provider-prefixed model;bun run typecheckpassed;bun test testspassed: 142 pass, 0 fail.lidge-jun commentedon Jun 22, 2026
Released in v2.1.6 via #20. The Codex App history compatibility work is now on main, including reversible history sync, native restore cleanup, and explicit legacy recovery handling. npm latest is @bitkyc08/opencodex@2.1.6.
lidge-jun commentedon Jun 22, 2026
This should be covered by v2.1.6, released via #20. The fix now includes reversible resume-history sync, native restore cleanup for opencodex-owned rows, and explicit legacy recovery handling. If any history/sidebar visibility problem remains after upgrading to @bitkyc08/opencodex@2.1.6, please open a new follow-up issue with the exact start/stop steps, Codex App behavior, and whether syncResumeHistory is enabled.
feat(devin): fix the request encoding that made every chat turn fail
feat(devin): Cognition cloud provider, carried from #4078 and hardened (
fix(devin): replay the assistant's reasoning instead of dropping it (#…
feat(devin): Cognition cloud provider, carried from lidge-jun#4078 an…
fix(devin): replay the assistant's reasoning instead of dropping it (l…
fix(devin): never replay a Claude signature, and pin the signature-on…
fix(devin): carry reasoning signatures across turns
fix(devin): never replay a Claude signature, and pin the signature-on…
fix(devin): carry reasoning signatures across turns
fix(devin): never replay a Claude signature, and pin the signature-on…
fix(devin): carry reasoning signatures across turns
fix(devin): never replay a Claude signature, and pin the signature-on…
fix(devin): carry reasoning signatures across turns (carry #6116) (#6184
fix(devin): sanitize replayed thinking and tool-call arguments too
fix(devin): keep data fields byte-exact under blocklist sanitization