[BUG] Versionless official plugins (skill-creator, frontend-design) re-trigger "Plugins updated · Run /reload-plugins" banner on every marketplace refresh
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 (Orf → Sxa), 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
- Install
skill-creatorand/orfrontend-designfromclaude-plugins-official. - Observe
installed_plugins.jsonrecords"version": "unknown"for them. - Wait for (or trigger) the background marketplace refresh.
- The "Plugins updated: … · Run /reload-plugins to apply" banner appears — every time, regardless of whether anything changed, and
/reload-pluginsnever 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
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗