CLI /plugins browser does not show installed local plugins

Resolved 💬 3 comments Opened Jun 23, 2026 by ft-ioxcs Closed Jun 27, 2026
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

Summary

In Codex CLI 0.142.0, the TUI /plugins browser shows Installed 0 of 7 available plugins, even though codex plugin list reports multiple OpenAI-curated plugins as installed and enabled from ~/.codex/config.toml.

Uploaded feedback thread: 019ef514-aaff-7cd2-8106-4c2f2ddb4790

Environment

  • Codex CLI: 0.142.0
  • Platform: macOS arm64
  • Install method: npm
  • Working directory when reproduced: ~/Projects/MLX-Community

Reproduction

  1. Start Codex CLI.
  2. Run /plugins in the TUI.
  3. Observe the plugin browser output.
  4. In a shell, run codex plugin list.

Observed behavior

The TUI /plugins browser shows only 7 available category/workspace-style plugins, such as:

  • Creative Production
  • Data Analytics
  • Investment Banking
  • Metabase
  • Product Design
  • Public Equity Investing
  • Sales

It reports:

Installed 0 of 7 available plugins.

However, codex plugin list reports multiple plugins as installed and enabled, including:

  • canva@openai-curated
  • box@openai-curated
  • coderabbit@openai-curated
  • build-web-apps@openai-curated
  • circleci@openai-curated
  • hugging-face@openai-curated
  • remotion@openai-curated
  • codex-security@openai-curated
  • hyperframes@openai-curated
  • build-ios-apps@openai-curated
  • build-macos-apps@openai-curated
  • build-web-data-visualization@openai-curated

The same entries are enabled in ~/.codex/config.toml.

Expected behavior

The TUI /plugins browser should show the same installed/enabled plugin state as codex plugin list, or clearly distinguish the cloud/workspace plugin directory from the local CLI plugin registry.

Notes

This appears to be a source mismatch in the TUI plugin browser rather than a missing local installation. The installed plugin skills and MCP-backed tools are still available in the session.

View original on GitHub ↗

3 Comments

github-actions[bot] contributor · 2 months ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #29633

Powered by Codex Action

abhay-codes07 · 2 months ago

Hi @ft-ioxcs I looked into this and I think I found the root cause. It comes down to the TUI browser and codex plugin list reading from different marketplace sources.

codex plugin list always asks for the curated marketplace to be included. See codex-rs/cli/src/plugin_cmd.rs:210:

.list_marketplaces_for_config(&plugins_input, &[], /*include_openai_curated*/ true)

The TUI /plugins browser does not. It calls the app-server plugin/list RPC with no marketplace_kinds (codex-rs/tui/src/app/background_requests.rs:1008). On the server, when the RemotePlugin feature is on and you are signed in with ChatGPT (Codex backend auth), the handler switches to the remote global catalog and passes include_openai_curated = false. See codex-rs/app-server/src/request_processors/plugins.rs:567-590:

let include_global_remote =
    !explicit_marketplace_kinds && config.features.enabled(Feature::RemotePlugin);
let use_remote_global_catalog =
    include_global_remote && auth_mode.is_some_and(AuthMode::uses_codex_backend);
// ...
.list_marketplaces_for_config(
    // ...
    /*include_openai_curated*/ !use_remote_global_catalog,
)?;

When include_openai_curated is false, the local openai-curated marketplace root is never added (codex-rs/core-plugins/src/manager.rs:2406), so the curated plugins you installed are not in the response at all. The browser then computes "Installed X of Y" purely from that response (codex-rs/tui/src/chatwidget/plugin_catalog.rs:729-763), so it reads 0. The verticals you see (Creative Production, Data Analytics, and so on) are the remote global catalog, and none of those entries carry your local install state, which is why it shows "Installed 0 of 7".

The desktop app has a separate plugin/installed RPC that does pass include_openai_curated = true and reconciles installed state (plugins.rs:779-870). The TUI never calls it, so the browser has no second source to recover the installed plugins.

I confirmed the core of this locally. I added a small test against list_marketplaces_for_config: with an installed slack@openai-curated plugin, include_openai_curated = true lists it as installed (count 1), and include_openai_curated = false drops the curated marketplace entirely (count 0). So the installed plugins disappear from the listing exactly when the curated marketplace is excluded.

Repro conditions that match the report: RemotePlugin enabled, ChatGPT auth, and at least one @openai-curated plugin installed in config.toml.

Two possible fix directions, depending on intended behavior:

  • Have the TUI /plugins browser also consult plugin/installed (like the desktop app) so installed state shows regardless of catalog mode.
  • Or keep including locally installed @openai-curated plugins in plugin/list even when the remote global catalog is active, and dedupe against the remote entries.

Happy to help with whichever direction the team prefers.

DungeonsAndDough · 2 months ago

Additional reproduction from codex-cli 0.142.0 on WSL/Ubuntu:

Environment

Codex CLI: codex-cli 0.142.0
OS: Ubuntu 24.04 under WSL
Auth: ChatGPT auth configured
Marketplace: openai-curated

Relevant local checks:

codex plugin marketplace list
# MARKETPLACE     ROOT
# openai-curated  /home/catalyst/.codex/.tmp/plugins

node -e "const fs=require('fs'); const j=JSON.parse(fs.readFileSync('/home/catalyst/.codex/.tmp/plugins/.agents/plugins/marketplace.json','utf8')); console.log(j.plugins.length)"
# 179

Observed behavior

Opening /plugins in the CLI initially shows the full marketplace-size list, then after a few seconds without user input the list switches/collapses to only 7 entries. This makes plugins like Gmail impossible to select from the TUI even though they exist in the local openai-curated marketplace.

In this case, Gmail was present in the marketplace entry:

{
  "name": "gmail",
  "source": { "source": "local", "path": "./plugins/gmail" },
  "policy": { "installation": "AVAILABLE", "authentication": "ON_INSTALL" },
  "category": "Communication"
}

But the /plugins UI collapsed before it could be selected.

Workaround

Direct CLI install works even though the TUI picker does not:

codex plugin add gmail@openai-curated --json

After that:

codex plugin list --json

reported both gmail@openai-curated and github@openai-curated as installed and enabled, and ~/.codex/config.toml contained:

[plugins."gmail@openai-curated"]
enabled = true

This matches the source mismatch described above: the local marketplace has the expected entries, but the TUI refresh appears to replace or hide the local curated catalog with the smaller remote/vertical catalog.