Cowork: personal marketplace plugin removed by RemotePluginManager sync on every cycle

Resolved 💬 7 comments Opened Mar 29, 2026 by andromeda-from-activ-8 Closed May 18, 2026

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?

A plugin installed from a personal Git-based marketplace (registered via extraKnownMarketplaces in ~/.claude/settings.json) is repeatedly removed by RemotePluginManager during its sync cycle. The plugin installs successfully via the Cowork GUI, but within seconds RemotePluginManager marks it as NOT_AVAILABLE and removes it.

The plugin works fine via Claude Code CLI (LocalPluginsReader handles it correctly). The issue is specific to the Cowork/desktop plugin flow.

Root cause: RemotePluginManager fetches 18 browsable plugins from the remote API (fetchBrowsableRemotePlugins). Any installed plugin not in that list is treated as NOT_AVAILABLE and removed. Personal marketplace plugins are never in the remote browsable list, so they're always removed.

extraKnownMarketplaces is not propagated to Cowork. The CLI side reads this from ~/.claude/settings.json and handles it correctly. The Cowork side's cowork_settings.json has the plugin in enabledPlugins but missing the extraKnownMarketplaces entry, so RemotePluginManager doesn't know the marketplace exists.

What Should Happen?

Personal marketplace plugins registered via extraKnownMarketplaces should persist in Cowork sessions. Either:

  • extraKnownMarketplaces from ~/.claude/settings.json should be propagated to Cowork's plugin resolution
  • RemotePluginManager should not remove plugins that belong to known (non-official) marketplaces
  • The NOT_AVAILABLE cleanup should only apply to plugins from the official remote catalog

Error Messages/Logs

From ~/Library/Logs/Claude/main.log:

12:41:23 [info] [PluginsFetcher] fetchAutoInstalledPlugins: 0 plugins
12:41:23 [info] [RemotePluginManager] Delta: 0 to download, 0 to remove
12:41:24 [info] [PluginsFetcher] fetchBrowsableRemotePlugins: 18 plugins (offset=0, hasMore=false)
12:41:25 [info] [RemotePluginManager] Removed 1 user-installed plugins set to NOT_AVAILABLE
12:41:25 [info] [RemotePluginManager] Sync complete: 0 downloaded, 0 removed, 0 orphans cleaned
12:41:26 [info] [LocalPluginsReader] Found 1 local plugins
12:41:27 [info] [NativeMarketplaceReader] Found 2 marketplace(s)

The cycle repeats every time:

  1. User installs plugin via GUI → Installed plugin: wafery-base-pack
  2. Sync runs → fetchBrowsableRemotePlugins: 18 plugins (personal marketplace not included)
  3. Removed 1 user-installed plugins set to NOT_AVAILABLE
  4. New Cowork sessions don't get the plugin

Meanwhile LocalPluginsReader always reports: Found 1 enabled local plugins (1 installed) — the CLI side works fine.

Steps to Reproduce

  1. Register a personal marketplace in ~/.claude/settings.json:

``json
{
"extraKnownMarketplaces": {
"my-marketplace": {
"source": { "source": "github", "repo": "user/my-plugins" }
}
}
}
``

  1. Install the plugin via Claude Code CLI: claude plugin install my-plugin@my-marketplace — works fine
  2. Open Claude Desktop → Customize → the marketplace and plugin are visible
  3. Click Install for Cowork — install succeeds
  4. Wait ~30 seconds for RemotePluginManager sync to run
  5. Plugin is removed (Cowork view shows "Install" button again instead of "Manage")
  6. Start a Cowork session — plugin skills and MCP tools are not available

Additional Context

Two separate plugin systems are involved:

  • LocalPluginsReader — reads from ~/.claude/plugins/, respects extraKnownMarketplaces. Works correctly.
  • RemotePluginManager — syncs with remote API, does NOT respect extraKnownMarketplaces. Removes personal marketplace plugins.

cowork_settings.json at ~/Library/Application Support/Claude/local-agent-mode-sessions/{session}/ has enabledPlugins with the plugin listed, but no extraKnownMarketplaces, so the Cowork side can't resolve the marketplace.

This was working previously — the regression likely started when RemotePluginManager added the NOT_AVAILABLE cleanup logic for plugins not in the browsable list.

Claude Code Version

2.1.87

Platform

macOS

Operating System

macOS 15.3.2 (Darwin 25.3.0)

View original on GitHub ↗

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