[BUG] Project-scoped plugin incorrectly shows as "installed" in other projects' marketplace UI
[BUG] Project-scoped plugin incorrectly shows as "installed" in other projects' marketplace UI
Bug Description
When a plugin is installed at project-level in Project A, the /plugin marketplace UI in Project B incorrectly shows the plugin as "installed" (with a checkmark). However:
- The plugin does not appear in the "Installed" tab (correct behavior - it's not installed in the current project)
- Attempting to view the plugin's detail view fails silently - the UI exits back to the parent view without showing details
- There is no way to install the plugin for the current project through the UI
- There is no way to uninstall/manage the plugin from the current project's UI
This creates a broken state where the UI shows contradictory information and provides no path forward.
Steps to Reproduce
- Add a third-party marketplace:
````
/plugin marketplace add someuser/some-marketplace
- In Project A (e.g.,
~/projects/project-alpha), install a plugin at project-level:
```
/plugin install example-plugin@some-marketplace
~/projects/project-alpha/.claude/settings.json
This creates :`
json``
{
"enabledPlugins": {
"example-plugin@some-marketplace": true
}
}
- Open Claude Code in a different project (e.g.,
~/projects/project-beta) that has no.claude/settings.json
- Run
/pluginand navigate to the "Marketplaces" tab → select the marketplace → "Browse plugins"
- Observe: The plugin shows
✓ example-plugin (installed)with a checkmark
- Press Enter to view details or Space to toggle
- Observe: The UI immediately exits back to the "Browse plugins" list without showing any detail view or taking any action
Expected Behavior
One of the following:
Option A (Preferred): The marketplace UI should filter by current project context:
- Only show plugins as "installed" if they're installed in the current project or at user-level
- Allow installing the same plugin for the current project even if it's installed elsewhere
Option B: Show installation scope clearly:
- Display "installed in: ~/projects/project-alpha" in the UI
- Provide option to "Also install for this project" or "Install at user-level"
Option C: At minimum, the detail view should not fail silently - it should either:
- Show the plugin details with installation location info
- Show an error message explaining why it can't be managed from this context
Actual Behavior
- Checkmark shown in marketplace browse (misleading - not installed here)
- Not shown in "Installed" tab (correct, but contradicts the checkmark)
- Detail view fails silently (exits to parent with no feedback)
- No way to install, uninstall, or manage the plugin from this project
Root Cause Analysis
The issue appears to be in how ~/.claude/plugins/installed_plugins.json is read:
"example-plugin@some-marketplace": [
{
"scope": "project",
"installPath": "/Users/user/.claude/plugins/cache/some-marketplace/example-plugin/1.0.0",
"version": "1.0.0",
"installedAt": "2026-01-14T07:51:25.915Z",
"lastUpdated": "2026-01-14T07:51:25.915Z",
"projectPath": "/Users/user/projects/project-alpha"
}
]
The marketplace UI checks if a plugin exists in installed_plugins.json to show the "installed" checkmark, but does not:
- Filter by
scope("project" vs "user") - Compare
projectPathagainst the current working directory - Handle the case where the plugin is installed for a different project
Environment
- OS: macOS (darwin arm64)
- Plugin: Any plugin from a third-party marketplace installed at project-level
- Project A: Has plugin installed at project-level
- Project B: Does not have plugin, but UI shows it as installed
Workaround
Manually create .claude/settings.json in the target project:
mkdir -p /path/to/project/.claude
echo '{"enabledPlugins":{"example-plugin@some-marketplace":true}}' > /path/to/project/.claude/settings.json
Related Issues
- #16585 - Third-party marketplace plugins not appearing in list (different bug, but related area)
- #17942 - Project-level enabledPlugins replaces global (different bug, but related to project/global scoping)
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗