[BUG] Versionless official plugins (skill-creator, frontend-design) re-trigger "Plugins updated · Run /reload-plugins" banner on every marketplace refresh

Status Open
Reported on v2.1.216
Maintainer reply None cached
Activity 2 comments · opened Jul 21, 2026

Environment

  • Claude Code version: 2.1.216 (native installer, macOS arm64, Darwin 25.5.0)
  • Plugins installed from the official marketplace (claude-plugins-official, GCS-synced): figma, skill-creator, frontend-design

Bug

The status banner

Plugins updated: skill-creator and frontend-design · Run /reload-plugins to apply

reappears constantly (on virtually every session where the background marketplace refresh runs), even though nothing about these plugins has actually changed. Running /reload-plugins, restarting, or fully uninstalling/reinstalling the plugins does not stop it.

Root cause

skill-creator and frontend-design are shipped in the official marketplace without a version field in .claude-plugin/plugin.json, and marketplace.json declares no version for them either. As a result they are recorded in installed_plugins.json with:

"version": "unknown",
"installPath": ".../claude-plugins-official/skill-creator/unknown"

In the plugin update op (updatePluginOp / the function reporting plugin_update_op telemetry), the up-to-date short-circuit is explicitly skipped when the resolved version is "unknown":

let B = L === "unknown";
if (!B && (_.version === L || _.installPath === j || _.installPath === G)) {
  return { outcome: "up_to_date", ... };
}
j = await tDt(P, i, L, d, W, { forceOverwrite: B });  // force reinstall
// → outcome: "updated"  ("Plugin refreshed from source ...")

So every time the marketplace autoupdater runs (OrfSxa), any versionless plugin is force-reinstalled and reported as outcome: "updated", which feeds the plugin-autoupdate-restart notification ("Plugins updated: … · Run /reload-plugins to apply"). Since the official marketplace refreshes near-daily, the banner is effectively permanent for these two plugins. The telemetry even tracks this case (version_unknown: r.newVersion === "unknown").

Notably this happens even for plugins the user has disabled (frontend-design@claude-plugins-official: false in enabledPlugins) — they still get autoupdated and still trigger the banner.

Steps to reproduce

  1. Install skill-creator and/or frontend-design from claude-plugins-official.
  2. Observe installed_plugins.json records "version": "unknown" for them.
  3. Wait for (or trigger) the background marketplace refresh.
  4. The "Plugins updated: … · Run /reload-plugins to apply" banner appears — every time, regardless of whether anything changed, and /reload-plugins never clears it for good.

Expected behavior

For versionless plugins, the updater should compare content (e.g. the marketplace's synced SHA, a content hash of the plugin directory, or mtime of the plugin subtree) instead of unconditionally force-reinstalling, and only report "updated" when the plugin files actually changed. Alternatively: ship version fields for all official plugins.

Workaround

Disable marketplace autoupdate in ~/.claude/settings.json:

"extraKnownMarketplaces": {
  "claude-plugins-official": {
    "source": { "source": "github", "repo": "anthropics/claude-plugins-official" },
    "autoUpdate": false
  }
}

This stops the banner, at the cost of no auto-updates for any plugin from the official marketplace (e.g. figma).

🤖 Generated with Claude Code

View original on GitHub ↗

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