claude-code icon indicating copy to clipboard operation
claude-code copied to clipboard

[BUG] Plugins show as "(installed)" in marketplace but don't appear in Installed tab

Open zazu-22 opened this issue 2 months ago • 11 comments

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

  1. Add a custom marketplace:
    /plugin marketplace add owner/my-marketplace
    
  2. Install a plugin from the marketplace:
    /plugin install my-plugin@my-marketplace
    
  3. Run /plugin and check the Installed tab — plugin is not listed
  4. Navigate to the Marketplaces tab and select my-marketplace
  5. Observe: plugin shows ✔ my-plugin (installed) · 0 installs
  6. 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.jsonenabledPlugins is empty {}

The disconnect appears to be between the installation state recorded in installed_plugins.json and what the plugin loader actually recognizes/loads.

zazu-22 avatar Dec 20 '25 03:12 zazu-22

Found 3 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/14202
  2. https://github.com/anthropics/claude-code/issues/13509
  3. https://github.com/anthropics/claude-code/issues/14689

This issue will be automatically closed as a duplicate in 3 days.

  • If your issue is a duplicate, please close it and 👍 the existing issue instead
  • To prevent auto-closure, add a comment or 👎 this comment

🤖 Generated with Claude Code

github-actions[bot] avatar Dec 20 '25 03:12 github-actions[bot]

Found 3 possible duplicate issues:

  1. Bug: Project-scoped plugins incorrectly detected as installed globally #14202
  2. [BUG] #13509
  3. [Bug] Plugin not visible to Claude despite being visible with /plugins command with --plugin-dir flag #14689

This issue will be automatically closed as a duplicate in 3 days.

  • If your issue is a duplicate, please close it and 👍 the existing issue instead
  • To prevent auto-closure, add a comment or 👎 this comment

🤖 Generated with Claude Code

[BUG] #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.

zazu-22 avatar Dec 20 '25 03:12 zazu-22

I'm running into the same issue as well, have you figured out any work arounds?

kevduong1 avatar Dec 28 '25 14:12 kevduong1

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

kaldown avatar Jan 02 '26 17:01 kaldown

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.

dkarmon avatar Jan 07 '26 16:01 dkarmon

Experiencing similar issues with custom marketplace plugins. Can confirm the state file disconnect - installed_plugins.json shows 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:

{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "prompt",
            "prompt": "To find available plugins:\n1. Read `~/.claude/plugins/known_marketplaces.json` → get `installLocation`\n2. Read `{installLocation}/.claude-plugin/marketplace.json`\n3. Plugin content at `{installLocation}/plugins/<name>/`"
          }
        ]
      }
    ]
  }
}

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.

yzavyas avatar Jan 11 '26 14:01 yzavyas

Update: type: prompt hooks don't fire. Switched to type: command with a shell script that echoes the prompt content — that works.

{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh"
          }
        ]
      }
    ]
  }
}

Where session-start.sh just echoes the instructions:

#!/bin/bash
cat << 'PROMPT'
To find available plugins:
1. Read ~/.claude/plugins/known_marketplaces.json
2. Read {installLocation}/.claude-plugin/marketplace.json
3. Plugin content at {installLocation}/plugins/<name>/
PROMPT

So there may be two separate bugs here:

  1. Plugin loader not recognizing installed plugins (this issue)
  2. type: prompt hooks not firing (possibly related?)

yzavyas avatar Jan 11 '26 15:01 yzavyas

Oh nice to know there is a hook for session start!

kaldown avatar Jan 11 '26 15:01 kaldown

Update: Workaround confirmed working.

SessionStart hook with type: command (not type: prompt) successfully injects context at session start.

Example: https://github.com/yzavyas/claude-1337/blob/main/plugins/core-1337/hooks/session-start.sh

yzavyas avatar Jan 11 '26 16:01 yzavyas

Update: Workaround confirmed working.

SessionStart hook with type: command (not type: 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

kaldown avatar Jan 11 '26 17:01 kaldown

Adding another data point on Arch Linux.

Environment:

  • OS: Arch Linux
  • Claude Code: latest

Exact symptom: Same plugin installed and working in one Claude Code session, but in a second concurrent session:

❯ /plugin marketplace add obra/superpowers-marketplace 
  ⎿  Error: Marketplace 'superpowers-marketplace' is already installed.

❯ /plugin install superpowers@superpowers-marketplace 
  ⎿  Plugin 'superpowers@superpowers-marketplace' is already installed.

❯ /plugin → Installed tab
  ⎿  No plugins or MCP servers installed.

❯ /superpowers:[TAB]
  ⎿  (no autocompletion, commands not recognized)

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.

gwpl avatar Jan 11 '26 22:01 gwpl

This is fixed , validated with 1 enterprise ghec private marketplace and with 1 public gh marketplace. fyi.

yzavyas avatar Jan 22 '26 23:01 yzavyas

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.

htxryan avatar Jan 31 '26 19:01 htxryan

Also seeing this bug.

Bug Report:

  • Issue: /plugin install reports plugin as "already installed" when it's not actually installed for the current project
  • Steps to reproduce: 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"
  • Expected behavior: Plugin should be installed for the new project
  • Actual behavior: Plugin is not installed and cannot be used, but CLI prevents installation
  • Workaround attempted: Removed installed_plugins.json, plugin cache, and marketplace directory - issue persists

The CLI appears to be checking marketplace presence rather than actual installation state for the current project

sallaby avatar Feb 04 '26 15:02 sallaby

@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.

gwpl avatar Feb 04 '26 21:02 gwpl