Summary
When a plugin is installed with --scope project, other projects incorrectly show the plugin as "(installed)" in the Marketplaces view and refuse to install it, even though it's not active in those projects.
Claude Code Version: 2.0.70
Steps to Reproduce
-
Create a local plugin marketplace with a plugin (e.g., my-plugin@my-marketplace)
-
In Project A, install the plugin with project scope:
/plugin marketplace add /path/to/marketplace
/plugin install my-plugin@my-marketplace --scope project
-
Verify it works in Project A:
/plugin → Installed tab shows the plugin ✓
-
Open Claude Code in Project B (different directory)
-
Run /plugin and navigate to Marketplaces tab
Expected: Plugin shows as available to install (not installed in this project)
Actual: Plugin shows "(installed)" with a checkmark
-
Try to install the plugin for Project B:
/plugin install my-plugin@my-marketplace --scope project
Expected: Plugin installs for Project B
Actual: Installation fails/skips because Claude Code thinks it's already installed
-
Check Installed tab in Project B
Result: Plugin does NOT appear in Installed tab (correctly filtered by projectPath)
Root Cause Analysis
The bug is an inconsistency in how projectPath is checked across different plugin operations:
| Operation |
Checks projectPath? |
Behavior |
| Marketplaces "(installed)" indicator |
❌ No |
Shows installed globally |
| Install command |
❌ No |
Refuses if exists globally |
| Installed tab listing |
✓ Yes |
Correctly filters by project |
The plugin registry at ~/.claude/plugins/installed_plugins.json correctly stores projectPath for project-scoped installs, but the Marketplaces view and install command only check if the plugin key exists in the registry, not whether it's installed for the current project.
Workaround
Manually add the new project to ~/.claude/plugins/installed_plugins.json and create .claude/settings.json in the target project with enabledPlugins reference.
Impact
This bug prevents using the same local plugin across multiple projects with project-scoped isolation, which is a core use case for local plugin marketplaces in monorepos or multi-project setups.
Summary
When a plugin is installed with
--scope project, other projects incorrectly show the plugin as "(installed)" in the Marketplaces view and refuse to install it, even though it's not active in those projects.Claude Code Version: 2.0.70
Steps to Reproduce
Create a local plugin marketplace with a plugin (e.g.,
my-plugin@my-marketplace)In Project A, install the plugin with project scope:
Verify it works in Project A:
/plugin→ Installed tab shows the plugin ✓Open Claude Code in Project B (different directory)
Run
/pluginand navigate to Marketplaces tabExpected: Plugin shows as available to install (not installed in this project)
Actual: Plugin shows "(installed)" with a checkmark
Try to install the plugin for Project B:
Expected: Plugin installs for Project B
Actual: Installation fails/skips because Claude Code thinks it's already installed
Check Installed tab in Project B
Result: Plugin does NOT appear in Installed tab (correctly filtered by projectPath)
Root Cause Analysis
The bug is an inconsistency in how
projectPathis checked across different plugin operations:The plugin registry at
~/.claude/plugins/installed_plugins.jsoncorrectly storesprojectPathfor project-scoped installs, but the Marketplaces view and install command only check if the plugin key exists in the registry, not whether it's installed for the current project.Workaround
Manually add the new project to
~/.claude/plugins/installed_plugins.jsonand create.claude/settings.jsonin the target project withenabledPluginsreference.Impact
This bug prevents using the same local plugin across multiple projects with project-scoped isolation, which is a core use case for local plugin marketplaces in monorepos or multi-project setups.