Plugin installed at project scope cannot be reinstalled at user scope from marketplace
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?
When a plugin is installed from the marketplace at project scope, it becomes impossible to reinstall or promote it to user scope through the CLI or marketplace UI. The marketplace treats the plugin as "already installed" based on the shared cache, but the scope-limited registry entry only grants access to the original project. All other projects cannot use the plugin, and there is no way to change the scope without manually editing installed_plugins.json.
What Should Happen?
Either:
- The marketplace /
claude plugin addshould allow reinstalling at a different scope (e.g., user scope) even if the plugin is already cached - A
claude plugin scopeorclaude plugin promotecommand should exist to change plugin scope - The install flow should offer an option like "Install for all projects?" when project scope is selected
Error Messages/Logs
# No error message — the plugin just silently doesn't appear in other projects.
# Attempting to reinstall shows the plugin is already installed.
Steps to Reproduce
- Install a plugin (e.g.,
plugin-devfromclaude-plugins-official) with project scope in Project A - Open Claude Code in a different project (Project B)
- Try to use the plugin (e.g., run a slash command from it) — it's not available
- Try to install the same plugin again via marketplace — it shows as already installed
- Check
~/.claude/plugins/installed_plugins.json— only a project-scoped entry exists:
``json``
"plugin-dev@claude-plugins-official": [
{
"scope": "project",
"projectPath": "/path/to/project-a",
"installPath": "~/.claude/plugins/cache/claude-plugins-official/plugin-dev/55b58ec6e564",
"version": "55b58ec6e564"
}
]
- The only workaround is manually adding a
"scope": "user"entry toinstalled_plugins.jsonand enabling it insettings.jsonunderenabledPlugins
Claude Model
Not sure / Multiple models
Is this a regression?
I don't know
Claude Code Version
2.1.63 (Claude Code)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
VS Code integrated terminal
Additional Information
Root cause analysis: The "already installed" check appears to be based on cache existence (~/.claude/plugins/cache/), while actual plugin availability is determined by registry scope (installed_plugins.json entries). These two concepts are conflated — a plugin can be "installed" (cached) but not "available" (not registered for the current scope).
The installed_plugins.json supports multiple entries per plugin (an array), so the data model already allows both project and user scope entries to coexist. The issue is that the CLI/marketplace install flow doesn't offer this path.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗