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

Resolved 💬 6 comments Opened Nov 26, 2025 by sevos 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 ↗

This issue has 6 comments on GitHub. Read the full discussion on GitHub ↗