codex - 💡(How to fix) Fix remote-control daemon stays alive but device disappears from ChatGPT mobile app until app-server restart [2 comments, 3 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openai/codex#23403Fetched 2026-05-20 03:50:42
View on GitHub
Comments
2
Participants
3
Timeline
12
Reactions
1
Timeline (top)
labeled ×5subscribed ×3commented ×2cross-referenced ×2

Fix Action

Fix / Workaround

Workaround: The node becomes visible again only after restarting the app-server:

Code Example

{
  "schemaVersion": 1,
  "generatedAt": "1779160115s since unix epoch",
  "overallStatus": "warning",
  "codexVersion": "0.131.0",
  "checks": {
    "app_server.status": {
      "id": "app_server.status",
      "category": "app-server",
      "status": "ok",
      "summary": "background server is running",
      "details": {
        "control socket": "/home/twin_supersport/.codex/app-server-control/app-server-control.sock",
        "daemon state dir": "/home/twin_supersport/.codex/app-server-daemon",
        "mode": "persistent",
        "pid file": "/home/twin_supersport/.codex/app-server-daemon/app-server.pid (file)",
        "settings": "/home/twin_supersport/.codex/app-server-daemon/settings.json (file)",
        "status": "running",
        "update-loop pid file": "/home/twin_supersport/.codex/app-server-daemon/app-server-updater.pid (file)"
      },
      "remediation": null,
      "durationMs": 0
    },
    "auth.credentials": {
      "id": "auth.credentials",
      "category": "auth",
      "status": "ok",
      "summary": "auth is configured",
      "details": {
        "auth file": "/home/twin_supersport/.codex/auth.json",
        "auth storage mode": "File",
        "stored API key": "false",
        "stored ChatGPT tokens": "true",
        "stored agent identity": "false",
        "stored auth mode": "chatgpt"
      },
      "remediation": null,
      "durationMs": 0
    },
    "config.load": {
      "id": "config.load",
      "category": "config",
      "status": "ok",
      "summary": "config loaded",
      "details": {
        "CODEX_HOME": "/home/twin_supersport/.codex",
        "config.toml": "/home/twin_supersport/.codex/config.toml",
        "config.toml parse": "ok",
        "cwd": "/home/twin_supersport",
        "enabled feature flags": "shell_tool, unified_exec, shell_snapshot, terminal_resize_reflow, sqlite, memories, hooks, enable_request_compression, multi_agent, apps, tool_search, tool_suggest, plugins, plugin_hooks, in_app_browser, browser_use, browser_use_external, computer_use, plugin_sharing, image_generation, skill_mcp_dependency_install, steer, guardian_approval, goals, collaboration_modes, tool_call_mcp_elicitation, personality, fast_mode, tui_app_server, workspace_dependencies",
        "feature flag overrides": "memories=true, goals=true",
        "feature flags enabled": "30",
        "log dir": "/home/twin_supersport/.codex/log",
        "mcp servers": "0",
        "model": "gpt-5.5",
        "model provider": "openai",
        "sqlite home": "/home/twin_supersport/.codex"
      },
      "remediation": null,
      "durationMs": 0
    },
    "installation": {
      "id": "installation",
      "category": "install",
      "status": "ok",
      "summary": "installation looks consistent",
      "details": {
        "PATH codex #1": "/home/twin_supersport/.local/bin/codex",
        "PATH codex #2": "/usr/local/bin/codex",
        "PATH codex #3": "/home/twin_supersport/.local/bin/codex",
        "PATH codex entries": "3",
        "current executable": "/home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl/codex",
        "install context": "standalone (unix, release /home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl, resources /home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl/codex-resources)",
        "managed by bun": "false",
        "managed by npm": "false",
        "managed package root": "not set"
      },
      "remediation": null,
      "durationMs": 1
    },
    "mcp.config": {
      "id": "mcp.config",
      "category": "mcp",
      "status": "ok",
      "summary": "no MCP servers configured",
      "details": {},
      "remediation": null,
      "durationMs": 0
    },
    "network.env": {
      "id": "network.env",
      "category": "network",
      "status": "ok",
      "summary": "network-related environment looks readable",
      "details": {
        "proxy env vars": "none"
      },
      "remediation": null,
      "durationMs": 0
    },
    "network.provider_reachability": {
      "id": "network.provider_reachability",
      "category": "reachability",
      "status": "ok",
      "summary": "active provider endpoints are reachable over HTTP",
      "details": {
        "ChatGPT base URL": "https://chatgpt.com/backend-api/ reachable (HTTP 404)",
        "reachability mode": "ChatGPT auth"
      },
      "remediation": null,
      "durationMs": 106
    },
    "network.websocket_reachability": {
      "id": "network.websocket_reachability",
      "category": "websocket",
      "status": "ok",
      "summary": "Responses WebSocket handshake succeeded",
      "details": {
        "DNS": "2 IPv4, 2 IPv6, first IPv6",
        "auth mode": "chatgpt",
        "connect timeout": "15000 ms",
        "endpoint": "wss://chatgpt.com/backend-api/<redacted>",
        "handshake result": "HTTP 101 Switching Protocols",
        "model provider": "openai",
        "models etag present": "true",
        "provider name": "OpenAI",
        "proxy env vars": "none",
        "reasoning header": "false",
        "server model present": "false",
        "supports websockets": "true",
        "wire API": "responses"
      },
      "remediation": null,
      "durationMs": 806
    },
    "runtime.provenance": {
      "id": "runtime.provenance",
      "category": "runtime",
      "status": "ok",
      "summary": "running standalone on linux-aarch64",
      "details": {
        "commit": "unknown",
        "current executable": "/home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl/codex",
        "install method": "standalone (unix, release /home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl, resources /home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl/codex-resources)",
        "platform": "linux-aarch64",
        "version": "0.131.0"
      },
      "remediation": null,
      "durationMs": 0
    },
    "runtime.search": {
      "id": "runtime.search",
      "category": "search",
      "status": "ok",
      "summary": "search is OK (bundled)",
      "details": {
        "search command": "/home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl/codex-resources/rg",
        "search command readiness": "file exists",
        "search provider": "bundled"
      },
      "remediation": null,
      "durationMs": 0
    },
    "sandbox.helpers": {
      "id": "sandbox.helpers",
      "category": "sandbox",
      "status": "ok",
      "summary": "sandbox configuration is readable",
      "details": {
        "approval policy": "Never",
        "codex-linux-sandbox helper": "/home/twin_supersport/.codex/tmp/arg0/codex-arg0XLk5Ad/codex-linux-sandbox",
        "execve wrapper helper": "/home/twin_supersport/.codex/tmp/arg0/codex-arg0XLk5Ad/codex-execve-wrapper",
        "filesystem sandbox": "unrestricted",
        "network sandbox": "enabled"
      },
      "remediation": null,
      "durationMs": 0
    },
    "state.paths": {
      "id": "state.paths",
      "category": "state",
      "status": "ok",
      "summary": "state paths and databases are inspectable",
      "details": {
        "CODEX_HOME": "/home/twin_supersport/.codex (dir)",
        "active rollout files": "13 files, 93567037 total bytes, 7197464 average bytes",
        "archived rollout files": "1 files, 61797 total bytes, 61797 average bytes",
        "log DB": "/home/twin_supersport/.codex/logs_2.sqlite (file)",
        "log DB integrity": "ok",
        "log dir": "/home/twin_supersport/.codex/log (dir)",
        "sqlite home": "/home/twin_supersport/.codex (dir)",
        "standalone release cache": "1 entries in /home/twin_supersport/.codex/packages/standalone/releases",
        "state DB": "/home/twin_supersport/.codex/state_5.sqlite (file)",
        "state DB integrity": "ok"
      },
      "remediation": null,
      "durationMs": 174
    },
    "terminal.env": {
      "id": "terminal.env",
      "category": "terminal",
      "status": "warning",
      "summary": "width 57 cols - output may wrap (recommended >=80)",
      "details": {
        "SSH_CLIENT": "present",
        "SSH_CONNECTION": "present",
        "SSH_TTY": "present",
        "TERM": "xterm-256color",
        "color output": "disabled (stdout is not a terminal)",
        "effective locale": "en_GB.UTF-8",
        "stderr is terminal": "true",
        "stdin is terminal": "true",
        "stdout is terminal": "false",
        "terminal": "unknown",
        "terminal size": "57x28"
      },
      "issues": [
        {
          "severity": "warning",
          "cause": "width 57 cols - output may wrap (recommended >=80)",
          "measured": "57 x 28",
          "expected": ">= 80 columns",
          "remedy": "resize the window to at least 80 columns",
          "fields": [
            "terminal size"
          ]
        }
      ],
      "remediation": null,
      "durationMs": 0
    },
    "updates.status": {
      "id": "updates.status",
      "category": "updates",
      "status": "ok",
      "summary": "update configuration is locally consistent",
      "details": {
        "cached latest version": "0.131.0",
        "check for update on startup": "true",
        "dismissed version": "0.121.0",
        "last checked at": "2026-05-18T21:50:35.090578304Z",
        "latest version": "0.131.0",
        "latest version status": "current version is not older",
        "update action": "standalone installer",
        "version cache": "/home/twin_supersport/.codex/version.json"
      },
      "remediation": null,
      "durationMs": 87
    }
  }
}
RAW_BUFFERClick to expand / collapse

What version of Codex CLI is running?

0.131.0

What subscription do you have?

chatGPT plus

Which model were you using?

gpt-5.5 low

What platform is your computer?

Linux 6.18.29+rpt-rpi-2712 aarch64 unknown

What terminal emulator and version are you using (if applicable)?

chatGPT on iPhone (chatGPT version:1.2026.125)

Codex doctor report

{
  "schemaVersion": 1,
  "generatedAt": "1779160115s since unix epoch",
  "overallStatus": "warning",
  "codexVersion": "0.131.0",
  "checks": {
    "app_server.status": {
      "id": "app_server.status",
      "category": "app-server",
      "status": "ok",
      "summary": "background server is running",
      "details": {
        "control socket": "/home/twin_supersport/.codex/app-server-control/app-server-control.sock",
        "daemon state dir": "/home/twin_supersport/.codex/app-server-daemon",
        "mode": "persistent",
        "pid file": "/home/twin_supersport/.codex/app-server-daemon/app-server.pid (file)",
        "settings": "/home/twin_supersport/.codex/app-server-daemon/settings.json (file)",
        "status": "running",
        "update-loop pid file": "/home/twin_supersport/.codex/app-server-daemon/app-server-updater.pid (file)"
      },
      "remediation": null,
      "durationMs": 0
    },
    "auth.credentials": {
      "id": "auth.credentials",
      "category": "auth",
      "status": "ok",
      "summary": "auth is configured",
      "details": {
        "auth file": "/home/twin_supersport/.codex/auth.json",
        "auth storage mode": "File",
        "stored API key": "false",
        "stored ChatGPT tokens": "true",
        "stored agent identity": "false",
        "stored auth mode": "chatgpt"
      },
      "remediation": null,
      "durationMs": 0
    },
    "config.load": {
      "id": "config.load",
      "category": "config",
      "status": "ok",
      "summary": "config loaded",
      "details": {
        "CODEX_HOME": "/home/twin_supersport/.codex",
        "config.toml": "/home/twin_supersport/.codex/config.toml",
        "config.toml parse": "ok",
        "cwd": "/home/twin_supersport",
        "enabled feature flags": "shell_tool, unified_exec, shell_snapshot, terminal_resize_reflow, sqlite, memories, hooks, enable_request_compression, multi_agent, apps, tool_search, tool_suggest, plugins, plugin_hooks, in_app_browser, browser_use, browser_use_external, computer_use, plugin_sharing, image_generation, skill_mcp_dependency_install, steer, guardian_approval, goals, collaboration_modes, tool_call_mcp_elicitation, personality, fast_mode, tui_app_server, workspace_dependencies",
        "feature flag overrides": "memories=true, goals=true",
        "feature flags enabled": "30",
        "log dir": "/home/twin_supersport/.codex/log",
        "mcp servers": "0",
        "model": "gpt-5.5",
        "model provider": "openai",
        "sqlite home": "/home/twin_supersport/.codex"
      },
      "remediation": null,
      "durationMs": 0
    },
    "installation": {
      "id": "installation",
      "category": "install",
      "status": "ok",
      "summary": "installation looks consistent",
      "details": {
        "PATH codex #1": "/home/twin_supersport/.local/bin/codex",
        "PATH codex #2": "/usr/local/bin/codex",
        "PATH codex #3": "/home/twin_supersport/.local/bin/codex",
        "PATH codex entries": "3",
        "current executable": "/home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl/codex",
        "install context": "standalone (unix, release /home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl, resources /home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl/codex-resources)",
        "managed by bun": "false",
        "managed by npm": "false",
        "managed package root": "not set"
      },
      "remediation": null,
      "durationMs": 1
    },
    "mcp.config": {
      "id": "mcp.config",
      "category": "mcp",
      "status": "ok",
      "summary": "no MCP servers configured",
      "details": {},
      "remediation": null,
      "durationMs": 0
    },
    "network.env": {
      "id": "network.env",
      "category": "network",
      "status": "ok",
      "summary": "network-related environment looks readable",
      "details": {
        "proxy env vars": "none"
      },
      "remediation": null,
      "durationMs": 0
    },
    "network.provider_reachability": {
      "id": "network.provider_reachability",
      "category": "reachability",
      "status": "ok",
      "summary": "active provider endpoints are reachable over HTTP",
      "details": {
        "ChatGPT base URL": "https://chatgpt.com/backend-api/ reachable (HTTP 404)",
        "reachability mode": "ChatGPT auth"
      },
      "remediation": null,
      "durationMs": 106
    },
    "network.websocket_reachability": {
      "id": "network.websocket_reachability",
      "category": "websocket",
      "status": "ok",
      "summary": "Responses WebSocket handshake succeeded",
      "details": {
        "DNS": "2 IPv4, 2 IPv6, first IPv6",
        "auth mode": "chatgpt",
        "connect timeout": "15000 ms",
        "endpoint": "wss://chatgpt.com/backend-api/<redacted>",
        "handshake result": "HTTP 101 Switching Protocols",
        "model provider": "openai",
        "models etag present": "true",
        "provider name": "OpenAI",
        "proxy env vars": "none",
        "reasoning header": "false",
        "server model present": "false",
        "supports websockets": "true",
        "wire API": "responses"
      },
      "remediation": null,
      "durationMs": 806
    },
    "runtime.provenance": {
      "id": "runtime.provenance",
      "category": "runtime",
      "status": "ok",
      "summary": "running standalone on linux-aarch64",
      "details": {
        "commit": "unknown",
        "current executable": "/home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl/codex",
        "install method": "standalone (unix, release /home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl, resources /home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl/codex-resources)",
        "platform": "linux-aarch64",
        "version": "0.131.0"
      },
      "remediation": null,
      "durationMs": 0
    },
    "runtime.search": {
      "id": "runtime.search",
      "category": "search",
      "status": "ok",
      "summary": "search is OK (bundled)",
      "details": {
        "search command": "/home/twin_supersport/.codex/packages/standalone/releases/0.131.0-aarch64-unknown-linux-musl/codex-resources/rg",
        "search command readiness": "file exists",
        "search provider": "bundled"
      },
      "remediation": null,
      "durationMs": 0
    },
    "sandbox.helpers": {
      "id": "sandbox.helpers",
      "category": "sandbox",
      "status": "ok",
      "summary": "sandbox configuration is readable",
      "details": {
        "approval policy": "Never",
        "codex-linux-sandbox helper": "/home/twin_supersport/.codex/tmp/arg0/codex-arg0XLk5Ad/codex-linux-sandbox",
        "execve wrapper helper": "/home/twin_supersport/.codex/tmp/arg0/codex-arg0XLk5Ad/codex-execve-wrapper",
        "filesystem sandbox": "unrestricted",
        "network sandbox": "enabled"
      },
      "remediation": null,
      "durationMs": 0
    },
    "state.paths": {
      "id": "state.paths",
      "category": "state",
      "status": "ok",
      "summary": "state paths and databases are inspectable",
      "details": {
        "CODEX_HOME": "/home/twin_supersport/.codex (dir)",
        "active rollout files": "13 files, 93567037 total bytes, 7197464 average bytes",
        "archived rollout files": "1 files, 61797 total bytes, 61797 average bytes",
        "log DB": "/home/twin_supersport/.codex/logs_2.sqlite (file)",
        "log DB integrity": "ok",
        "log dir": "/home/twin_supersport/.codex/log (dir)",
        "sqlite home": "/home/twin_supersport/.codex (dir)",
        "standalone release cache": "1 entries in /home/twin_supersport/.codex/packages/standalone/releases",
        "state DB": "/home/twin_supersport/.codex/state_5.sqlite (file)",
        "state DB integrity": "ok"
      },
      "remediation": null,
      "durationMs": 174
    },
    "terminal.env": {
      "id": "terminal.env",
      "category": "terminal",
      "status": "warning",
      "summary": "width 57 cols - output may wrap (recommended >=80)",
      "details": {
        "SSH_CLIENT": "present",
        "SSH_CONNECTION": "present",
        "SSH_TTY": "present",
        "TERM": "xterm-256color",
        "color output": "disabled (stdout is not a terminal)",
        "effective locale": "en_GB.UTF-8",
        "stderr is terminal": "true",
        "stdin is terminal": "true",
        "stdout is terminal": "false",
        "terminal": "unknown",
        "terminal size": "57x28"
      },
      "issues": [
        {
          "severity": "warning",
          "cause": "width 57 cols - output may wrap (recommended >=80)",
          "measured": "57 x 28",
          "expected": ">= 80 columns",
          "remedy": "resize the window to at least 80 columns",
          "fields": [
            "terminal size"
          ]
        }
      ],
      "remediation": null,
      "durationMs": 0
    },
    "updates.status": {
      "id": "updates.status",
      "category": "updates",
      "status": "ok",
      "summary": "update configuration is locally consistent",
      "details": {
        "cached latest version": "0.131.0",
        "check for update on startup": "true",
        "dismissed version": "0.121.0",
        "last checked at": "2026-05-18T21:50:35.090578304Z",
        "latest version": "0.131.0",
        "latest version status": "current version is not older",
        "update action": "standalone installer",
        "version cache": "/home/twin_supersport/.codex/version.json"
      },
      "remediation": null,
      "durationMs": 87
    }
  }
}

What issue are you seeing?

Environment:

  • Raspberry Pi 5 (ARM64 Linux)
  • Codex standalone install (rust-v0.131.0)
  • ChatGPT iOS app
  • Remote Control enabled
  • Previously migrated from npm-managed Codex to standalone-managed Codex

Problem: After some time, the Codex node disappears from the ChatGPT mobile app connection list, even though the local daemon and app-server are still running.

Observed behavior:

  • codex remote-control returns:

{ "status": "alreadyRunning" }

  • ps aux | grep app-server still shows:

codex app-server --remote-control codex app-server daemon pid-update-loop

  • Unix socket remains alive:

~/.codex/app-server-control/app-server-control.sock

However, the device no longer appears in the ChatGPT mobile app’s Remote Connections list.

Workaround: The node becomes visible again only after restarting the app-server:

pkill -f app-server codex remote-control

After restart, the output changes to:

{ "status": "bootstrapped", "remoteControlEnabled": true }

and the device immediately reappears in the ChatGPT mobile app.

Observation: This appears to be a mismatch between:

  • local daemon/app-server liveness
  • remote relay/discovery registration state

alreadyRunning may not be re-advertising the node to the relay/discovery layer after the registration expires or disconnects.

Additional notes:

  • The issue was reproduced multiple times.
  • Local CLI functionality continues to work normally even while the device is missing from the mobile app.
  • This was observed after migrating from npm-managed Codex to standalone-managed Codex using the official installer.

What steps can reproduce the bug?

  1. Install standalone Codex (rust-v0.131.0) on Raspberry Pi 5 (ARM64 Linux) using the official installer.

  2. Enable remote control: codex remote-control

  3. Confirm the node appears in the ChatGPT iOS app under Remote Connections.

  4. Leave the daemon running for some time (the disconnect happened multiple times during normal use).

  5. Eventually, the device disappears from the ChatGPT mobile app connection list.

  6. On the Raspberry Pi, verify that the daemon is still alive: ps aux | grep app-server

    The following processes are still running:

    • codex app-server --remote-control
    • codex app-server daemon pid-update-loop
  7. Running: codex remote-control

    returns: { "status": "alreadyRunning" }

    but the device still does not appear in the mobile app.

  8. Restarting the app-server fixes the issue: pkill -f app-server codex remote-control

  9. After restart, the output changes to: { "status": "bootstrapped" }

    and the device immediately reappears in the ChatGPT mobile app.

What is the expected behavior?

The remote-control node should remain visible and reconnectable from the ChatGPT mobile app as long as the local app-server daemon is still running.

If the relay/discovery registration expires or disconnects, the daemon should automatically re-advertise itself without requiring a manual app-server restart.

Running: codex remote-control

while the daemon is already alive should also restore remote discoverability if the node has disappeared from the mobile app.

Additional information

Additional observations:

  • The issue started after migrating from npm-managed Codex to the standalone-managed install using the official installer.
  • The old npm-managed app-server had to be manually terminated before standalone remote-control worked correctly.
  • The issue appears to affect only remote discoverability from the ChatGPT mobile app. Local CLI functionality continues to work normally.
  • The daemon and unix socket remain alive even while the node disappears from the mobile app.
  • Running inside tmux was initially used, but the same issue was later observed outside tmux as well.
  • The environment uses Tailscale and mobile app remote access, so network transitions (WiFi/mobile network changes, idle reconnects, etc.) may possibly contribute.
  • The issue was reproduced multiple times.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING