plugin update doesn't fetch latest from marketplace remote before checking versions

Resolved 💬 3 comments Opened Feb 12, 2026 by raphaelsamy-quantumlends Closed Feb 16, 2026

Bug Description

claude plugin update does not git pull the marketplace clone before checking for available updates. It compares the installed version against the stale local clone at ~/.claude/plugins/marketplaces/<marketplace>/, which can be outdated if a new version was released after the last install/update.

This causes claude plugin update to incorrectly report "already at the latest version" even when a newer version exists on the remote.

Steps to Reproduce

  1. Install a plugin from a GitHub-based marketplace:

``
/plugin marketplace add org/repo
/plugin install my-plugin@my-marketplace
``
This clones the marketplace repo locally and installs at the current version (e.g., 1.5.0).

  1. A new version (e.g., 1.6.0) is released on the remote repo after installation.
  1. Run:

``
claude plugin update my-plugin@my-marketplace
``

  1. Expected: Claude Code fetches latest from remote, detects 1.6.0, and updates.
  2. Actual: Reports "already at the latest version (1.5.0)" because it reads from the stale local clone.

Root Cause

The local marketplace clone at ~/.claude/plugins/marketplaces/<marketplace>/ is not refreshed (git fetch/git pull) before the update check. The version comparison is done against the local clone's plugin.json, not the remote.

Workaround

Manually pull the marketplace clone before updating:

cd ~/.claude/plugins/marketplaces/<marketplace-name> && git pull origin main
claude plugin update my-plugin@my-marketplace

Environment

  • Claude Code CLI (latest as of 2026-02-12)
  • macOS (Darwin 24.6.0)
  • Plugin installed from a GitHub-based marketplace (source.source: "github")

Additional Context

Interestingly, a SessionStart hook that checks gh api repos/<org>/<repo>/releases/latest correctly detects the newer version — because it queries the GitHub API directly rather than reading the local clone. This confirms the remote has the correct version; the local clone is simply stale.

View original on GitHub ↗

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