Note
Release status: v2.5.21 is the current stable release. The setup installer, EXE-based portable ZIP, tray actions, restart-and-repair flow, and persistent remote connection are covered by the release validation gates.
CodexRemote-fix enables the UI that ships with Codex Desktop for Windows but is hidden by a runtime defect:
Settings → Connections → Control other devices
This project does not modify ChatGPT.exe, app.asar, or anything under
C:\Program Files\WindowsApps. After installation, a persistent tray supervisor
manages everything automatically.
The public project and repository name is CodexRemote-fix. Legacy script
filenames, the %LOCALAPPDATA%\CodexControlOtherDevices runtime root, and the
scheduled-task identifiers remain unchanged internally so existing installations
can upgrade in place without losing settings or device authorization.
Important
Complete the MFA, SSO, or passkey checks required by your account or workspace before enrolling a device.
Warning
This is an unofficial runtime compatibility project. It enables Chromium debugging on a random
127.0.0.1 port. Run it only on a trusted Windows machine, and re-run the compatibility check
after every Codex update.
On affected Windows builds, Codex Desktop already contains Settings → Connections → Control other devices, but a runtime defect hides the tab. CodexRemote-fix restores that existing page and leaves the Codex UI, account authorization, and enrollment flow intact.
-
Download either
CodexRemote-fix-2.5.21-setup.exe(recommended installer) orCodexRemote-fix-2.5.21-windows-x64.zipfrom Releases. Download and verify the matching.sha256.txtbefore continuing. -
If you chose the setup installer, run it and follow the wizard. If you chose the portable ZIP, extract it into a new empty folder and double-click
CodexRemote-fix.exe.Both paths validate the payload, run a Microsoft Defender custom scan, and preserve the DPAPI device-key store.
-
The tray supervisor starts automatically. When the connection reports Connected, open Settings → Connections → Control other devices to enroll or use the device. Windows 10 users should ensure that .NET Framework 4.8 is installed for the native TrayHost.
The current portable bundle, checksum, release manifest, and payload manifest are always published on the Releases page.
Before replacing a portable build, use its installed Uninstall-CodexControlOtherDevices.ps1; settings and the DPAPI\r\ndevice-key store stay in place.
Verified on Windows 11 · Codex Desktop 26.820.7780.0 · Node.js 22.23.1:
the hidden controller tab, restart-and-repair recovery, and persistent remote connection are working.
- The logon task
Codex Control Other Devices Supervisorstarts the tray supervisor automatically; no manual steps are needed. - The desktop shortcut CodexRemote-fix is an optional way to start the tray supervisor if its icon is not visible. It does not start a repair or change a Codex session by itself.
- When the connection status is Connected, open Settings → Connections → Control other devices to enroll or use it.
- New Codex builds start with
--remote-debugging-portbut no--inspect; the supervisor recognizes that launch shape and performs the takeover automatically. - The tray menu supports Follow system, Chinese, English, Open logs, and About. Actions are authorized against the exact menu presentation that was displayed and acknowledged, while current capabilities remain fail-closed.
- Updating this project or Codex does not require reinstalling the supervisor; the installer atomically switches versioned runtimes.
- If an explicit repair is needed, use Check and repair remote connection. Codex may close and relaunch once, and existing device pairing and authorization are preserved. A completed recovery left behind by an interrupted upgrade is cleared safely on the next supervisor start.
The tray reports two independent, truthful status lines instead of inferring readiness from color alone.
- Connection is one of Waiting for Codex, Checking, Connected, Repair needed, or Error.
- Protection is one of Running, Reconnecting, or Stopping.
- Check and repair remote connection is the one repair action. It may request a controlled Codex restart only when needed; it never removes device authorization.
- Exit is a Safe Exit: it stops CodexRemote-fix protection and may restore Codex to ordinary mode before the tray host exits. Relaunch the desktop shortcut or sign in again to resume protection.
Every tagged release ships a Windows setup installer and an EXE-entry portable ZIP, each with its SHA-256 checksum, release manifest, and the shared payload manifest. The .github/workflows/release.yml workflow builds both from the tag automatically, so v2.5.21 includes:
CodexRemote-fix-2.5.21-setup.exeand its checksumCodexRemote-fix-2.5.21-windows-x64.zipand its checksumCodexRemote-fix-2.5.21-payload-manifest.jsonCodexRemote-fix-2.5.21-release-manifest.jsonandCodexRemote-fix-2.5.21-setup-release-manifest.json
Each release appends a short English change summary to the GitHub release body. The bilingual release history is kept in CHANGELOG.md.
After a Codex Desktop update, check the Releases page for a newer portable bundle, or run the CodexRemote-fix compatibility check shortcut from the Start menu to confirm the current supervisor still matches.
When the External renderer Windows runtime is installed, the supervisor automatically
uses its saved renderer port, or 9335 when no saved state exists, if that
loopback port is available for the special Codex session. The renderer CDP port
can therefore be shared with External renderer; the temporary Electron main-process
Inspector remains separate and is closed after bridge installation.
If that preferred port is paused, unavailable, excluded because it is already
the main Inspector port, or occupied by a non-Codex listener, CodexRemote-fix
selects a different dynamic loopback renderer port. An External renderer
pause marker skips integration. Missing or invalid External renderer state, and a
failed handoff, are handled safely without blocking the Codex session. The
integration does not promise Browser-ID or port reuse in these fallback cases.
Neither Codex nor External renderer installation files are modified.
Real Windows capture; UI language is mixed Chinese/English and no desktop or skin is included.
The compiled native Win32 TrayHost menu presents the connection and protection status, then only Check and repair remote connection, language, logs, About, and Exit. It has no automation, candidate-trial, or uninstall command.
Still no Control other devices tab?
- Check the tray's connection and protection labels; Waiting for Codex or Checking means it is not yet ready.
- Run the CodexRemote-fix compatibility check shortcut from the Start menu and confirm
Ready: True. - Check the logs under
%LOCALAPPDATA%\CodexControlOtherDevices\logs\. - Make sure security software is not blocking
node.exefrom loopback access. - Exit all Codex processes and retry; the supervisor restarts Codex at most once.
Enrollment or authorization fails?
- Complete MFA/SSO/passkey required by the account or workspace.
- Use the same ChatGPT account and workspace in Codex and the browser.
- For organization workspaces, confirm the admin allows Remote Control.
External renderer did not attach to an already-running session?
Exit Codex, open CodexRemote-fix from the desktop, then relaunch Codex.
The tray has no uninstall command. Run the installed
%LOCALAPPDATA%\CodexControlOtherDevices-installer\Uninstall-CodexControlOtherDevices.ps1.
It first completes the same external, fail-closed cleanup transaction and then starts a staged finalizer
that removes only the marker-bound portable payload. If the runtime/session proof fails, files remain in
place. The DPAPI device-key store remains in place, so existing authorized devices are preserved.
Removing a local key would not revoke server authorization; revoke the device in Codex first if that is
your intent.
Affected Windows packages have all of the following characteristics:
- The Windows controller page, strings, and backend calls are already shipped.
- Statsig gate
782640499is consumed with inverted semantics:truehidesshowControlOtherDevices. - The main-process device-key entry point accepts only
process.platform === "darwin". - The Windows package does not ship
remote-control-device-key.node.
Official docs: Remote connections. This project only fills the local Windows runtime gap. It does not bypass account authorization, MFA/SSO/passkeys, workspace policy, or server permissions.
- Debug ports bind only to a random
127.0.0.1; the main-process Inspector must close after injection. - Any process running as the same Windows user can reach these ports, so only use a trusted machine.
- The device private key is stored at
%CODEX_HOME%\remote-control-device-keys.windows.json(or%USERPROFILE%\.codex\...whenCODEX_HOMEis unset), encrypted with DPAPI current-user scope. It is a software key, not a TPM-backed non-exportable key. - Moving or deleting the local key does not revoke server authorization; revoke the device in Codex first.
See SECURITY.md and docs/TECHNICAL.md.
Logs live in %LOCALAPPDATA%\CodexControlOtherDevices\logs\: install.log, supervisor.log,
bootstrap.log, and transactions.log.
src/persistence/ Tray supervisor, session controller, installer lifecycle
src/runtime/ Clean-room bridge implementation
tests/ Repository tests and persistence tests
docs/ Technical docs, clean-room notes, bilingual screenshots
MIT © 2026 naipi11. Root-cause analysis and the runtime technique come from
hunterbeach's Codex Windows runtime remote control Gist;
the main-process approach credits zdaar/codex-hacks,
and the renderer injection pattern adapts brunolemos' feature-override Gist.
The final src/runtime is an isolated clean-room rewrite with no unlicensed upstream source text;
see docs/CLEANROOM.md and NOTICE.md.
This project is unofficial, is not affiliated with OpenAI, and does not redistribute OpenAI binaries or assets.

