[BUG] Desktop "Update" button fails for plugins installed at managed scope - CLI update invoked at user scope
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Claude Desktop registers plugins installed via its UI (Customize -> Browse plugins) at managed scope in installed_plugins.json, but the gear -> "Update" button shells out to claude plugin update <plugin>@<marketplace> without --scope, which defaults to user. The update therefore always fails with Plugin "<name>" is not installed at scope user (surfaced in the UI as a bare "failed to update").
Every version bump of the marketplace plugin hits this. The only UI-level workaround is uninstall + reinstall, which re-registers the plugin at managed scope, so the next update breaks again.
Same scope-mismatch family as closed #26907 / #27525 / #27800 (project/user scope) - the managed-scope path via the Desktop UI is still broken.
What Should Happen?
The Desktop Update button should pass the scope recorded in installed_plugins.json (here managed), or the CLI should fall back to the scope where the plugin is actually installed.
claude plugin update <plugin>@<marketplace> --scope managed succeeds immediately, proving only the scope selection is wrong.
Error Messages/Logs
# Claude Desktop main.log:
13:44:26 [info] [CCDMarketplacePluginManagerCLI] Updating plugin: technoclass@technoclass
13:44:33 [info] [HostCLIRunner] Command completed with exit code 1
13:44:33 [error] [CCDMarketplacePluginManagerCLI] Failed to update plugin: Checking for updates for plugin "<plugin>@other" at user scope...
x Failed to update plugin "<plugin>@<marketplace>": Plugin "<plugin>" is not installed at scope user
# Reproduced from terminal:
> claude plugin update <plugin>@<marketplace>
Checking for updates for plugin "<plugin>@<marketplace>" at user scope...
x Failed to update plugin "<plugin>@<marketplace>"": Plugin "<plugin>" is not installed at scope user
# Workaround succeeds:
> claude plugin update <plugin>@<marketplace> --scope managed
v Plugin "<plugin>" updated from 1.17.0 to 1.18.0 for scope managed. Restart to apply changes.
# installed_plugins.json record at the time of failure:
"<plugin>": [{ "scope": "managed", "version": "1.17.0", "installPath": "<path>" }]
Steps to Reproduce
- Add a custom git marketplace (internal GitLab, plain
gitsource inextraKnownMarketplaces). - Install a plugin from it via Claude Desktop -> Customize -> Browse plugins.
installed_plugins.jsonrecords it with"scope": "managed". - Push a version bump to the marketplace repo (plugin.json + marketplace.json in sync).
- In Desktop, plugin gear -> "Check for updates" -> "update available" badge appears (detection works fine).
- Click "Update" -> UI shows "failed to update"; main.log shows the CLI exiting 1 with "not installed at scope user".
- Run
claude plugin update <plugin>@<marketplace> --scope managedin a terminal -> succeeds, confirming the record/scope mismatch is the only problem.
Claude Model
None
Is this a regression?
No, this never worked
Last Working Version
_No response_
Claude Code Version
2.1.144 (Claude Code)
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell
Additional Information
Claude Desktop appVersion 1.11847.5, Windows 10 Pro 19045. Plugin manifests are valid and in sync; marketplace clone refresh and update detection both work - only the scope used by the Desktop-invoked update is wrong.
Suggested fix: CCDMarketplacePluginManagerCLI should propagate the scope from the plugin's install record when invoking claude plugin update (same class of fix as #27525).