Desktop Cowork: RemotePluginManager removes 3rd-party GitHub marketplace plugins on every sync

Resolved 💬 8 comments Opened Mar 24, 2026 by sdh07 Closed Apr 2, 2026

Summary

Claude Desktop (Cowork mode) removes all plugins from third-party GitHub-sourced marketplaces after every restart. The RemotePluginManager.syncPlugins() cleanup marks them as NOT_AVAILABLE because it only protects source: "manual" marketplaces, not source: "github" ones.

Reproduction

  1. Add a third-party GitHub marketplace in Claude Desktop (e.g., cogni-work/insight-wave with 14 plugins)
  2. Install plugins from that marketplace in Cowork mode
  3. Restart Claude Desktop
  4. All plugins from the marketplace are gone from the UI

Log evidence (~/Library/Logs/Claude/main.log)

20:58:27-49  [CustomPlugins] installPlugin: remote API install succeeded for plugin cogni-*@insight-wave (source=remote, mode=ccd)
             ... all 14 plugins installed successfully ...
20:59:11     [remoteMarketplaceMigration] marketplace_migration.invoked
20:59:12     [RemotePluginManager] Starting remote plugins sync
20:59:12     [PluginsFetcher] fetchAutoInstalledPlugins: 0 plugins
20:59:14     [RemotePluginManager] Removed 14 user-installed plugins set to NOT_AVAILABLE
20:59:15     [RemotePluginManager] Removed 14 user-installed plugins set to NOT_AVAILABLE

Root cause

In RemotePluginManager._syncPlugins(), user-installed plugins are checked against Anthropic's remote catalog. Plugins not found in the catalog are removed unless they belong to a source: "manual" marketplace:

// Protection set only includes "manual" marketplaces
const j = featureFlag("720735283")
  ? new Set(serverMarketplaces.filter(z => z.source === "manual").map(z => z.name))
  : new Set;

// Plugins from "github" marketplaces are NOT protected → deleted
const W = userPlugins.filter(V =>
    !remoteCatalog.has(V.id) &&
    !remoteCatalogByKey.has(key(V)) &&
    !(V.marketplaceName && j.has(V.marketplaceName))  // "github" !== "manual"
);

Third-party marketplaces added via source: "github" (the standard way to add a marketplace) are not included in the protection set j, so their plugins are always removed during sync.

State after removal

  • ~/Library/.../cowork_plugins/installed_plugins.json: { "plugins": {} } — emptied by removal
  • ~/Library/.../cowork_plugins/cache/insight-wave/: All 14 plugin caches still exist (files not cleaned)
  • ~/Library/.../cowork_settings.json: enabledPlugins still has all 14 entries (stale)

Expected behavior

Plugins from any user-added marketplace (source: "github", source: "manual", etc.) should be protected from the NOT_AVAILABLE cleanup. Only plugins that were pushed from Anthropic's server and are no longer available should be removed.

Workaround

Use Claude Code CLI (claude plugin install <name>@<marketplace>) instead of the Desktop Cowork GUI. CLI-installed plugins use the global ~/.claude/plugins/installed_plugins.json and are not subject to RemotePluginManager sync.

Environment

  • Claude Desktop: latest (March 2026)
  • Claude Code CLI: 2.1.81
  • macOS (Darwin 25.3.0)
  • Affected marketplace: cogni-work/insight-wave (14 plugins), but likely affects all GitHub-sourced third-party marketplaces

View original on GitHub ↗

This issue has 8 comments on GitHub. Read the full discussion on GitHub ↗