autoUpdate in extraKnownMarketplaces logs a successful sync but never persists to known_marketplaces.json
Summary
The documented per-marketplace autoUpdate opt-out is read from user settings and Claude Code logs a successful sync for each marketplace, but the value is never present in ~/.claude/plugins/known_marketplaces.json — not immediately after the sync, and not at any later point. The sync also does not re-fire on subsequent restarts, so the value is never restored.
Environment
- Claude Code 2.1.220 (VS Code extension
anthropic.claude-code), Linux (Ubuntu) - Three GitHub-backed marketplaces declared in
~/.claude/settings.json, plusclaude-plugins-official
Steps to reproduce
- Declare marketplaces under
extraKnownMarketplaceswith"autoUpdate": false. - Restart Claude Code.
- Inspect
~/.claude/plugins/known_marketplaces.json.
Observed
The sync logs success for all three marketplaces:
16:28:36.102 [DEBUG] Synced autoUpdate=false from settings for marketplace: dotnet-agent-skills
16:28:36.102 [DEBUG] Synced autoUpdate=false from settings for marketplace: caveman
16:28:36.102 [DEBUG] Synced autoUpdate=false from settings for marketplace: chillicream-agent-skills
The registry file was written in that same second (mtime 16:28:36), and inspected ~60 s later already lacked the field. The key is absent from every entry; the per-entry schema is exactly:
installLocation, lastUpdated, source
Across ten window sessions on this machine, those three lines at 16:28:36 are the only genuine sync events. Subsequent restarts (17:11, 18:58) produced none, despite the registry value still differing from settings — so the value is not re-synced after being lost.
Expected
autoUpdate persists in the registry, and re-syncs when it differs from settings.
Additional notes
- Headless invocations (
claude -p) do not reconcile marketplaces at all — no marketplace, reconcile, or refresh activity appears in 337 debug lines. Attempting to reproduce headlessly will not trigger the sync. claude-plugins-officialcannot be given this setting regardless, as it is not declared inextraKnownMarketplaces.
Impact
autoUpdate: false is the only user-facing control over when marketplace plugins — which ship hooks, MCP server definitions, and bin/ executables — advance to new commits. While it does not persist, there is no working opt-out. Related: #73914.
---
_Drafted by Claude (Anthropic AI assistant)._
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗