anthropics / anthropics/claude-code
ListPlugins returns empty for an enabled user-scope plugin whose skills are loaded
- Ngôn ngữ chính
- Python
- Star
- 145k
- Fork
- 23.1k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
## 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.
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Locate the ListPlugins implementation and the code that builds its plugin registry; no source file is named in the report. Reproduce the case with an enabled user-scope plugin from a git marketplace, then verify that both unfiltered and keyword-filtered calls list fm-rcc@rcc-fm while the existing plugin and skill evidence remains valid.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- git, python
- Lĩnh vực
- cli, tooling
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Sôi nổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 48/100