openai / openai/codex

[BUG] remote_plugin=false still downloads openai-curated-remote plugins in Codex TUI

Open
#39,682 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug CLI config skills TUI
Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

What version of Codex CLI is running?

0.148.0

What subscription do you have?

Pro5x

Which model were you using?

gpt-5.6-sol

What platform is your computer?

Linux 6.17.0-1011-oracle aarch64 aarch64

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

tmux

Codex doctor report
{
  "schemaVersion": 1,
  "generatedAt": "1787219989s since unix epoch",
  "overallStatus": "warning",
  "codexVersion": "0.148.0",
  "checks": {
    "app_server.status": {
      "id": "app_server.status",
      "category": "app-server",
      "status": "ok",
      "summary": "background server is not running",
      "details": {
        "control socket": "/root/.codex/app-server-control/app-server-control.sock",
        "daemon state dir": "/root/.codex/app-server-daemon",
        "mode": "ephemeral",
        "pid file": "/root/.codex/app-server-daemon/app-server.pid (missing)",
        "settings": "/root/.codex/app-server-daemon/settings.json (missing)",
        "status": "not running",
        "update-loop pid file": "/root/.codex/app-server-daemon/app-server-updater.pid (missing)"
      },
      "remediation": null,
      "durationMs": 0
    },
    "auth.credentials": {
      "id": "auth.credentials",
      "category": "auth",
      "status": "ok",
      "summary": "auth is configured",
      "details": {
        "auth file": "/root/.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": "/root/.codex",
        "config.toml": "/root/.codex/config.toml",
        "config.toml parse": "ok",
        "cwd": "/root/.codex",
        "enabled feature flags": "shell_tool, view_image, unified_exec, shell_snapshot, code_mode_host, terminal_resize_reflow, sqlite, memories, hooks, enable_request_compression, unbounded_connection_retries, multi_agent, apps, tool_search_always_defer_mcp_tools, tool_suggest, plugins, in_app_browser, in_app_updates, browser_use, browser_use_full_cdp_access, browser_use_external, computer_use, remote_plugin, plugin_sharing, image_generation, resize_all_images, item_ids, skill_mcp_dependency_install, skill_search, mentions_v2, steer, guardian_approval, goals, collaboration_modes, tool_call_mcp_elicitation, auth_elicitation, personality, fast_mode, tui_app_server, remote_compaction_v2, workspace_dependencies",
        "feature flag overrides": "memories=true",
        "feature flags enabled": "41",
        "log dir": "/root/.codex/log",
        "mcp servers": "2",
        "model": "gpt-5.6-sol",
        "model provider": "openai",
        "sqlite home": "/root/.codex"
      },
      "remediation": null,
      "durationMs": 0
    },
    "git.environment": {
      "id": "git.environment",
      "category": "git",
      "status": "ok",
      "summary": "git version 2.43.0",
      "details": {
        ".git entry": "directory",
        "PATH git #1": "/usr/bin/git",
        "PATH git #2": "/bin/git",
        "PATH git entries": "2",
        "git build options": "git version 2.43.0; cpu: aarch64; no commit associated with this build; sizeof-long: 8; sizeof-size_t: 8; shell-path: /bin/sh",
        "git exec path": "/usr/lib/git-core",
        "git version": "git version 2.43.0",
        "repo detected": "true",
        "repo root": "/root/.codex",
        "selected git": "/usr/bin/git"
      },
      "remediation": null,
      "durationMs": 37
    },
    "installation": {
      "id": "installation",
      "category": "install",
      "status": "ok",
      "summary": "installation looks consistent",
      "details": {
        "PATH codex #1": "/root/.bun/bin/codex",
        "current executable": "/root/.bun/install/global/node_modules/@openai/codex-linux-arm64/vendor/aarch64-unknown-linux-musl/bin/codex",
        "install context": "bun (package /root/.bun/install/global/node_modules/@openai/codex-linux-arm64/vendor/aarch64-unknown-linux-musl, bin /root/.bun/install/global/node_modules/@openai/codex-linux-arm64/vendor/aarch64-unknown-linux-musl/bin, resources /root/.bun/install/global/node_modules/@openai/codex-linux-arm64/vendor/aarch64-unknown-linux-musl/codex-resources, path /root/.bun/install/global/node_modules/@openai/codex-linux-arm64/vendor/aarch64-unknown-linux-musl/codex-path)",
        "managed by bun": "true",
        "managed by npm": "false",
        "managed by pnpm": "false",
        "managed package root": "/root/.bun/install/global/node_modules/@openai/codex"
      },
      "remediation": null,
      "durationMs": 0
    },
    "mcp.config": {
      "id": "mcp.config",
      "category": "mcp",
      "status": "warning",
      "summary": "MCP configuration has optional issues",
      "details": {
        "configured servers": "2",
        "context7": "header env var CODEX_CONTEXT7_API_KEY is not set",
        "disabled servers": "0",
        "streamable_http servers": "2"
      },
      "remediation": "Set the missing MCP env vars or disable the affected server.",
      "durationMs": 501
    },
    "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 403)",
        "reachability mode": "ChatGPT auth"
      },
      "remediation": null,
      "durationMs": 64
    },
    "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",
        "provider name": "OpenAI",
        "proxy env vars": "none",
        "reasoning header": "false",
        "server model present": "false",
        "supports websockets": "true",
        "wire API": "responses"
      },
      "remediation": null,
      "durationMs": 662
    },
    "runtime.provenance": {
      "id": "runtime.provenance",
      "category": "runtime",
      "status": "ok",
      "summary": "running bun on linux-aarch64",
      "details": {
        "commit": "unknown",
        "current executable": "/root/.bun/install/global/node_modules/@openai/codex-linux-arm64/vendor/aarch64-unknown-linux-musl/bin/codex",
        "install method": "bun (package /root/.bun/install/global/node_modules/@openai/codex-linux-arm64/vendor/aarch64-unknown-linux-musl, bin /root/.bun/install/global/node_modules/@openai/codex-linux-arm64/vendor/aarch64-unknown-linux-musl/bin, resources /root/.bun/install/global/node_modules/@openai/codex-linux-arm64/vendor/aarch64-unknown-linux-musl/codex-resources, path /root/.bun/install/global/node_modules/@openai/codex-linux-arm64/vendor/aarch64-unknown-linux-musl/codex-path)",
        "platform": "linux-aarch64",
        "version": "0.148.0"
      },
      "remediation": null,
      "durationMs": 0
    },
    "runtime.search": {
      "id": "runtime.search",
      "category": "search",
      "status": "ok",
      "summary": "search is OK (bundled)",
      "details": {
        "search command": "/root/.bun/install/global/node_modules/@openai/codex-linux-arm64/vendor/aarch64-unknown-linux-musl/codex-path/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": "OnRequest",
        "codex-linux-sandbox helper": "/root/.codex/tmp/arg0/codex-arg0w7pzuV/codex-linux-sandbox",
        "execve wrapper helper": "/root/.codex/tmp/arg0/codex-arg0w7pzuV/codex-execve-wrapper",
        "filesystem sandbox": "restricted",
        "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": "/root/.codex (dir)",
        "active rollout files": "1550 files, 1751246392 total bytes, 1129836 average bytes",
        "archived rollout files": "0 files, 0 total bytes, 0 average bytes",
        "goals DB": "/root/.codex/goals_1.sqlite (file)",
        "goals DB integrity": "ok",
        "log DB": "/root/.codex/logs_2.sqlite (file)",
        "log DB integrity": "ok",
        "log dir": "/root/.codex/log (dir)",
        "memories DB": "/root/.codex/memories_1.sqlite (file)",
        "memories DB integrity": "ok",
        "queue DB": "/root/.codex/queue_1.sqlite (file)",
        "queue DB integrity": "ok",
        "sqlite home": "/root/.codex (dir)",
        "state DB": "/root/.codex/state_5.sqlite (file)",
        "state DB integrity": "ok",
        "thread history DB": "/root/.codex/thread_history_1.sqlite (file)",
        "thread history DB integrity": "ok"
      },
      "remediation": null,
      "durationMs": 600
    },
    "state.rollout_db_parity": {
      "id": "state.rollout_db_parity",
      "category": "threads",
      "status": "ok",
      "summary": "rollout files and state DB thread inventory agree",
      "details": {
        "default model provider": "openai",
        "rollout DB active files": "1550",
        "rollout DB active rows": "1550",
        "rollout DB archive mismatches": "0",
        "rollout DB archived files": "0",
        "rollout DB archived rows": "0",
        "rollout DB duplicate DB paths": "0",
        "rollout DB duplicate rollout thread ids": "0",
        "rollout DB malformed file names": "0",
        "rollout DB missing active rows": "0",
        "rollout DB missing archived rows": "0",
        "rollout DB model providers": "openai=1550",
        "rollout DB rows": "1550",
        "rollout DB scan cap reached": "false",
        "rollout DB scan errors": "0",
        "rollout DB sources": "subagent:thread_spawn=854, cli=370, subagent:other=159, subagent:review=127, exec=40",
        "rollout DB stale rows": "0"
      },
      "remediation": null,
      "durationMs": 592
    },
    "system.disk": {
      "id": "system.disk",
      "category": "disk",
      "status": "ok",
      "summary": "sufficient free disk space (11.5 GiB)",
      "details": {
        "CODEX_HOME available": "11.5 GiB",
        "failure threshold": "1.0 GiB",
        "warning threshold": "5.0 GiB",
        "worktree available": "11.5 GiB"
      },
      "remediation": null,
      "durationMs": 0
    },
    "system.environment": {
      "id": "system.environment",
      "category": "system",
      "status": "ok",
      "summary": "OS language C",
      "details": {
        "EDITOR": "set",
        "LANG": "C.UTF-8",
        "LESS": "set",
        "PAGER": "set",
        "VISUAL": "not set",
        "os": "Ubuntu 24.4.0 (noble) [64-bit]",
        "os language": "C",
        "os type": "Ubuntu",
        "os version": "24.4.0"
      },
      "remediation": null,
      "durationMs": 8
    },
    "terminal.env": {
      "id": "terminal.env",
      "category": "terminal",
      "status": "ok",
      "summary": "terminal metadata was detected",
      "details": {
        "SSH_CLIENT": "present",
        "SSH_CONNECTION": "present",
        "SSH_TTY": "present",
        "TERM": "xterm-256color",
        "color output": "disabled (stdout is not a terminal)",
        "effective locale": "C.UTF-8",
        "multiplexer": "tmux 3.4",
        "stderr is terminal": "true",
        "stdin is terminal": "true",
        "stdout is terminal": "false",
        "terminal": "unknown",
        "terminal size": "120x29",
        "tmux allow-passthrough": "off",
        "tmux client termname": "xterm-256color",
        "tmux extended-keys": "off",
        "tmux focus-events": "off",
        "tmux set-clipboard": "on",
        "tmux xterm-keys": "on"
      },
      "remediation": null,
      "durationMs": 18
    },
    "terminal.title": {
      "id": "terminal.title",
      "category": "title",
      "status": "ok",
      "summary": "terminal title default",
      "details": {
        "terminal title activity": "true",
        "terminal title items": "activity, project-name",
        "terminal title project source": "git repo root",
        "terminal title project value": ".codex",
        "terminal title source": "default"
      },
      "remediation": null,
      "durationMs": 0
    },
    "updates.status": {
      "id": "updates.status",
      "category": "updates",
      "status": "ok",
      "summary": "update configuration is locally consistent",
      "details": {
        "cached latest version": "0.148.0",
        "check for update on startup": "true",
        "last checked at": "2026-08-20T08:54:36.941764046Z",
        "latest version": "0.148.0",
        "latest version status": "current version is not older",
        "update action": "bun install -g @openai/codex",
        "version cache": "/root/.codex/version.json"
      },
      "remediation": null,
      "durationMs": 700
    }
  }
}
What issue are you seeing?

When remote_plugin=false is configured, Codex TUI still downloads and initializes openai-curated-remote plugins.

I expect disabling remote plugins to prevent remote plugin synchronization and MCP initialization on this machine, but after restarting Codex TUI, remote plugin caches are recreated under ~/.codex/plugins/cache/openai-curated-remote/ and remote MCP servers (e.g. cloudflare-api) are initialized.

This makes it impossible to keep VPS plugin environments isolated from my desktop/web Codex environment.

What steps can reproduce the bug?
  1. Install Codex CLI v0.148.0 on Linux.
  2. Set:

[features]
plugins = true
remote_plugin = false

  1. Verify remote_plugin is false with codex features list.
  2. Remove plugin cache:

rm -rf ~/.codex/plugins
rm -rf ~/.codex/.tmp/plugins

  1. Start Codex TUI once and exit.
  2. Start Codex TUI again.
  3. Observe that ~/.codex/plugins/cache/openai-curated-remote/ is recreated and remote plugins are downloaded/initialized despite remote_plugin=false.
What is the expected behavior?

When remote_plugin=false is configured, Codex should completely disable remote plugin synchronization and initialization for that machine.

Expected behavior:

  • Codex should not download or recreate openai-curated-remote plugin caches.
  • Codex should not initialize MCP servers provided by remote plugins.
  • The machine should maintain an independent plugin environment from other devices using the same account.
  • Local plugins installed manually on this machine should continue to work normally (if plugins=true is enabled).
Additional information

Additional observations:

  • The config.toml file is loaded correctly.

  • codex features list shows:

    remote_plugin stable false

  • codex doctor confirms that remote_plugin is overridden/configured.

  • The issue only appears in Codex TUI. codex exec --ephemeral does not expose remote plugins and returns no visible plugins.

  • After removing:

    rm -rf ~/.codex/plugins
    rm -rf ~/.codex/.tmp/plugins

    the first Codex TUI launch behaves normally, but after exiting and launching Codex again, the remote plugin cache is recreated:

    ~/.codex/plugins/cache/openai-curated-remote/

    containing plugins such as:

    • build-ios-apps
    • build-macos-apps
    • build-web-apps
    • cloudflare
    • github
    • gmail
    • google-drive
  • Some remote plugins also attempt to initialize their MCP servers. For example, cloudflare-api starts and reports missing OAuth authentication.

Environment:

  • Codex CLI: 0.148.0
  • OS: Linux VPS
  • Installation: Bun global package

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The report names no source file or test; start by reproducing the issue in the Codex TUI with remote_plugin=false on Codex CLI 0.148.0, then trace the plugin download path against the config.load setting. Done when openai-curated-remote plugins are not downloaded while that setting is false, with coverage for the configuration.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.