claude plugin install succeeds but fails to persist plugin to installed_plugins.json for local directory marketplaces

Status Fixed / completed
Maintainer reply None cached
Activity 6 comments · opened Nov 26, 2025 · closed Nov 26, 2025

Description

When installing a plugin from a local directory marketplace, the claude plugin install command reports success but fails to write the plugin entry to ~/.claude/plugins/installed_plugins.json. This causes the plugin's slash commands to not load in new sessions.

Environment

  • Claude Code version: 2.0.54
  • OS: Linux (Arch Linux 6.17.8)
  • Shell: Bash

Steps to Reproduce

  1. Create a local marketplace with a plugin containing slash commands:

``
my-marketplace/
├── .claude-plugin/
│ └── marketplace.json
└── plugins/
└── my-plugin/
├── .claude-plugin/
│ └── plugin.json
└── commands/
└── my-command.md
``

  1. Add the marketplace as a local directory:

``bash
claude plugin marketplace add /path/to/my-marketplace
``

  1. Install a plugin from the marketplace:

``bash
claude plugin install my-plugin
``

  1. Observe: Command reports ✔ Successfully installed plugin: my-plugin@my-marketplace
  1. Check ~/.claude/plugins/installed_plugins.json - the plugin entry is NOT added
  1. Start a new Claude session - the plugin's slash commands are not available

Expected Behavior

The plugin entry should be written to installed_plugins.json and slash commands should load in new sessions.

Actual Behavior

  • Install command reports success
  • Plugin entry is NOT written to installed_plugins.json
  • Slash commands don't load in new sessions
  • claude plugin uninstall says "Plugin not found in installed plugins"

Additional Context

  • claude plugin validate <plugin-path> passes validation
  • claude plugin marketplace update succeeds
  • Plugins installed from the same marketplace previously (before recent updates) still work
  • GitHub-sourced marketplace plugins install correctly
  • The marketplace is correctly configured with source: "directory" in known_marketplaces.json

Workaround

Manually add the plugin entry to ~/.claude/plugins/installed_plugins.json:

{
  "my-plugin@my-marketplace": {
    "version": "1.0.0",
    "installedAt": "2025-11-26T12:00:00.000Z",
    "lastUpdated": "2025-11-26T12:00:00.000Z",
    "installPath": "/path/to/my-marketplace/plugins/my-plugin",
    "gitCommitSha": "<current-commit>",
    "isLocal": true
  }
}

View original on GitHub ↗

6 Comments

github-actions[bot] · 10 months ago

Found 3 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/11372
  2. https://github.com/anthropics/claude-code/issues/11243
  3. https://github.com/anthropics/claude-code/issues/11509

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

sevos · 10 months ago

Additional Findings

After further investigation, this bug is more severe than initially reported:

1. Affects ALL marketplaces, not just local directories

The bug also affects GitHub-cloned marketplaces (via claude plugin marketplace add https://github.com/...). This is NOT limited to local directory marketplaces.

2. installed_plugins.json is never created

Even with a completely clean configuration (removed all files from ~/.claude/plugins/), the install command:

  • Reports success: ✔ Successfully installed plugin: git@marketplace-name
  • But never creates installed_plugins.json at all

3. Reproduction on clean config

# Start fresh
rm -rf ~/.claude/plugins/*
claude plugin marketplace list  # "No marketplaces configured"

# Add marketplace
claude plugin marketplace add https://github.com/user/marketplace.git
# ✔ Successfully added marketplace

# Install plugin
claude plugin install my-plugin@marketplace-name
# ✔ Successfully installed plugin

# Check result
ls ~/.claude/plugins/
# known_marketplaces.json  marketplaces/
# NO installed_plugins.json created!

cat ~/.claude/plugins/installed_plugins.json
# File does not exist

4. Workaround

Manually create ~/.claude/plugins/installed_plugins.json:

{
  "version": 1,
  "plugins": {
    "plugin-name@marketplace-name": {
      "version": "1.0.0",
      "installedAt": "2025-11-26T12:00:00.000Z",
      "lastUpdated": "2025-11-26T12:00:00.000Z",
      "installPath": "/home/user/.claude/plugins/marketplaces/marketplace-name/plugins/plugin-name",
      "gitCommitSha": "<commit-sha>",
      "isLocal": true
    }
  }
}

Environment

  • Claude Code version: 2.0.54
  • OS: Linux (Arch Linux 6.17.8)
sevos · 10 months ago

Dumping all configuration rm -fr ~/.claude* helped.

Luc45 · 10 months ago

I think this should be reopened, I don't know if it's the exact same issue, but I can say for sure that the plugin I installed isn't persisted in the project I work on daily.

Luc45 · 10 months ago

I just realized that the plugin I installed was a "Skill", not a subagent, so this is actually a non-issue for me... (assuming Claude is, indeed, using the Skill on it's context, which I can't confirm)

github-actions[bot] · 10 months ago

This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.