Plugin list shows user-scope and project-scope installs as identical rows, hiding that one is pinned to an older version
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Two rows, identical in every displayed field — same plugin name, same marketplace, same author, same skill count (5), same Last updated date.
They were not the same install. From ~/.claude/plugins/installed_plugins.json:
{
"version": 2,
"plugins": {
"<plugin>@<marketplace>": [
{
"scope": "user",
"version": "0.4.0",
"gitCommitSha": "cd44aa8…",
"lastUpdated": "2026-08-18T11:36:55.047Z"
},
{
"scope": "project",
"projectPath": "C:\\Users\\<user>\\source\\repos\\<repo>",
"version": "0.3.0",
"gitCommitSha": "f41f5b5…",
"lastUpdated": "2026-08-18T11:21:46.820Z"
}
]
}
}
The user-scope install tracked the marketplace correctly. The project-scope one stayed pinned to an older commit across restarts — and inside that project it was the one in effect, so the session ran an old copy of the plugin, missing a skill and a PreToolUse hook that the newer version ships.
The presenting symptom was "the plugin won't update", and the UI gave nothing to work with: no scope label, no version per row, no outdated indicator. Diagnosing it required reading installed_plugins.json directly. The duplicate rows looked like a rendering quirk rather than two installs at different versions.
What Should Happen?
Either a single row, or two rows distinguishable by scope and version.
Show scope and version on each row, or collapse duplicates with an indicator when the same plugin is installed at more than one scope — and ideally warn when the resolved install is not the newest one available.
Error Messages/Logs
Steps to Reproduce
- In ~/.claude/settings.json, declare a marketplace and enable a plugin from it:
{
"extraKnownMarketplaces": {
"<marketplace>": {
"source": { "source": "github", "repo": "<org>/<repo>" },
"autoUpdate": true
}
},
"enabledPlugins": { "<plugin>@<marketplace>": true }
}
- In a project, commit a .claude/settings.json that also carries enabledPlugins for the same plugin (a natural thing to do — it makes the plugin 3. zero-setup for anyone cloning the repo).
- Open that project in Claude Code, let both installs register.
- Publish a new plugin version to the marketplace repo's default branch, then restart.
- Open the plugin list.
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
Claude Code 2.1.227 (desktop app)
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
VS Code integrated terminal
Additional Information
_No response_