[BUG] Desktop "Update" button fails for plugins installed at managed scope - CLI update invoked at user scope

Open 💬 0 comments Opened Jun 10, 2026 by 251220032

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

  1. Add a custom git marketplace (internal GitLab, plain git source in extraKnownMarketplaces).
  2. Install a plugin from it via Claude Desktop -> Customize -> Browse plugins. installed_plugins.json records it with "scope": "managed".
  3. Push a version bump to the marketplace repo (plugin.json + marketplace.json in sync).
  4. In Desktop, plugin gear -> "Check for updates" -> "update available" badge appears (detection works fine).
  5. Click "Update" -> UI shows "failed to update"; main.log shows the CLI exiting 1 with "not installed at scope user".
  6. Run claude plugin update <plugin>@<marketplace> --scope managed in 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).

View original on GitHub ↗