v0.2.0 Release Notes
v0.2.0 is the phone bridge continuity release. It covers the changes from v0.1.0 through the release/v0.2.0 branch and focuses on making the browser bridge feel like one shared Codex control surface across desktop and mobile.
Highlights
- Default startup URLs now join one shared bridge-managed thread. Opening the same
/?token=...URL from a phone and another browser no longer creates separate default bridge sessions. - The phone bridge can attach to an existing headless Codex app-server over
CODEX_APP_SERVER_URLorCODEX_APP_SERVER_SOCK, which supports Remote Connection workflows without exposing the Codex app-server on the LAN. - History sync is enabled by default. After turns complete, OCdex warms the app-server history with
thread/readand scan-backedthread/listcalls so Codex Desktop can rediscover updated sessions after reopen or refresh. - The browser UI now includes a Codex Desktop-like layout with thread navigation, artifact previews, model/config/plugin/auth panels, image attachments, approval controls, live run-state messaging, and selectable themes.
Review Hardening
/api/threadpolling now usesthread/readfirst and falls back tothread/resumeonly when needed.- API-side app-server requests reuse a persistent WebSocket RPC client instead of opening a fresh app-server connection for every request.
- Selected-thread refreshes and background thread-list polling avoid overlapping requests or repeated error spam.
- Bridge history is capped to the latest 80 entries after live updates, matching the initial thread load behavior.
- Startup notifications no longer send undefined click URLs when no LAN IPv4 address is detected.
Operator Notes
- Keep the Codex app-server bound to
127.0.0.1; expose only the token-protected bridge on the LAN. - Use a private notification topic, account, or Discord channel because startup notifications include the tokenized bridge URL when a LAN URL is available.
- For live Codex Desktop sync, point both Desktop Remote Connection and OCdex at the same headless app-server. The normal local Desktop conversation view uses a private
stdioapp-server and is not a live injection target.
Validation
npm run checknpm test(18 tests)npm run docs:buildgit diff --check- Local bridge smoke test of
/api/info,/api/threads, and/api/thread - GitHub Actions
verifyon PR #2
Read the companion walkthrough: v0.2.0 Phone Bridge Walkthrough.