[BUG] Cowork: account-scoped git marketplace "Check for updates" always fails first attempt with MARKETPLACE_ERROR:NOT_REGISTERED, recovers only via refreshMarketplaceViaRemote

Status Open
Maintainer reply None cached
Activity 1 comment · opened Aug 15, 2026

Environment

  • Claude Desktop (Cowork / local agent mode), macOS (Darwin 25.5.0)
  • Marketplace: an account-scoped GitHub marketplace added from a private repo via the Claude GitHub App
  • Reproduced across two Macs, same account.

Summary

Clicking a marketplace's ⋮ → Check for updates surfaces "plugin sync failed" on the first attempt, every time. The underlying error is MARKETPLACE_ERROR:NOT_REGISTERED, thrown by the CustomPlugins.refreshMarketplace IPC call. The update only succeeds after a retry — either an automatic one ~30s later, or a manual "leave the marketplace and reopen it from Customize → Plugins" — which routes through refreshMarketplaceViaRemotesyncAccountMarketplacepollSyncUntilDone status=success.

Reproducibility

3 of 3 Check-for-updates invocations failed on the first attempt (100%), across two machines. Zero first-try successes.

Steps to reproduce

  1. Add a private GitHub repo as an account marketplace (via the Claude GitHub App), containing a plugin.
  2. Push a new plugin version (bumped version in .claude-plugin/plugin.json) to the repo's default branch.
  3. In Customize → Plugins, open the marketplace's ⋮ → Check for updates.

Expected

The marketplace re-syncs the repo and the plugin updates to the pushed version.

Actual

The first attempt fails — UI shows "plugin sync failed"; logs show MARKETPLACE_ERROR:NOT_REGISTERED. A retry or a reopen-the-marketplace then succeeds. (The plugin-detail "Update" button also stays greyed on "On latest version" until the marketplace itself re-syncs.)

Log evidence (~/Library/Logs/Claude/main*.log, identifiers redacted)

Two update cycles, both failing first:

# Cycle 1 — 1 failure, then success
[info]  [CCDMarketplacePluginManagerCLI] Refreshing marketplace: <my-marketplace>
[error] [REACT_QUERY_CLIENT] ...CustomPlugins_$_refreshMarketplace: Error: MARKETPLACE_ERROR:NOT_REGISTERED
[info]  [remoteMarketplaceOps]   refreshMarketplaceViaRemote backendId=<redacted>
[info]  [remoteMarketplaceClient] syncAccountMarketplace id=<redacted>
[info]  [remoteMarketplaceClient] pollSyncUntilDone id=<redacted> settled with status=success after 2559ms

# Cycle 2 — 2 failures, then success
[error] [REACT_QUERY_CLIENT] ...refreshMarketplace: Error: MARKETPLACE_ERROR:NOT_REGISTERED
[error] [REACT_QUERY_CLIENT] ...refreshMarketplace: Error: MARKETPLACE_ERROR:NOT_REGISTERED
[info]  [remoteMarketplaceClient] syncAccountMarketplace id=<redacted>
[info]  [remoteMarketplaceClient] pollSyncUntilDone id=<redacted> settled with status=success after 2981ms

Root-cause hypothesis

The account-scoped marketplace is not present in the local registry — neither ~/.claude/plugins/known_marketplaces.json nor the Cowork .../cowork_plugins/known_marketplaces.json lists it (it is account-scoped / server-side). The direct refreshMarketplace path appears to resolve the marketplace locally, finds it unregistered, and throws NOT_REGISTERED. The refreshMarketplaceViaRemote path (server-side) works, but is only reached after the first failure.

Impact

Every update requires a retry or a manual reopen. "plugin sync failed" reads as a real failure, so a user reasonably assumes the update is broken and gives up. Not data-affecting — the published release is fine; this is purely the client-side refresh leg.

Suggested fix

Have refreshMarketplace fall through to refreshMarketplaceViaRemote for account-scoped marketplaces (or register them locally at add-time), so the first Check-for-updates succeeds without a retry.

Related issues (this appears distinct from all of them)

  • #73673Desktop: personal git-marketplace plugins never auto-update; Update button is a silent no-op. Related theme, different code path: #73673 is the CLI/claude plugin path where the Update button logs nothing and the marketplace is in known_marketplaces.json. This report is the Cowork account-scoped path, where Check-for-updates does log (CCDMarketplacePluginManagerCLI Refreshing marketplace), fails NOT_REGISTERED, then recovers via refreshMarketplaceViaRemote, and the marketplace is not in known_marketplaces.json (server-side).
  • #83777Plugin "Update now" writes metadata without refreshing marketplace source. Same "update path doesn't refresh source" family.
  • #82064Plugin install fails with malformed marketplace path after marketplace remove/re-add in same session. Adjacent to the "reopen the marketplace to force a sync" workaround here.

Suggested labels: bug, has repro, area:cowork, area:plugins, area:desktop, platform:macos

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗