anthropics / anthropics/claude-code

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

Offen
#94,227 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
area:plugins bug platform:macos
Vorherrschende Sprache
Python
Sterne
145k
Forks
23.1k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

## 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.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.