[DX] installed_plugins.json naming is misleading - file contains disabled plugins too

Resolved 💬 3 comments Opened Jan 21, 2026 by anton-abyzov Closed Jan 25, 2026

Summary

The file ~/.claude/plugins/installed_plugins.json has a misleading name. It contains ALL plugins ever registered, including disabled ones. The actual "installed" (enabled/active) state is tracked separately in ~/.claude/settings.jsonenabledPlugins.

The Confusion

| What I expected | Reality |
|-----------------|---------|
| installed_plugins.json = active plugins | Contains 20+ entries (registered + disabled) |
| Marketplace "2 installed" | Only counts enabled plugins from settings.json |

Current State Tracking (Discovered by debugging)

~/.claude/
├── plugins/
│   └── installed_plugins.json    ← Registry of ALL plugins (installed OR disabled)
└── settings.json                 ← enabledPlugins: { "plugin@market": true }

A plugin is actually active only if:

  1. Exists in installed_plugins.json (registered)
  2. Listed in settings.jsonenabledPlugins with value true (enabled)

Suggestion

Rename installed_plugins.json to one of:

  • plugin_registry.json
  • registered_plugins.json
  • known_plugins.json

This would make it clear the file is a registry, not a list of active plugins.

Related Issues

  • #9996 - UI shows disabled but tools remain available
  • #14202 - Project-scoped plugins incorrectly detected as installed globally
  • #14815 - "(installed)" but not in Installed tab

Impact

Developers building plugin tooling (like SpecWeave) waste time debugging why installed_plugins.json shows 20 plugins but only 2 are "installed" in the UI.

---

Discovered while building: SpecWeave plugin auto-loading system

View original on GitHub ↗

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