CLI -c override is ignored for installed plugin enabled state and plugin-provided MCP servers
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 55/100
Research direction
Start at the CLI -c override handling and plugin configuration resolution, then compare it with the working mcp_servers override path. Reproduce with codex plugin list, mcp list, and a new session using the documented commands; done means plugin and plugin-provided MCP state honor temporary overrides without changing the persisted config.
Written by the indexing model from the issue text.
Description
What version of Codex CLI is running?
codex-cli 0.144.6
What platform are you using?
macOS
What issue are you seeing?
A command-line -c override cannot disable an installed plugin for a single Codex process or session.
Given an installed plugin that provides an MCP server and is enabled in ~/.codex/config.toml:
[plugins."example-plugin@example-marketplace"]
enabled = true
[plugins."example-plugin@example-marketplace".mcp_servers.example-mcp]
enabled = true
Starting Codex with the following override does not disable the plugin:
codex -c 'plugins."example-plugin@example-marketplace".enabled=false'
The plugin remains enabled, and its MCP server and tools are still exposed in the new session.
This reproduces with two installed plugins from different marketplace source types.
Steps to reproduce
-
Install and enable a plugin that provides an MCP server.
-
Confirm that it is enabled:
codex plugin listExample output:
example-plugin@example-marketplace installed, enabled -
Try to disable the plugin for one invocation:
codex \ -c 'plugins."example-plugin@example-marketplace".enabled=false' \ plugin list -
Observe that it is still reported as enabled:
example-plugin@example-marketplace installed, enabled -
Start a new Codex session with the same override:
codex \ -c 'plugins."example-plugin@example-marketplace".enabled=false' -
Observe that the plugin-provided MCP server and tools are still exposed and callable in the new session.
A more specific override for the plugin-provided MCP server is also ignored:
codex \
-c 'plugins."example-plugin@example-marketplace".mcp_servers.example-mcp.enabled=false' \
mcp list
The server remains enabled:
example-mcp ... enabled
Control case
The same CLI override mechanism works for an ordinary user-configured MCP server:
codex \
-c 'mcp_servers.example-user-mcp.enabled=false' \
mcp list
This correctly reports:
example-user-mcp ... disabled
This indicates that the -c argument and TOML dotted-path quoting are working. The issue appears specific to plugin configuration resolution.
Expected behavior
This command:
codex -c 'plugins."example-plugin@example-marketplace".enabled=false'
should disable that plugin for the current Codex process and any session started by it, including its:
- MCP servers and tools
- skills and instructions
- hooks
The persistent value in ~/.codex/config.toml should remain unchanged.
Likewise:
-c 'plugins."example-plugin@example-marketplace".mcp_servers.example-mcp.enabled=false'
should disable only the specified plugin-provided MCP server.
Actual behavior
The persisted user-level plugin state appears to take precedence over the CLI -c override.
Both the CLI status commands and the actual session tool surface continue to treat the plugin and its MCP server as enabled.
Why this matters
Per-process plugin overrides are useful for:
- least-privilege sessions
- isolating plugin or MCP failures
- reducing irrelevant tools and instructions
- launcher scripts and task-specific Codex profiles
- verifying behavior with and without a plugin
Persistently editing ~/.codex/config.toml before and after every session is error-prone and prevents clean one-shot invocations.
Related issues
- #28443 — remote curated plugins ignore per-plugin
enabled=false - #18115 — plugin enablement does not follow normal project/config layering
- #13076 — earlier CLI config override ordering issue for MCP configuration
This report specifically concerns an installed plugin whose persisted user-level state is enabled=true, while an explicit CLI -c override attempts to disable it for one process.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.5k
- Avg merge
- 1m
- Merged PRs (30d)
- 1k
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from openai/codex
-
enhancement remote
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
bug CLI windows-os
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
macOS sandbox blocks hw.optional.arm64 sysctl, causing Flutter to misdetect Apple Silicon as x64 Openbug CLI sandbox
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
bug CLI TUI
Difficulty 2/5 1-3 hours Newbie friendliness 90/100
-
CLI config enhancement skills
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
kwakseongjae/auto-hwp#319 ·
-
area:cli bug filter-quality good first issue priority:medium
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
Difficulty 1/5 Under an hour Newbie friendliness 72/100
bevyengine/bevy#25861 ·
-
comp-datalake
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
ClickHouse/ClickHouse#121222 ·
-
A-linter
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
oxc-project/oxc#26863 ·