What
A plugin marketplace is a catalog of plugins that Claude Code keeps as a local git copy (a clone) and refreshes from time to time. This release changes what happens when a refresh cannot reach the remote.
- The git marketplace refresh now returns
{ kind: "current" }when the clone is already up to date. It returns{ kind: "kept-stale" }when the remote is unreachable andCLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILUREkeeps the old clone. Both cases used to return nothing. - The marketplace load result now carries a
keptStaleCloneflag for the second case. The catalog-publish path always sets it to false. - When
keptStaleCloneis set,lastUpdatedis not moved to now, the post-load step is skipped, and the plugin list is not reloaded. For the official marketplace, onlyinstallLocationis updated, and only if that path changed. Re-adding such a marketplace keeps its previouslastUpdatedtime. - The event for a failed cloud fetch that falls back to git is now also recorded when the result was a stale clone. The refresh also records whether it was triggered in the background or by an update.
- Marketplace and plugin lookups take a new reason argument:
install,update,loadorother. - The plugin catalog cache reader gains an
allowStaleoption that skips the "Plugin catalog cache is stale (>24 h old)" rejection. Before, a stale cache was always rejected. - A reserved-name check has a new special case, and two placeholder functions that only return nothing in this build were added.
Why
The "last updated" time for a marketplace now reflects its last successful refresh, so it no longer looks up to date after a git refresh that actually failed. Plugins can also keep working from an older cached catalog when the network is unavailable.
Names in the bundleCLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE
One source agreesOne thing we can check says the same as this entry.
Anthropic's release notes agree
Fixed known_marketplaces.json recording a marketplace as refreshed when its remote could not be reached and…