Plugin installed at project scope cannot be reinstalled at user scope
Description
When a plugin is installed from the marketplace at project scope, it becomes impossible to reinstall or promote it to user scope through normal UI/CLI flows. The marketplace treats it as "already installed" based on the cache, but the registration only grants access to the original project.
Steps to Reproduce
- Install a plugin (e.g.,
plugin-dev) from the marketplace with project scope in Project A - Open a different project (Project B)
- Try to use the plugin — it's not available
- Try to install the same plugin again — marketplace says it's already installed
Expected Behavior
Either:
- The marketplace should allow reinstalling at a different scope (user scope)
- There should be a
claude plugin promoteorclaude plugin scopecommand to change scope - The marketplace install flow should offer "Also install for all projects?" option
Actual Behavior
The plugin files exist in ~/.claude/plugins/cache/ (shared), but installed_plugins.json only has a project-scoped entry:
"plugin-dev@claude-plugins-official": [
{
"scope": "project",
"projectPath": "/Users/user/work/project-a",
"installPath": "~/.claude/plugins/cache/claude-plugins-official/plugin-dev/55b58ec6e564",
"version": "55b58ec6e564"
}
]
The only workaround is manually editing installed_plugins.json to add a "scope": "user" entry and enabling it in settings.json under enabledPlugins.
Root Cause
The "already installed" check appears to be based on cache existence, while actual availability is based on registry scope. These two concepts are conflated, creating a gap where a plugin can be "installed" but not "available".
Environment
- Claude Code on macOS
- Plugin system v2 (
installed_plugins.jsonversion 2)
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗