Remote control Windows WSL to Android not working at all
Open 💬 18 comments Opened Jul 9, 2026 by kendonB
💡 Likely answer: A maintainer (github-actions[bot], contributor)
responded on this thread — see the highlighted reply below.
What version of the Codex App are you using (From “About Codex” dialog)?
26.623.141536
What subscription do you have?
Pro
What platform is your computer?
Windows
What issue are you seeing?
Pairing process goes through but on the phone is just says "connecting" and it never connects.
What steps can reproduce the bug?
Go through the remote pairing process
What is the expected behavior?
It works
Additional information
_No response_
18 Comments
Still an issue
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Did you fix it? it randomly started working today
Never mind it's back not working at all
Still not working at all - shows "Reconnecting..." on the android side and it says "Last connected 1m" on the Windows App side, so the app thinks it's working but it's not.
Worked for a few minutes today. Then back to Reconnecting.
Flashed my folders for a moment just now. Then gone.
Still not working
Still not working at all on 26.715.72359. I also verified that I can create other connections and that it still fails if I use a netbird (similar to tailscale) VPN.
Still not working
btw, this feature works 100% flawlessly using the Claude Windows desktop app + Claude Android app, so it's 100% a codex software issue, not an environment issue.
Still not working in 26.721.41059
Still not working in 26.721.81911
Still not working after voice update on Android
Switched to Windows native, reinstalled codex workspace and it worked. So this is a WSL problem possibly
Tried cutting the app out altogether and same symptoms
Then paired then on Android it just says "Reconnecting to ChatGPT desktop" forever
Reported from GPT 5.6 Sol (apologies for the slop post)
I reproduced this against the current Android-to-WSL remote-control path. This is an initial-history timeout, not missing WSL port forwarding.
The Android client reaches and initializes the WSL daemon successfully. The daemon logs allocate a logical connection ID only after receiving
initialize, so pairing and relay connectivity have already succeeded. Each Android connection then closes on an approximately 30-second cadence.The next startup RPC is
thread/list. I confirmed that sequence in the working native-Windows remote logs, then benchmarked the same request directly against the live WSL app-server Unix socket:| Path | Initial
thread/listtime ||---|---:|
| WSL, normal request (
created_at, limit 50) | 26.188 s || WSL, identical request with
useStateDbOnly: true| 0.069 s || Working native-Windows remote host | about 19 s |
The normal WSL request consumes nearly the entire mobile connection deadline before relay, segmentation and response overhead. Android then closes the connection and repeats the “Reconnecting to ChatGPT desktop” loop.
Why this installation exposes the problem:
exec, which the default interactive-history request excludes.MAX_SCAN_FILES = 10000, and then reconciles filesystem hits with the database.Relevant implementation details:
ThreadListParams.use_state_db_onlyexplicitly bypasses filesystem scanning.RolloutRecorder::list_threads.MAX_SCAN_FILES = 10000.sourceKindsdefaults to interactive sources infilters.rs, which makes a rollout store dominated byexecsessions especially expensive to search.Recommended fix:
"useStateDbOnly": trueon the initialthread/listrequest and subsequent history pages.There is already a close upstream precedent:
d62353a, “Load local session pickers from the state DB first (#36378)”, makes the TUI resume/fork picker DB-first. The Android initial history request needs the corresponding behaviour.I also found a separate takeover defect. After the native-Windows host had been active, starting the WSL remote server produced 127 HTTP 409 responses containing
{"detail":"Remote app server already online"}over about 17 minutes before it was admitted. Windows and WSL had distinct enrollment IDs but the same account/server name. Stale ownership should expire or transfer much sooner, and the conflict should be surfaced clearly. This explains delayed WSL startup, but not the persistent reconnect loop after WSL successfully connects and receives Android clients.The remote-control architecture uses an outbound secure relay, and the live WSL daemon is receiving the Android logical connections. No inbound WSL port forwarding is required.
Additional reproduction: native Windows host -> Android still fails on current builds (2026-08-21)
This reproduces on a native Windows Codex/ChatGPT Desktop host, not a WSL target.
Environment
OpenAI.Codex 26.818.3698.0codex-cli 0.149.0-alpha.426200.9168C:\...local Codex sessionsReproduction
transport unavailable.26.810.7004.0to26.818.3698.0.Sanitized desktop diagnostics
codex.exe -c features.code_mode_host=true app-server --analytics-default-enabledremote-controldaemon/process appears in the process tree.codex.exehad 21 established HTTPS connections; Chromium NetworkService had 9.CLOSE_WAITsockets, but the mobile failure persisted.remote_controloverride inconfig.toml.CLI findings
Attempting the apparent fallback:
returns:
Also:
reports:
Interpretation
Pairing authorization completes, and the desktop has healthy ChatGPT/backend sockets, but the native Windows host never becomes reachable to Android. This appears different from the later WSL
thread/listtimeout evidence: the failure occurs at desktop-host connection/registration before any sessions are available.Could maintainers confirm whether package
26.818.3698.0is expected to launch or integrate a Windows remote-control host service, given that the bundled CLI fallback is Unix-only and the feature is reported as removed?No account IDs, enrollment IDs, tokens, session IDs, or raw logs are included.