iOS mobile control shows Codex run failed after completed turn when bridge restarts
What version of Codex CLI is running?
codex-cli 0.130.0
What subscription do you have?
Pro
Which model were you using?
Observed with GPT-5.5 from the mobile Codex control surface. A smaller project-specific smoke run used GPT-5.5 Low and completed successfully.
What platform is your computer?
macOS 26.3, build 25D125
Codex Desktop app:
CFBundleShortVersionString:26.513.20950CFBundleVersion:2816
Remote control was enabled via features.remote_control = true; codex features list reports remote_control under development true.
What issue are you seeing?
The ChatGPT iOS Codex/mobile-control UI showed an orange Codex run failed. banner under a thread that had already rendered a completed final answer.
This looks like a stale failure state after the local codex remote-control bridge was restarted/replaced, not an actual failed turn:
- The completed session has a local
task_completeevent and the expected assistant final answer. - The desktop/app-server log shows normal
thread/list,thread/read, and laterturn/start/completed activity witherrorCode=nullafter the banner appeared. - A later mobile-origin run completed successfully through the same Mac after the bridge was running again.
- The bridge process had logged that the remote-control WebSocket reader/writer stopped when the old foreground bridge process was terminated.
Because the mobile UI shows the completed answer and then still says Codex run failed., it is hard for the user to tell whether the work failed, whether only the bridge disconnected, or whether the banner is stale.
I am not uploading the screenshot here because it includes a personal local hostname, but the screenshot shows a completed mobile-control thread with the orange Codex run failed. banner below the final answer.
Reproduction
- Enable remote control on macOS:
``toml``
[features]
remote_control = true
- Start the bridge:
``bash``
codex remote-control
- Pair ChatGPT iOS Codex/mobile control with the Mac.
- Start a mobile Codex run against an explicit local project.
- Let the run complete. In my case the assistant final answer rendered successfully.
- Restart or replace the local
codex remote-controlbridge after completion, for example by moving it from a foreground terminal process to a launchd-managed process. - Reopen the completed thread in ChatGPT iOS.
Expected behavior
If the turn has completed, the mobile thread should remain completed. If the bridge disconnects after completion, the UI should either ignore that for the completed turn or show a connection-specific status such as "connection interrupted/reconnected" instead of marking the completed run as failed.
Actual behavior
The completed thread shows an orange Codex run failed. banner below the final answer.
Evidence from this run
- Session
019e2834-e1ac-7242-b1b3-92c052a55e5fcompleted at2026-05-14T20:38:47.217Zwithtask_complete, duration2568ms, final answermobile control connected. - Foreground bridge shutdown shortly afterward logged:
remote control websocket writer was stoppedremote control websocket reader was stopped- After the bridge was restarted, launchd reported the new bridge job as
state = running,last exit code = (never exited). - The remote-control enrollment was refreshed for the same Mac hostname.
- Later desktop log entries for mobile-origin activity showed
errorCode=null, and a later mobile-origin session completed successfully.
Possible secondary issue
Before selecting an explicit project, a projectless mobile-control smoke run failed with a generic CodexClientError error 10/11. Selecting an explicit project and using a lower reasoning setting allowed the smoke run to complete. If projectless mobile runs are unsupported or fragile, the mobile UI could use a clearer error.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗