ListPlugins returns empty for an enabled user-scope plugin whose skills are loaded

Status Open
Maintainer reply None cached
Activity 1 comment · opened Sep 14, 2026

Summary

The ListPlugins tool returns {"results":[]} for a plugin that is installed, enabled in settings.json, and whose skills and agents are demonstrably loaded into the session. Asking Claude "what plugins am I running?" therefore gets an answer of "none" unless it falls back to reading the plugin manifests off disk.

Environment

  • Claude desktop app (Code tab), version 1.52386.0
  • macOS (Darwin 25.6.0), zsh
  • Plugin: fm-rcc@rcc-fm v0.7.0, user scope, installed from a third-party git marketplace (https://github.com/FMTrainingTV-AI/rcc-fm.git)

Steps to reproduce

  1. Install a plugin at user scope from a git marketplace (/plugin marketplace add <git-url>, then install).
  2. Confirm it is enabled in ~/.claude/settings.json under enabledPlugins.
  3. Start a session and ask Claude what plugins are running, so it calls ListPlugins.

Expected

ListPlugins lists fm-rcc@rcc-fm.

Actual

ListPlugins()                                   -> {"results":[]}
ListPlugins(keywords: ["filemaker", "fm-rcc"])  -> {"results":[]}

Both the no-argument and keyword-filtered forms return empty, so this is not a query-handling quirk in the filter path.

Evidence the plugin really is loaded

  • ~/.claude/settings.json contains "enabledPlugins": { "fm-rcc@rcc-fm": true }
  • ~/.claude/plugins/installed_plugins.json records the plugin at user scope with a valid installPath, version 0.7.0, and a git commit SHA
  • The install path exists and contains a well-formed .claude-plugin/plugin.json (name, version, description, author all present) plus skills/, agents/, and commands/ directories
  • The marketplace checkout at ~/.claude/plugins/marketplaces/rcc-fm is intact, and its .claude-plugin/marketplace.json lists the plugin correctly
  • An in-use marker <installPath>/.in_use/<pid> was stamped for the current session's process, i.e. the harness itself checked the plugin out for this session
  • All 18 of the plugin's skills and both of its agents are present in the session's skill/agent listings, namespaced fm-rcc:*

So the harness clearly knows about the plugin; only ListPlugins fails to report it.

Guesses at the cause

Not verifiable from outside the tool, but two candidates:

  1. ListPlugins reads a session/host-level plugin registry rather than installed_plugins.json, and that registry is not populated for plugins installed outside the SuggestPluginInstall flow. The tool's own description frames it partly as "confirm what was installed after a SuggestPluginInstall card", which hints the data source is tied to that path.
  2. It filters by scope and skips user-scope plugins (or skips third-party marketplaces).

Impact

Low severity, but actively misleading: the tool is the designated way to answer "what plugins do I have", and it silently disagrees with both enabledPlugins and the skills actually loaded. Anyone debugging a plugin that genuinely is not loading will get a false confirmation that it is not installed, and Claude will confidently report "no plugins" unless it independently reads the manifests.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗