iOS Remote Control pairing fails at secure setup on two different hosts: revoked iPhone cannot re-enroll, never-revoked iPad also fails (claimed=false)
Related issues: #37925, #22700, #23339, #23112, #28119
Versions
- Host 1: Mac mini (Apple Silicon), ChatGPT desktop 26.814.41407 (Build 6720, checked 2026-08-19)
- Host 2: second ChatGPT desktop host on a laptop (works fine as a desktop controller of Host 1 over the internet)
- iPhone 16 Plus: latest iOS, ChatGPT iOS 1.2026.223
- iPad Pro 11" (M5): iPadOS 26.4.2, ChatGPT 1.2026.202 at time of failure
- Same personal account & workspace on all devices; TOTP (authenticator app) MFA enabled
Cross-device matrix
| Controller | Host | Result |
| --- | --- | --- |
| Laptop (desktop app) | Mac mini | ✅ works, cross-internet |
| iPhone | Mac mini | ❌ secure setup error / "pairing failed, scan again" |
| iPhone | Host 2 (laptop) | ❌ same failure |
| iPad (never revoked) | Mac mini | ❌ "secure setup could not be completed" |
Key evidence
- Host-side
remoteControl/pairing/startsucceeds, errorCode=null
(request c7f876af-4163-4c8d-8650-1a819afdfbf9, 2026-08-19 21:46:09 UTC+7).
- During the pairing window, 19 consecutive
client/listcalls succeed;
3 local refreshes show nextConnectionCount=0; the pairing session stays
claimed=false; no mobile client is ever created. Re-scanning the same QR
does not create a second pairing session.
- The iPhone enrollment was revoked on 2026-08-03 (
client/revokeOK,
errorCode=null). Since then, re-pairing never completes on either host —
matches the pattern in #37925 and #22700.
- The iPad was never revoked; its client record
(cli_3573f8827ea64b8c9ecf790a039ef7f7) still exists and refreshes
lastSeenAt, yet secure setup always fails — a stale enrollment that cannot
re-establish, similar to #23339 / #28119 (refresh rejected for stale or
revoked clients).
- Local registration cleanup was already tried on 2026-08-04 (full backup,
app fully quit, records removed from local storage): on relaunch the backend
restored the same environment / server / installation IDs and the stale iPad
client, so the blocking state is at least partly server-side.
- Full reinstall of the iPhone app plus a phone restart did not help —
consistent with #22700 (revoked connections survive reinstall).
Local read-only diagnostics (2026-08-21)
~/.codex/.codex-global-state.jsonon the Mac mini host was inspected
read-only after a verified backup:
electron-local-remote-control-environment-id=
env_e_6a0839f0f1748327854244b433e52bd3 and
electron-local-remote-control-installation-id =
3ad2f159-a692-47aa-9c16-81bbaede6a34, both matching the live environment.
electron-remote-control-client-enrollmentsis absent, and a recursive
key scan found no other key containing pairing or enrollment. The only
other Remote-Control-specific state is
electron-remote-control-config-migration-completed=true.
- So the local stale-enrollment workarounds from #23112 / #28119 do not apply
here: there is nothing local to clear on the host, and host-side registration
state appears to have been migrated out of the JSON global state on current
builds (registrations were previously observed in the app's local SQLite
store on 2026-08-04).
- A backend read-only check (clients / environments / mfa_requirement) was
not performed: no authenticated session was safely reusable and we did
not extract tokens or re-authenticate. No claim is made about backend state —
that is exactly what we need OpenAI to check.
Environment IDs (non-credentials)
- environment
env_e_6a0839f0f1748327854244b433e52bd3 - server
srv_e_6a0839f0f1848327858568dcc614468c - installation
3ad2f159-a692-47aa-9c16-81bbaede6a34
Asks
- Check whether the mobile secure-claim for request
c7f876af-…ever reached
the backend; if it did, what rejected it (auth policy / MFA factor /
workspace policy / credential validation / stale revoked-device binding).
- Check account-side mobile controller enrollments for stale / revoked /
duplicate state.
- Provide (or perform server-side) a reset of the *mobile controller
enrollment only*, without resetting the account, chats, Codex tasks, or the
two host environments.
OpenAI support case 12650539 contains full sanitized logs; it has had no
substantive engineering response since 2026-08-05.
3 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Follow-up: additional read-only diagnostics (2026-08-21) — host local DB + device-side observations
Local SQLite inspection (copy-only, read-only; no state was modified). The host's local app database contains a
remote_control_enrollmentstable (fields:websocket_url,account_id,app_server_client_name,server_id,environment_id,server_name,updated_at,remote_control_enabled) with exactly two live rows:| app_server_client_name | server_id / environment_id | updated_at (UTC+7) | remote_control_enabled |
| --- | --- | --- | --- |
|
Codex Desktop|srv_e_6a0839f0f1848327858568dcc614468c/env_e_6a0839f0f1748327854244b433e52bd3| 2026-08-19 19:02:12 |true||
codex_remote_pairing_diagnostic| same server / same environment | 2026-08-05 09:33:49 |null|The second row was created within ~1 second of the support-requested repro's
pairing/starton 2026-08-05 (09:33:50 +07) and still persists today, sharing the sameserver_id/environment_idas the live host enrollment, withremote_control_enabled=null. Earlier, on 2026-08-04, a diagnostic connection had received HTTP 409 "Remote app server already online".Question for the team: can a stale duplicate app-server enrollment under the same server identity interfere with completing new mobile secure-claims, while leaving an already-established desktop controller session unaffected?
Note on scope: this table stores host-side app-server enrollments only — it has no mobile client IDs, device types, or revoked/stale flags. The iPad client ID (
cli_3573f8827ea64b8c9ecf790a039ef7f7) does not appear in any live TEXT/BLOB field of the DB. Since the host is not expected to store a mobile client list locally, this is not evidence in either direction about backend state.Device-side observations (same day). Same account on both devices, opposite visible states, identical functional failure:
This pattern is consistent with a server-side mobile-controller enrollment block (one device blocked from re-enrolling after revocation, the other unable to re-establish an existing enrollment) rather than visible local residue on either device. No local state was modified during any of these checks.
Re: duplicate check (#39856) — reviewed; related but not a duplicate. Keeping this issue open because the failure stage differs:
claimed=false, no mobile client is ever created (19×client/listOK,nextConnectionCount=0), both iOS devices fail, and onset predates that regression window (it began before the 2026-08-03 revocation).They do look like siblings on the same backend path, though: stale server-side registration evidence appears in both threads — HTTP 409 "Remote app server already online" reported in #39856, and the persistent
codex_remote_pairing_diagnosticapp-server enrollment withremote_control_enabled=nullsharing the live host'sserver_id/environment_id, documented above in this issue.Also noteworthy for triage: a commenter in #39856 performed exactly the local host-state reset sometimes suggested for these cases (clearing
remote_control_enrollmentsin the app's SQLite store, rotatinginstallation_id, removing the electron local-remote-control keys) and it did not resolve their mobile failure either — consistent with the blocking state being server-side.Asks 1–3 in the issue body stand: please check the secure-claim telemetry for request
c7f876af-…and this account's mobile controller enrollment state.