Where does the bug appear (feature/product)?
Cursor IDE
Describe the Bug
When Cursor tries to install/refresh a plugin from a private GitHub team marketplace, it walks a three-stage clone fallback. In 3.2.11, all three stages are broken, so any user without a pre-existing local clone is silently locked out:
- Stage 1 – embedded SSH clone: fails for any user without
~/.ssh/id_ed25519. - Stage 2 – embedded HTTPS clone via staging directory: fails because Cursor’s embedded git library exposes no working auth (no Windows Credential Manager / Keychain backend, no Cursor-side GitHub OAuth, no
_netrc, no embedded URL credentials reading from anywhere usable). - Stage 3 – System
git fetchdirect install: hard-coded with-c credential.helper= -c credential.interactive=false -c core.askPass=, which actively disables every working auth mechanism on the user’s system, including any valid GCM token already in the Windows Credential Manager.
To make it worse, the plugin loader logs 2 plugins loaded, 1 failures and the IDE UI shows the plugin as “loaded” – users do not realize their plugin is non-functional until skills/commands silently disappear.
Severity: High – silently breaks plugin distribution for any private team marketplace; only worked for users who happened to have an old cached clone from a previous Cursor version.
Steps to Reproduce
- Have a private GitHub repository containing a Cursor plugin (
.cursor-plugin/plugin.jsonetc.). - Register it as a Team Marketplace in Cursor Dashboard.
- On a fresh user account (no SSH keys, no
_netrc, no embedded GitHub credentials in~/.gitconfig), install Cursor. - Sign into Cursor.
- Cursor attempts auto-install of the team plugin → fails silently.
To reproduce on a previously-working machine:
- Delete
~\.cursor\plugins\marketplaces\github.com\<org>\<repo>\<commit>\. - Delete
~\.cursor\plugins\cache\<marketplace>\<plugin>\<commit>\. Ctrl+Shift+P→Developer: Reload Window.- Observe failure in
~\AppData\Roaming\Cursor\logs\<timestamp>\window1\exthost\anysphere.cursor-agent-exec\Cursor Plugins.log.
Expected Behavior
Either:
- (a) Auto-install succeeds using credentials the user already has on the system (working GCM token in Windows Credential Manager, an
_netrcentry, an SSH key, or Cursor’s own Dashboard GitHub OAuth integration). - (b) A clear, actionable, user-facing error: “Cannot authenticate to – please run
git clone <url>once manually so credentials get cached, or follow .”
Operating System
Windows 10/11
Version Information
Version: 3.2.11 (Stable, Windows x64)
Commit: e9ee1339915a927dfb2df4a836dd9c8337e17cc0
Git for Windows: 2.53.0
GCM (Git Credential Manager): installed via system config (credential.helper=manager)
GitHub tenant: GitHub Enterprise Cloud with EMU
Additional Info:
SSO: GitHub auth delegated to Microsoft Entra ID / M365 (no separate GitHub password — login flow goes through M365)
Additional Information
undefined## Actual Behavior – Cursor Plugins log
[info] BackendMarketplaceClient: Adding enabled plugin: <plugin> from <commit> at plugins/<plugin>
[info] loadFromMarketplaceSource: Plugin missing from cache, installing: <plugin>
[info] MarketplaceCacheManager: Cloning into staging directory: .../marketplaces/_staging/<uuid>
[error] Falling back to HTTPS clone due to SSH clone failure
[error] Failed to clone marketplace repository via staging clone
[warn] Failed to install plugin <plugin> from marketplace cache, falling back to direct install
[error] Cursor plugin load error <plugin>@<commit>: Command failed:
git -c credential.helper= -c credential.interactive=false -c core.askPass= fetch --depth 1 origin <commit>
fatal: unable to get password from user
[info] Plugins reload completed: 2 plugins loaded (0 extension), 1 failures
Root Cause Analysis
Stage 1 – embedded SSH clone
Falling back to HTTPS clone due to SSH clone failure. The user has no ~/.ssh/id_ed25519. No public documentation states an SSH key is required for Team Marketplace. Many Windows users authenticate via GCM/HTTPS only.
Stage 2 – embedded HTTPS clone (libgit2 / nodegit) via staging directory
Failed to clone marketplace repository via staging clone. Cursor’s embedded git library appears to attempt no credential lookup whatsoever. It does not consult:
- Windows Credential Manager (no
wincredbackend exposed).cmdkey /listshowing a validgit:https://github.comentry is ignored. _netrc/.netrc(the embedded library skips this even though curl reads it natively in stage 3).- The Cursor IDE’s GitHub OAuth integration (Dashboard → Integrations → GitHub) – that token is only used for Cloud Agents / Bugbot.
- The VS Code
vscode.github-authenticationextension’s session store. ghCLI’s stored OAuth token.
Stage 3 – System git fetch direct install
git -c credential.helper= -c credential.interactive=false -c core.askPass= fetch --depth 1 origin <commit>
fatal: unable to get password from user. Three problems compounding:
-c credential.helper=– disables every credential helper (GCM, wincred, manager, store).-c credential.interactive=false– forbids interactive credential prompts (blocks the Browser-OAuth popup that worked in earlier Cursor versions).-c core.askPass=– disables askpass fallback.
Reproduced via PowerShell with GIT_TRACE=1 GIT_CURL_VERBOSE=1:
== Info: Could not find host github.com in the .netrc file; using defaults
=> Send header: GET /<org>/<repo>/info/refs?service=git-upload-pack HTTP/1.1
<= Recv header: HTTP/1.1 401 Unauthorized
<= Recv header: www-authenticate: Basic realm="GitHub" enterprise_hint="<tenant>" domain_hint="<short>"
fatal: unable to get password from user
GitHub returned a clean Basic auth challenge. Git could not produce a credential because Cursor disabled every channel.
Misleading Telemetry / UX
After all three stages fail:
loadFromMarketplaceSource completed in 3538.9ms (2 plugins loaded, 1 failures)
Plugins reload completed: 2 plugins loaded (0 extension), 1 failures
The plugin is reported as one of “2 plugins loaded” with 1 failures buried in metadata. The IDE UI shows the plugin as “loaded” (with skills/commands gone). Users only realize the plugin is broken when commands silently disappear.
Why this hits a lot of users
In earlier Cursor versions, an interactive Browser-OAuth popup appeared on first plugin install, captured a token, and stored it via GCM. Once stages 1 and 2 were added in 2.6/3.x and stage 3 was hard-coded to ignore helpers, every fresh user is locked out – but anyone who installed Cursor before this change still has a cached clone, so they don’t notice.
Related forum threads:
Workaround that works today
The only auth mechanism that survives all three stages is _netrc, because curl (used internally by Git’s HTTPS transport in stage 3) reads it natively, before any credential helper runs. None of Cursor’s -c flags affect it.
Per-user OAuth (recommended for SSO-managed orgs)
winget install GitHub.cli
gh auth login --hostname github.com --git-protocol https --web
$token = gh auth token
@"
machine github.com
login x-access-token
password $token
"@ | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII -Force
The browser flow uses the user’s existing SSO session, so it’s a single-click confirmation. Resulting token is user-specific (good for audit/revocation), short-lived, refreshable via gh auth refresh.
Centralized bot PAT (no user interaction)
@"
machine github.com
login x-access-token
password <BOT_PAT>
"@ | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII -Force
Fine-grained, scoped to read-only on the marketplace repo only. Distribute via Intune/MDM. Token rotation done centrally.
Verified working
PS> git -c credential.helper= -c credential.interactive=false -c core.askPass= fetch --depth 1 origin <commit>
* branch <commit> -> FETCH_HEAD
PS> $LASTEXITCODE
0
After the _netrc was in place, Cursor’s auto-install completed successfully on Developer: Reload Window.
Suggested Fix (in priority order)
- Stage 2 (embedded HTTPS) should consult OS credential storage. On Windows query Windows Credential Manager for
git:https://<host>. On macOS query Keychain. On Linux honor libsecret. Restores the “ifgit cloneworks in your terminal, plugin install also works” UX. - Pipe the IDE’s GitHub OAuth integration to the plugin loader. That token is already there for Cloud Agents/Bugbot – surface it to stage 1/2 for matching repos.
- Stop hard-coding
-c credential.helper= -c credential.interactive=false -c core.askPass=in stage 3. Either drop these flags entirely or expose a setting. To prevent hung sessions, useGIT_TERMINAL_PROMPT=0plus a process timeout instead. - Restore (or document the disappearance of) the interactive Browser-OAuth popup that earlier Cursor versions showed on first private plugin install.
- Surface plugin load failures in the IDE UI. A toast notification with a link to the log + a “Retry” button would solve most user confusion.
- Update the Cursor Plugins documentation page (
cursor.com/docs/plugins) to state explicitly which auth mechanisms are supported for private team marketplaces.
Reproduction artifacts I can share
- Full
Cursor Plugins.logexcerpts GIT_TRACE=1+GIT_CURL_VERBOSE=1output of stage 3- PowerShell trace showing no
git.exeis invoked during stage 1/2 - Filesystem snapshots of
~\.cursor\plugins\marketplaces\_staging\
Happy to provide any of these on request.
Does this stop you from using Cursor
No - Cursor works, but with this issue