[BUG] Plugins show as "(installed)" in marketplace but don't appear in Installed tab
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?
Plugins from a custom marketplace appear as installed in the marketplace view but do not appear in the Installed tab. The plugin commands and hooks are not available despite state files indicating successful installation.
The marketplace UI shows contradictory information: ✔ my-plugin (installed) · 0 installs
State files (~/.claude/plugins/installed_plugins.json) correctly contain the plugin entries, and the cache directories exist with valid plugin.json files, but the plugin system doesn't recognize them as installed.
What Should Happen?
- Plugins should appear in the Installed tab after installation
- Plugin commands should be available (e.g.,
/my-plugin:command) - Marketplace view should show consistent install state (not "installed" with "0 installs")
Error Messages/Logs
No error messages displayed.
The installation appears to succeed silently but the plugins are not loaded.
Steps to Reproduce
- Add a custom marketplace:
````
/plugin marketplace add owner/my-marketplace
- Install a plugin from the marketplace:
````
/plugin install my-plugin@my-marketplace
- Run
/pluginand check the Installed tab — plugin is not listed - Navigate to the Marketplaces tab and select
my-marketplace - Observe: plugin shows
✔ my-plugin (installed) · 0 installs - Try running a plugin command — command not found
State verification showing the corruption:
# Shows plugin is "installed" in state
cat ~/.claude/plugins/installed_plugins.json | grep my-plugin
# Cache exists with valid plugin.json
ls ~/.claude/plugins/cache/my-marketplace/my-plugin/
cat ~/.claude/plugins/cache/my-marketplace/my-plugin/1.0.0/.claude-plugin/plugin.json
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.0.74 (Claude Code)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Other
Additional Information
Workaround: Removing state files and cache, then reinstalling:
rm -rf ~/.claude/plugins/cache/my-marketplace
rm ~/.claude/plugins/installed_plugins.json
# Restart Claude Code and reinstall
Relevant state files:
~/.claude/plugins/installed_plugins.json— contains plugin entries~/.claude/plugins/known_marketplaces.json— marketplace is registered~/.claude/plugins/cache/my-marketplace/— plugin files exist~/.claude/settings.json—enabledPluginsis empty{}
The disconnect appears to be between the installation state recorded in installed_plugins.json and what the plugin loader actually recognizes/loads.
18 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
[[BUG] #13509](https://github.com/anthropics/claude-code/issues/13509) is close, but that seems to be limited to local marketplaces, and may be subtly different in other ways. This happened with a marketplace installed from a Github repo.
I'm running into the same issue as well, have you figured out any work arounds?
As side solution I have a project that will allow you to enable installed plugins in other local directories and also track plugins from one place: https://github.com/kaldown/ccpm
Running to the same issue with superpowers@superpowers-marketplace and dev-browser@sawyerhood/dev-browser (they suddenly disappeared from the plugin installed view - although cc says they are installed). In some cases plugin appear in the marketplace view but installation is not working.
Experiencing similar issues with custom marketplace plugins. Can confirm the state file disconnect -
installed_plugins.jsonshows the plugin but the system doesn't load it.Workaround we're trying: Use a prompt-based SessionStart hook that tells Claude where to find plugins directly.
We're building claude-1337 - a plugin marketplace that attempts to sidestep this issue using a SessionStart hook:
The idea is to bypass the loader entirely - Claude reads the marketplace files directly at session start instead of relying on the plugin system to recognize what's installed. Will share updates on how well this works.
Root cause hypothesis: The plugin loader and state file have different definitions of "installed". State file records intent, loader checks something else (timestamps? git SHAs? version comparisons?) that gets out of sync.
Update:
type: prompthooks don't fire. Switched totype: commandwith a shell script that echoes the prompt content — that works.Where
session-start.shjust echoes the instructions:So there may be two separate bugs here:
type: prompthooks not firing (possibly related?)Oh nice to know there is a hook for session start!
Update: Workaround confirmed working.
SessionStart hook with
type: command(nottype: prompt) successfully injects context at session start.Example: https://github.com/yzavyas/claude-1337/blob/main/plugins/core-1337/hooks/session-start.sh
That's not very secure to install plugins by shell script. Context if it could change after some time, leaving to vulnerability exposure. Please consider creating plugin following the Claude code conduct
Adding another data point on Arch Linux.
Environment:
Exact symptom:
Same plugin installed and working in one Claude Code session, but in a second concurrent session:
The plugin is marked as installed in state files but the plugin loader doesn't recognize it for loading in the second session. Cannot apply the workaround (rm state files) because the first session has the plugin "in use."
This appears related to #14202 - the underlying issue seems to be that plugin installation state is global but plugin loading is per-session, without proper synchronization between them.
This is fixed , validated with 1 enterprise ghec private marketplace and with 1 public gh marketplace. fyi.
I just ran into this issue, exactly as described at the top of this issue thread (showing installed but with 0 installations, and no assets are usable), so it is not resolved (at least not in all cases). MacOS, v2.1.19.
Also seeing this bug.
Bug Report:
a. Install a scoped plugin for one project
b. Switch to a different project directory
c. Try to install the same plugin
d. CLI incorrectly reports: "Plugin xxx is already installed"
The CLI appears to be checking marketplace presence rather than actual installation state for the current project
@htxryan I am not using apple (using Linux) however if you find workaround https://github.com/shibuido/claude-plugin-install (or https://gist.github.com/gwpl/cd6dcd899ca0acce1b4a1bc486d56a9e ) working for you please give a heads up that works also on MacOS, or if you find way to patch it to also work on MacOS , PRs are welcome or github issues with enough detail for my AI/LLM to make a patch for MacOS without having one. Otherwise, I hope issue will be fixed upstream soon so we don't have to use workarounds.
I have the same issue.
Plugins Discover Installed Marketplaces (←/→ or tab to cycle)
Install Plugins
❯ ✔ frontend-design [development] (installed) · 247.7K installs
Create distinctive, production-grade frontend interfaces ...
◯ context7 [development] [Community Managed] · 140K installs
Upstash Context7 MCP server for up-to-date documentation ...
✔ superpowers [development] (installed) · 118.9K installs
Superpowers teaches Claude brainstorming, subagent driven...
◯ code-review [productivity] · 117.7K installs
Automated code review for pull requests using multiple sp...
✔ github [productivity] (installed) · 102.4K installs
Official GitHub MCP server for repository management. Cre...
↓ more below
----
and yet :
Plugins Discover Installed Marketplaces (←/→ or tab to cycle)
Manage plugins
No plugins or MCP servers installed.
---
Version: 2.1.66
Session name: /rename to add a name
Session ID: 94f2ddf7-d92f-4502-a9f0-15d4b9da2377
cwd: C:\01_Projects\01a_Coding\02_CodingProjects\grapplingprimitivesastro
Login method: Claude Max Account
Email: gfabrot@gmail.com
Model: Default Opus 4.6 · Most capable for complex work
Memory:
Setting sources: Project local settings
Hey folks! Sorry about this. We have a fix ready in our next release that will show the correct state in the "Installed" tab of the plugins UI.
We're also looking into the root cause of why installations can sometimes silently fail in the first place.
The script is a prompt. That's the same mechanism plugins use. The security question is content trust, not delivery, and plugins don't solve that either.
Claude's own injection detection is improving as a layer of defense. Tested this with a summarize call and was pleasantly surprised. https://justin.poehnelt.com/posts/rewrite-your-cli-for-ai-agents/