Plugin update reports 'already at latest version' when marketplace clone is stale
Description
When running /plugin to update a plugin installed from a custom marketplace (non-official), the updater reports "already at the latest version" even when the remote repository has newer commits. The local marketplace clone at ~/.claude/plugins/marketplaces/<marketplace-name>/ is not being fetched before the version comparison.
Steps to reproduce
- Install a plugin from a custom marketplace:
claude plugin install look-before-you-leap@claude-code-setup - Make changes to the plugin source repo and push to the remote
- Run
/pluginin Claude Code - See:
look-before-you-leap is already at the latest version (0ad0f748a50d).
Root cause
The marketplace clone at ~/.claude/plugins/marketplaces/<name>/ retains a stale HEAD. The plugin updater compares the installed version against this stale local clone rather than fetching from the remote first. The lastUpdated timestamp in known_marketplaces.json advances, but the clone's branch doesn't move forward.
Verified by manually inspecting:
# Marketplace clone — stale
~/.claude/plugins/marketplaces/claude-code-setup/ → HEAD at 0ad0f74
# Actual remote (same repo) — 4 commits ahead
origin/main → HEAD at 5d5f046
After manually running git fetch origin && git reset --hard origin/main inside the marketplace clone, /plugin correctly detected the new version.
Expected behavior
/plugin should git fetch the marketplace clone before comparing versions, so that newly pushed commits are detected.
Workaround
cd ~/.claude/plugins/marketplaces/<marketplace-name> && git fetch origin && git reset --hard origin/main
Then run /plugin to update.
Environment
- Claude Code (VS Code extension)
- macOS
- Plugin installed from custom GitHub-backed marketplace
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗