[BUG] Desktop "Add marketplace" GUI fails with generic "Failed to add marketplace" (MARKETPLACE_ERROR:UNKNOWN) — git clone stalls in non-interactive SSH, killed at ~60s timeout
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?
Adding a plugin marketplace from a PUBLIC GitHub repo via the Desktop settings GUI (Settings → Plugins → Add ▾ → Add marketplace → Add from a repository → Sync) fails with a bare "Failed to add marketplace" and no reason shown. The identical operation from a terminal (claude plugin marketplace add <owner/repo>) succeeds in seconds.
Timing is the key clue: two attempts each failed EXACTLY ~60.0s after the "Adding marketplace" log line — a hard timeout, not a variable network failure.
Root cause: the GUI shells out to the bundled claude CLI to git clone the marketplace repo and kills it after ~60s. Run manually, the same CLI logs Cloning via SSH: git@github.com:<owner>/<repo>.git — it prefers SSH for the owner/repo form (even though the GUI logs an https:// URL, and no url.*.insteadOf git rewrite is configured). In the Desktop's non-interactive spawned process there is no usable ssh-agent / known_hosts entry, so the SSH clone stalls on a host-key/credential prompt until the 60s kill. The client then parses only the CLI's spinner line ("Adding marketplace…"), fails to recognize it, and collapses everything to MARKETPLACE_ERROR:UNKNOWN → the generic UI error.
This is NOT a size/bandwidth issue: the example repo's packed .git is ~22 MB and a full HTTPS clone finishes in ~4s. The terminal CLI succeeds because SSH is fully set up there AND its clone timeout is 120s (the CLI logs timeout: 120s), vs the GUI's ~60s.
Two distinct defects:
- Error surfacing — a clone timeout/failure is shown as an unactionable "Failed to add marketplace" (MARKETPLACE_ERROR:UNKNOWN). The real cause never reaches the UI, and the parser mislabels the CLI progress line as "git clone error output".
- Clone strategy + timeout in the GUI path — the clone resolves to SSH for
owner/repoand hangs non-interactively, and uses a shorter (~60s) timeout than the CLI (120s).
Suggested fixes:
- Prefer HTTPS for public marketplace clones from the GUI (or pass the full https URL straight to git without SSH resolution), and/or run the clone with
-o BatchMode=yesso a missing SSH setup fails fast instead of hanging. - Surface the underlying git error / timeout instead of MARKETPLACE_ERROR:UNKNOWN.
- Align the GUI clone timeout with the CLI (120s).
What Should Happen?
The marketplace is added and its plugins become browsable — same result as running claude plugin marketplace add <owner/repo> from a terminal. If the clone genuinely fails, the UI should show the underlying git error (e.g. an SSH/host-key failure or a timeout) instead of a generic "Failed to add marketplace".
Error Messages/Logs
[info] [CCDMarketplacePluginManagerCLI] Adding marketplace: https://github.com/ITSalt/NaCl
value: 'MARKETPLACE_ERROR:UNKNOWN',
stack: 'Error: MARKETPLACE_ERROR:UNKNOWN
at async Object.addMarketplace (app://.../index.chunk-*.js)'
[warn] [CCDMarketplacePluginManagerCLI] Unrecognized git clone error output: Adding marketplace…
# Each attempt: "Adding marketplace" and the failure are exactly ~60.0s apart.
# For comparison, the same op via terminal CLI succeeds:
# Cloning via SSH: git@github.com:ITSalt/NaCl.git
# Cloning repository (timeout: 120s): git@github.com:ITSalt/NaCl.git
# Successfully added marketplace: nacl
Steps to Reproduce
- Open Claude Code Desktop → Settings → Plugins.
- Click Add ▾ → Add marketplace → Add from a repository.
- In the URL field enter a public repo that hosts a plugin marketplace, e.g.
ITSalt/NaCl(it has a valid.claude-plugin/marketplace.jsonon the default branch; the repo is public). - Click Sync.
- Observe: after ~60s the dialog shows "Failed to add marketplace" with no reason.
Contrast (works): in a terminal, run claude plugin marketplace add ITSalt/NaCl — it clones via SSH and succeeds within seconds.
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.210 (Claude Code)
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell
Additional Information
The failure is in the Desktop GUI marketplace-add flow, not the CLI — the bundled CLI (2.1.210) performs the same operation successfully from PowerShell.
Desktop app version: Claude 1.21459.0 (f7518f) 2026-07-14T05:32:17.000Z
The 2.1.210 above is the bundled Claude Code CLI version (claude --version); the Desktop app has its own version, added above.
Example marketplace repo (public, reproduces the issue): https://github.com/ITSalt/NaCl
Screenshots of the GUI flow and the failing "Failed to add marketplace" dialog are available on request.