[BUG] `claude plugin update <name>` fails for installed plugins unless fully qualified; error is identical to "plugin does not exist" (2.1.221)
Summary
claude plugin update <name> fails for every installed plugin unless the name is fully qualified as <name>@<marketplace>. The failure message is identical to the one for a plugin that isn't installed at all, so it reads as a broken installation rather than a usage error.
install and uninstall both accept bare names, and --help documents the argument only as <plugin>, so there is nothing to suggest update is different.
Reproduce
Using only plugins from the official marketplace:
$ claude plugin update superpowers
Checking for updates for plugin "superpowers" at user scope…
✘ Failed to update plugin "superpowers": Plugin "superpowers" not found
$ claude plugin update superpowers@claude-plugins-official
Checking for updates for plugin "superpowers@claude-plugins-official" at user scope…
✔ superpowers is already at the latest version (6.2.0).
superpowers is installed and enabled throughout; claude plugin list shows it.
The message is the problem
A plugin that genuinely does not exist produces the same string:
$ claude plugin update nosuchplugin
✘ Failed to update plugin "nosuchplugin": Plugin "nosuchplugin" not found
$ claude plugin update superpowers
✘ Failed to update plugin "superpowers": Plugin "superpowers" not found
Byte-identical. There is no signal that the argument form is what's wrong.
By contrast uninstall resolves bare names and returns a distinct message when one is genuinely absent — Plugin "nosuchplugin" not found in installed plugins — which shows the bare-name lookup exists elsewhere in the CLI.
Scope of the bug
Reproduced on five plugins across two marketplaces and both source types (a directory-sourced marketplace and the official GitHub one). Bare fails and qualified succeeds in every case, including superpowers and aws-core from claude-plugins-official.
Impact
This silently defeats the obvious upgrade path. In our case a plugin sat several minor versions behind for weeks: claude plugin update <name> reported "not found", which we read as a broken install, while the plugin remained installed and enabled the whole time. Skills that had moved between plugins had stopped being available with no error anywhere.
Expected
Either:
updateresolves bare names the wayinstallanduninstalldo — disambiguating or erroring only when a name is ambiguous across marketplaces; or- the error distinguishes the two cases, e.g.
Plugin "superpowers" is installed as "superpowers@claude-plugins-official" — specify the marketplace.
Option 1 matches the other subcommands. Option 2 alone would still have saved the debugging time.
Environment
- Claude Code 2.1.221
- macOS (darwin 25.5.0)
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗