Plugin autoupdate fails for GCS-delivered marketplaces: 'not a git repository', and the suggested fix cannot work
What happens
claude-plugins-official is delivered as a tarball from Google Cloud Storage, not as a git clone. The downloaded directory contains a .gcs-sha marker file and no .git:
$ ls -A ~/.claude/plugins/marketplaces/claude-plugins-official
.claude-plugin/ .gcs-sha .gitignore LICENSE README.md external_plugins/ plugins/
$ cat ~/.claude/plugins/marketplaces/claude-plugins-official/.gcs-sha
3411fb9108778ca0e950db59c6511d2f7020cbc8
$ ls -d ~/.claude/plugins/marketplaces/claude-plugins-official/.git
ls: No such file or directory
Plugin autoupdate still refreshes marketplaces over git, so it fails on every session start:
[ERROR] Failed to refresh marketplace claude-plugins-official: Cache directory exists at
/Users/<user>/.claude/plugins/marketplaces/claude-plugins-official but is not a git repository.
Please remove it manually and try again.
Every plugin sourced from that marketplace then fails to update:
[WARN] Plugin autoupdate: failed to update vercel@claude-plugins-official: Plugin "vercel" not found
[WARN] Plugin autoupdate: failed to update superpowers@claude-plugins-official: Plugin "superpowers" not found
[WARN] Plugin autoupdate: failed to update frontend-design@claude-plugins-official: Plugin "frontend-design" not found
The plugins themselves load and work. Only autoupdate is broken, so installed versions silently go stale.
The suggested remedy does not work
The error says "remove it manually and try again". Removing the directory causes it to be re-downloaded from GCS into exactly the same non-git state, and the error returns. There is no user action that resolves it.
I removed mine and confirmed the redownload: same 6.4MB, same 286 plugins in .claude-plugin/marketplace.json, same .gcs-sha, still no .git.
Steps to reproduce
- Install any plugin from
claude-plugins-official. rm -r ~/.claude/plugins/marketplaces/claude-plugins-official- Start a session so the marketplace is re-downloaded.
- Run with
--debugand start another session. - Observe the refresh error and the per plugin "not found" warnings.
Expected
Autoupdate detects a GCS delivered marketplace via the .gcs-sha marker and refreshes it by comparing that sha against the current upstream sha, rather than attempting a git fetch.
Actual
Autoupdate assumes a git working tree, fails, and reports an unactionable remedy.
Environment
- Claude Code 2.1.234
- macOS, Darwin 25.5.0, arm64
- Affected marketplace:
claude-plugins-official(source recorded inknown_marketplaces.jsonas{"source": "github", "repo": "anthropics/claude-plugins-official"}) - Git backed marketplaces on the same install refresh without error, which is consistent with the GCS path being the trigger.
Oldest occurrence in my retained debug logs is 2026-08-13, present in every session since.