A marketplace catalog refresh disables an installed plugin when the catalog's newer version adds a dependency
What happens
An installed plugin appears to be judged against the catalog's current manifest rather than the manifest it was installed with. So refreshing a marketplace can break an install that has not been updated and whose own on-disk manifest is still perfectly satisfiable.
This makes publishing a new version destructive to existing installs, rather than merely offering them an upgrade.
Reproduction
- Marketplace catalog has plugin
Av1 (no dependencies) and pluginB. claude plugin install A@my-marketplace— installs and loads cleanly.Bis not installed.- Publish v2 of
Adeclaringdependencies: ["B"]. Do not update the plugin. claude plugin marketplace update my-marketplaceclaude plugin list
Result — the still-installed v1 now reports:
❯ A@my-marketplace
Status: ✘ failed to load
Error: Dependency "B@my-marketplace" is not installed
The installed v1's own manifest declares no dependencies (verified by reading it out of the install cache), so nothing about the installed artifact is unsatisfiable. Only the catalog moved.
Why this is worse than an upgrade prompt
The user never opted into v2. A catalog refresh is a routine, low-intent action, and it silently disables a working plugin. There is no way for a publisher to add a dependency to a plugin without breaking every existing install at their next refresh — including installs that intend to stay on the old version.
Expected
One of:
- an installed plugin is judged against the manifest it was installed with, and dependency requirements apply from the version the user actually adopts; or
- the catalog refresh reports the impending requirement without disabling the working install; or
- the documentation states that adding a dependency is a breaking change for all existing installs, so publishers can plan for it.
Environment
Claude Code CLI 2.1.231, macOS. Measured on two marketplace source types — a local directory source and a git source served over smart HTTP — with identical behaviour on both. Third-party auto-update is off by default and marketplaces do not appear to auto-refresh at session start, so the break waits for an explicit refresh rather than happening spontaneously.