CLI remote-control reports connected on macOS but host is not visible in mobile unless Codex.app is running
What version of Codex CLI is running?
codex-cli 0.133.0
What subscription do you have?
ChatGPT Pro
Which model were you using?
N/A. This is about codex remote-control start.
What platform is your computer?
Affected macOS host:
Darwin 25.5.0 arm64 arm
Comparison Linux host where CLI-only remote control is visible in mobile:
Linux 6.12.57+deb13-amd64 x86_64 unknown
What terminal emulator and version are you using (if applicable)?
Reproduced from an SSH shell on the macOS host. The command is non-interactive:
codex remote-control --json start
Codex doctor report
Relevant excerpt from codex doctor --json on the macOS host:
{
"overallStatus": "ok",
"codexVersion": "0.133.0",
"checks": {
"app_server.status": {
"status": "ok",
"summary": "background server is running"
},
"auth.credentials": {
"status": "ok",
"summary": "auth is configured",
"details": {
"stored ChatGPT tokens": "true",
"stored auth mode": "chatgpt"
}
},
"network.provider_reachability": {
"status": "ok",
"summary": "active provider endpoints are reachable over HTTP"
},
"network.websocket_reachability": {
"status": "ok",
"summary": "Responses WebSocket handshake succeeded",
"details": {
"handshake result": "HTTP 101 Switching Protocols",
"supports websockets": "true"
}
},
"runtime.provenance": {
"status": "ok",
"summary": "running standalone on macos-aarch64",
"details": {
"version": "0.133.0",
"platform": "macos-aarch64"
}
}
}
}
I can provide the full doctor output if needed.
What issue are you seeing?
On macOS, running the CLI remote-control command reports success and the daemon/app-server processes are running, but the host does not appear in the ChatGPT mobile Codex remote host list.
Command output on macOS:
codex remote-control --json start
{
"mode": "daemon",
"status": "connected",
"serverName": "Mac-mini",
"environmentId": "env_e_...",
"timedOut": false,
"daemon": {
"status": "alreadyRunning",
"backend": "pid",
"managedCodexVersion": "0.133.0",
"cliVersion": "0.133.0",
"appServerVersion": "0.133.0"
}
}
The expected two CLI processes are present:
codex app-server daemon pid-update-loop
codex app-server --remote-control --listen unix://
Network connectivity also appears fine. The macOS CLI app-server has an established TCP connection to the ChatGPT remote-control relay, and codex doctor --json reports websocket reachability as OK.
However, the mobile app still does not show this macOS host.
If I launch /Applications/Codex.app on the same Mac, the host becomes visible in the mobile app. After launching Codex.app, additional processes appear, including:
/Applications/Codex.app/Contents/MacOS/Codex
/Applications/Codex.app/Contents/Resources/codex app-server --analytics-default-enabled
So the difference seems to be:
macOS CLI-only remote-control connected -> not visible in mobile
macOS Codex.app running -> visible in mobile
Linux CLI-only remote-control connected -> visible in mobile
This is confusing because the same CLI command works as expected on a Linux host.
What steps can reproduce the bug?
- On a macOS host with Codex CLI
0.133.0, make sure Codex.app is not running. - Run:
``bash``
codex remote-control --json start
- Observe that the command reports:
``json``
{
"status": "connected",
"timedOut": false
}
- Confirm the CLI remote-control processes are running:
``text``
codex app-server daemon pid-update-loop
codex app-server --remote-control --listen unix://
- Open ChatGPT mobile and check the Codex remote host list.
- The macOS host is not shown.
- Launch Codex.app on the same macOS host:
``bash``
open -a Codex
- The host becomes visible in ChatGPT mobile.
For comparison, on a Linux host with the same CLI version, running only:
codex remote-control --json start
is enough for the host to appear in ChatGPT mobile.
What is the expected behavior?
Either:
codex remote-control starton macOS should make the host visible in ChatGPT mobile, just like it does on Linux; or- the CLI should clearly report that macOS mobile visibility requires Codex.app to be running / configured, instead of returning only
status: connected.
The current connected status is misleading because the relay websocket appears connected, but the host is not visible or usable from mobile.
Additional information
I inspected the local state on the macOS host and noticed multiple remote-control enrollments:
app_server_client_name = Codex Desktop
app_server_client_name = Codex Desktop
app_server_client_name = <empty>
The CLI-started daemon appears to use the empty app_server_client_name enrollment, while Codex.app uses a Desktop-style identity. This might explain why the macOS CLI enrollment connects at the relay layer but is not surfaced in the mobile host picker.
I also checked the implementation path in the repository:
remote_control/protocol.rsnormalizeshttps://chatgpt.com/backend-apiinto:- enroll URL:
/wham/remote/control/server/enroll - websocket URL:
/wham/remote/control/server remote_control/websocket.rspublishesConnectedafter the websocket connects.
So this may be a product/identity/filtering mismatch rather than a pure network problem.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗