anthropics / anthropics/claude-code

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

オープン
#94,227 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
area:plugins bug platform:macos
主要言語
Python
スター
145k
フォーク
23.1k
PR マージ指標
PR 指標を取得中

説明

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

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
git, python
領域
cli, tooling
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
活発
明瞭さ
おおむね明確
初心者へのやさしさ
48/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。