[BUG] M`/plugin marketplace update` + `/reload-plugins` does not pick up pushed plugin changes
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?
/plugin marketplace update <marketplace> reports success ("Updated 1 marketplace"), even if an installed plugin is not updated. That is, subsequent /reload-plugins keep loading the old version. The only way I found to pick up pushed changes is a full reinstall (uninstall -> marketplace update -> install -> reload). Maybe this is intended behavior but it was confusing.. I had anticipated that the update would also update my package.
What Should Happen?
After /plugin marketplace update, a /reload-plugins should load the updated plugin. I.e., the refresh should propagate to the installed plugin. (Or, if a reinstall is required by design, could /plugin marketplace update report a less definitive "success"?)
Error Messages/Logs
Steps to Reproduce
- Add a GitHub-backed marketplace: /plugin marketplace add <owner>/<repo>
- Install and load it: /plugin install <plugin>@<marketplace>, then /reload-plugins
- Push a change to the plugin in its GitHub repo (edit a command/file, commit, push)
- Run /plugin marketplace update <marketplace> - it prints "Updated 1 marketplace"
- Run /reload-plugins
- Observe: the plugin still runs the old version - the pushed change is absent
- Run /plugin uninstall <plugin>@<marketplace> -> /plugin marketplace update <marketplace> -> /plugin install <plugin>@<marketplace> -> /reload-plugins - only now does the change appear
(Observed with the marketplace and plugin both named repo-review, from
github.com/natemacfadden/repo-review.)
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.195 (Claude Code)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_
5 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
Those look different to me. Maybe the difference is just surface level - apologies if so
Hi
Hitting the same core issue on a different surface — VS Code extension (Windows), git-backed marketplace (Azure DevOps, not GitHub, so it's provider-agnostic) — with one extra data point that narrows down where the break actually is.
Setup: plugin vendavo-vpp@vpp-marketplace, installed at 0.2.1. Pushed a commit to the marketplace's tracked branch that bumps the plugin's plugin.json version to 0.2.2 (so, unlike some other reports, the version string did change).
Repro (mirrors this issue, via the VS Code GUI instead of slash commands):
Manage Plugins → Marketplaces tab → click the refresh icon for the marketplace.
~/.claude/plugins/marketplaces/<marketplace>/ — git checkout is at the new commit. Marketplace-level refresh worked.
~/.claude/plugins/cache/<marketplace>/<plugin>/ — a new 0.2.2/ directory is freshly cached alongside the old 0.2.1/. The new version was fetched.
~/.claude/plugins/installed_plugins.json — still pinned to 0.2.1 / the old gitCommitSha, unchanged, even after a second marketplace refresh, a full "Developer: Reload Window," and updating the Claude Code CLI itself (2.0.58 → 2.1.212).
So exactly this issue's symptom: marketplace update "succeeds," but nothing re-points the installed plugin at the newer, already-cached version, and there's no UI signal that an update exists.
New data point: running the standalone command directly —
claude plugin update vendavo-vpp@vpp-marketplace
— worked correctly on the first try:
Checking for updates for plugin "vendavo-vpp@vpp-marketplace" at user scope…
✔ Plugin "vendavo-vpp" updated from 0.2.1 to 0.2.2 for scope user. Restart to apply changes.
installed_plugins.json immediately reflected version: "0.2.2", the new installPath, and the correct gitCommitSha.
So a full uninstall/reinstall cycle wasn't actually necessary on this end — claude plugin update <plugin>@<marketplace> alone did the correct version check and cache promotion, restart-to-apply included. That suggests the break is specifically in the /reload-plugins path (and whatever the VS Code GUI's marketplace-refresh icon calls internally) not invalidating/re-resolving installed plugins — while the dedicated plugin update subcommand's logic is fine. Might be a smaller, more precise fix than a full reinstall-cycle implies: make /reload-plugins (and the GUI refresh action) actually invoke the same update-check claude plugin update already does correctly, instead of only refreshing the marketplace clone.
(Also possibly related, though on a different surface with no CLI escape hatch: #73907, Cowork/Desktop app — same "marketplace refresh succeeds, installed plugin never updates" symptom.)
Confirming this on CLI 2.1.220 (current latest), Windows 11, git-sourced marketplace over HTTPS — and it reproduces on the plain
claude plugin …CLI surface, not just the/pluginslash commands, so it isn't specific to the interactive UI or to/reload-plugins.To answer the "maybe this is intended behavior" question in the original post: the behaviour is consistent with the cache being keyed on the version string.
claude plugin updateappears to compare versions only, so any content change published without a bump to.claude-plugin/plugin.jsonis a no-op — which is exactly why the full reinstall is the only thing that works.Minimal repro with the marketplace clone already fully current (
git rev-list --count HEAD..origin/master= 0):"already at the latest version"is the diagnostic: the version matched, so nothing was re-extracted, and the reported success is technically true about the version while being false about the content.Forced re-extract is the only fix, matching your uninstall → install → reload sequence:
Two things worth adding for whoever picks this up:
autoUpdatefrom the marketplace'sextraKnownMarketplacesentry insettings.json. Verified by diffing before/after. So repeatedly applying the workaround progressively disables auto-updating.claude plugin marketplace updateandclaude plugin updatereport success on a complete no-op. The only trustworthy check is on the filesystem — compare the extracted cache directory against the marketplace clone directly, rather than trusting exit codes or the version fields ininstalled_plugins.json.Closely related: #17361, where I've posted the fuller breakdown separating this from the distinct
autoUpdate-never-pulls failure.Adding a data point that may narrow this down.
On 2026-07-31 I hit this in a form the reinstall workaround did not fix. The marketplace clone was fast-forwarded,
/plugincreated a NEW cache dir (.../rpg-core/4c2dc00b0da7/), andinstalled_plugins.jsonwas updated to point at it./reload-pluginswas then run TWICE. The live hooks still executed the OLD cache copy (.../rpg-core/7eb3545a89f2/).So the pointer was correct and the new files were on disk — the running session just never rebound to them.
What settled it, since "is the new code running?" is otherwise hard to see: the updated file opens a
.locksidecar on every slow-path write. The log it guards sat at exactly its 5000-line cap, so every single write had to take that path. Writes landed after both reloads. No.lockfile ever appeared. Old code.A fresh session picked up the new cache dir immediately, with no further commands.
If that matches your reading, the title may be slightly narrower than the bug: it is not only that
marketplace updatefails to propagate, but that a running session does not rebind to a new plugin cache directory even when the install succeeded and the pointer is right.Environment: macOS, plugin installed from a GitHub-backed marketplace.