[DX] installed_plugins.json naming is misleading - file contains disabled plugins too
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.json → enabledPlugins.
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:
- Exists in
installed_plugins.json(registered) - Listed in
settings.json→enabledPluginswith valuetrue(enabled)
Suggestion
Rename installed_plugins.json to one of:
plugin_registry.jsonregistered_plugins.jsonknown_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
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗