anthropics / anthropics/claude-code
ListPlugins returns empty for an enabled user-scope plugin whose skills are loaded
- Lingua principale
- Python
- Stelle
- 145k
- Fork
- 23.1k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
## 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 `, 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 `/.in_use/` 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.
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Valutazione
Questa issue non è ancora stata valutata.