codex: `<recommended_plugins>` fragment ignores `features.recommended_plugins`; only `features.plugins=false` removes it
Repo: openai/codex
Type: bug + enhancement
Status: готов к постингу
Title
<recommended_plugins> prompt fragment is not gated by features.recommended_plugins; disabling it requires features.plugins = false
Body
Version: codex-cli 0.147.0 (app-server mode)
Summary
Every model turn includes a <recommended_plugins> user-role fragment listing 40–50 installable-but-not-installed plugins from the openai-curated-remote catalog ("Here is a list of plugins that are available but not installed."). The fragment is replayed on every turn of a session (~1.9 KB ≈ ~0.5K tokens per turn; hundreds of thousands of processed tokens on long runs).
Two problems:
- The advertised feature flag does nothing.
codex features listlistsrecommended_plugins(stable). Settingfeatures.recommended_plugins = falseinconfig.tomldoes not remove the fragment — it is still injected on every turn. (For reference, the model metadata advertisesinclude_plugin_usage_instructions: truefor the active model.)
- The only working switch is a sledgehammer.
features.plugins = falsedoes remove the fragment, but it disables the entire plugin surface (plugin tools, hooks, marketplaces) — even when no plugins are installed at all and the user only wants to suppress the recommendation list.
Expected behavior
- Either honor
features.recommended_plugins = falseand suppress the fragment, or - provide a fine-grained switch (e.g.
recommended_plugins_mode = "off"/ a config key for the fragment), so the recommendation list can be disabled without turning off the plugins feature.
Secondary observation (may be TOML-layer, flagging for visibility)
features.* keys placed after table sections in config.toml (e.g. after [mcp_servers.*] or [projects.*] blocks) are silently ignored — only keys before the first table take effect. There is no warning. If this is intentional parsing behavior, a warning would save users from believing the setting was applied.
Reproduction
# config.toml
features.recommended_plugins = false # (top of file) — fragment still present in every turn
features.plugins = false # — fragment disappears, but plugins feature is off
Impact
Token/context cost and prompt noise per turn in non-interactive (app-server) and TUI sessions; no way to keep plugins enabled while dropping the recommendation list.
_Verification note: tested in unattended app-server sessions; fragment presence checked in session rollout files (<recommended_plugins> markers)._
2 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Comment: openai/codex #38881 — close as duplicate of #38185
---
Confirmed duplicate of #38185 — closing in favor of it. Same root cause:
<recommended_plugins>(remote@openai-curated-remotecatalog) is injectedunconditionally, and the only working switch (
--disable plugins/features.plugins=false) is all-or-nothing.Two findings from our side that are not in #38185 yet, posted there as a
comment:
features.*keys placed after a[table]inconfig.tomlare silentlyignored — the same key before the table takes effect. So
"recommended_plugins=false in config" can look broken twice: the flag isn't
wired to this injection path, and depending on file layout the value never
parses.
codex debug prompt-input:features.plugins=falseremoves the fragment but also strips the
<plugins_instructions>block foractually-installed plugins — unusable when real plugins are enabled. Cost:
~0.5K tokens per turn, re-emitted on every turn.