#1943·skills

Plugins from this marketplace fail to load ("conflicting manifests") after every Claude Desktop marketplace refresh

Author: BluFinSolutionsCreated Oct 1, 2026Updated Oct 1, 2026

Summary

On a machine where Claude Desktop refreshes this marketplace, academy-guide, claude-api and discernment-nudge stop loading in Claude Code after each refresh. The Desktop writes a .claude-plugin/plugin.json into each plugin's cache folder and copies the entry's skills array into it. The entries in .claude-plugin/marketplace.json are strict: false and declare skills, so Claude Code rejects each plugin as having conflicting manifests, which is its documented behavior. document-skills and example-skills have the same entry shape. They were not installed on this machine, so they were not observed.

Environment

  • Claude Desktop 2.16120.0 on Windows 11 (MSIX); bundled Claude Code 2.1.284
  • Claude Code CLI 2.1.286 (the debug log below was captured with 2.1.280)
  • Plugins installed at commit 8a1541c4a3ff of this repo (before that: 41bbe19d1a1a, 34040c9c5685, 33375500bcea)

What happens

Desktop log (%LOCALAPPDATA%\Claude\logs\main.log), on every refresh that includes this marketplace (unrelated lines omitted):

[CCDMarketplacePluginManagerCLI] Refreshing marketplace: anthropic-agent-skills
[marketplaceFileOps] Synthesized plugin.json for academy-guide (strict:false marketplace plugin)
[marketplaceFileOps] Synthesized plugin.json for claude-api (strict:false marketplace plugin)
[marketplaceFileOps] Synthesized plugin.json for discernment-nudge (strict:false marketplace plugin)
[CCDMarketplacePluginManagerCLI] Marketplace refreshed: anthropic-agent-skills

The written file has name, description and skills (for example "skills": ["./skills/academy-guide"]). The file's mtime matches the log line to the second. Claude Code then logs:

Plugin academy-guide has conflicting manifests: both plugin.json and marketplace entry specify components. Set strict: true in marketplace entry or remove component specs from one location.
Plugin not available for MCP: academy-guide@anthropic-agent-skills - error type: generic-error

The same two lines appear for claude-api and discernment-nudge. The plugins stay enabled in settings but contribute nothing. After the refresh, academy-guide:academy-guide, claude-api:claude-api and discernment-nudge:discernment-nudge are missing from the skill listing of new sessions. claude plugin update from the CLI restores them, because it produces a new cache folder without plugin.json, but only until the next Desktop refresh.

How often

Six Desktop refreshes included this marketplace between 2026-09-12 and 2026-10-01, and every one of them synthesized all three manifests. Refreshes that did not include this marketplace left the files alone. Two app restarts on 2026-10-01 did not trigger one. Another report (anthropics/claude-code#90114) says that just opening the plugins panel does.

Why (from reading the Desktop 2.16120.0 bundle)

  • On a marketplace refresh, ensureManifestsForMarketplace calls ensurePluginManifestExists(pluginId, …, true) for every installed plugin of that marketplace. With overwrite: true the manifest is written even if one already exists. The only skip is when the plugin's source directory in the marketplace clone ships a real .claude-plugin/plugin.json.
  • On install and update the same function runs with overwrite: false, and writes only if the file is missing.
  • The writer copies name, displayName, description, version, author, commands, skills, agents, hooks and mcpServers from the entry. This path has no check on strict; the "strict:false" text is only part of the log message.

The documented rule it collides with

From https://code.claude.com/docs/en/plugins-reference, "How entry fields combine with plugin.json": "plugin.json present, strict: false: an entry that declares any of commands, agents, skills, hooks, outputStyles, or themes is a conflict, and the plugin fails to load with Plugin <name> has conflicting manifests."

Related

  • anthropics/claude-code#78604 (open): the same synthesis on Desktop 2.16120.0, which there drops lspServers from LSP plugins. The fix suggested there is to skip synthesizing a plugin.json for strict: false entries.
  • anthropics/claude-code#90114: a refresh triggered by opening the plugins panel overwrote a hand-edited plugin.json.
  • #189, #551 and #929: the shared source: "./" layout of this marketplace (duplicate skills).

Possible fixes

  • Desktop (product): don't synthesize a plugin.json for entries that are strict: false and declare components, or don't copy the component fields. This belongs to anthropics/claude-code#78604.
  • This catalog, in the meantime: give each plugin its own source directory with its own .claude-plugin/plugin.json, the layout #1645 uses for claude-academy. Per the code above, the Desktop then skips the synthesis on refresh. This would also address #189. Not tested.
  • strict: true alone, as the CLI message suggests, is probably not enough with the current Desktop. The synthesis does not check strict. With a plugin.json present, a manifest skills key adds to the default skills/ directory (same docs page), so with source: "./" every skill in the repo would load. This is inferred from the code and the docs, not tested.