iOS Connections edit mode has no delete option for stale CLI Codex connection
What version of Codex CLI is running?
codex-cli 0.130.0
What platform is your computer?
macOS 26.3, build 25D125
Codex Desktop app:
CFBundleShortVersionString:26.513.20950CFBundleVersion:2816
What issue are you seeing?
In the ChatGPT iOS app, under Codex -> Connections, a stale legacy CLI connection remains visible after moving to the native Codex Desktop integration. The CLI row can be toggled off, but entering Edit mode does not expose any delete/remove affordance for that row.
This leaves users with no visible way to remove old experimental/headless CLI remote-control connections after the native desktop integration is working.
Why this matters
The current UI makes the stale CLI entry look like an active or still-configured access path, even when local cleanup has removed the old bridge/process/config. It creates uncertainty about whether there are SSH/CLI leftovers or hidden remote-control access still present.
In this case, local cleanup verified:
- No
codex remote-controlprocess was running. - No matching Codex remote-control LaunchAgent/LaunchDaemon remained.
- No SSH/tunnel helper was present.
~/.codex/config.tomlno longer containedremote_control.- Local
remote_control_enrollmentscould be cleaned to leave only the nativeCodex Desktoprow. - Both
state_5.sqliteandlogs_2.sqlitepassedpragma integrity_check.
Despite this, the iOS UI originally still showed the stale CLI connection and provided no obvious delete path in Edit mode.
Reproduction
- Before or during the native Codex Desktop mobile integration, enroll a Mac through the experimental/headless CLI path, for example
codex remote-control. - Later connect the same Mac through the native
Codex Desktopintegration. - Open ChatGPT iOS -> Codex -> Connections.
- Observe both
Codex DesktopandCLIentries. - Tap
Edit. - Try to remove the stale
CLIentry.
Expected behavior
Edit mode should expose a delete/remove/disconnect-for-this-entry action for stale or disabled CLI connections, or there should be a documented cleanup flow from the mobile UI.
Actual behavior
Edit mode does not show a delete/remove option for the stale CLI connection. The only obvious global action is Disconnect All, which is too broad because it would also disconnect the working native Codex Desktop connection.
Related context
This is related to, but distinct from, #22693. That issue covers a stale Codex run failed banner after bridge restart. This issue is specifically about stale connection management in the iOS Connections UI.
I am not attaching the screenshot here because it contains a personal local hostname, but the screenshot shows:
Codex Desktopconnection enabled for the Mac hostname.CLIconnection disabled for the same Mac hostname.Editbutton present.Disconnect Allbutton present.- No delete affordance visible for the
CLIrow.
5 Comments
Correction from local follow-up: I restored the local
codex-browser-useenrollment row because it appears to be an internal Browser Use/native in-app browser enrollment, not the visible staleCLIrow. The visible staleCLIentry corresponded to the blank legacy enrollment row. After local cleanup, the blank legacy row is removed, whilecodex-browser-useandCodex Desktopremain locally. The iOS product issue remains the same: the Connections UI shows a stale/disabledCLIrow but Edit mode exposes no per-row delete/remove affordance.Follow-up after checking the current OpenAI Codex docs and local plugin metadata:
browser, displayNameBrowser, and aliases including@browser-use; its skill selects the native in-app browser backendiab.remote_control_enrollmentsrow namedcodex-browser-use; the bundled Browser plugin files remain installed under~/.codex/plugins/cache/openai-bundled/browser/0.1.0-alpha2.Current local enrollment table now contains only
Codex Desktop, so the reported iOS stale CLI/extra connection is not backed by a local Browser plugin deletion.@johnsilvavlogs I found a workaround if you need to get rid of old connections, it calls the server side endpoint to list / remove them: https://gist.github.com/sirmalloc/fefef0b65729d9644794a3c67d1a28b9
I have this issue but via my iphone. It has a stale connection to my macbook and makes it impossible to re-connect to the macbook
The key product issue is that
Disconnect Allis too coarse for a connection list that can contain different generations of access paths.A stale legacy CLI row, a native Codex Desktop row, and an internal/browser-use enrollment should not share only one global destructive action. Each row needs its own identity and lifecycle affordance: type, host label, last seen, local vs account-backed, enabled/disabled/revoked, and a per-row remove action.
Without that, the UI cannot communicate the security boundary. A disabled stale row still looks like hidden access, while deleting everything is risky because it can remove the working native path too.