Where does the bug appear (feature/product)?
Cursor SDK
Describe the Bug
Team marketplace index stops advancing for hours; update reports success with no change
Environment
- Cursor Agent CLI
2026.09.18-9a7762b, macOS (headless Mac mini running a worker via launchd) - Team marketplace imported from a private GitHub repo URL (
https://github.com/<org>/<repo>) - Cursor GitHub App installed org-wide (verified via GitHub API:
app_slug: cursor,repository_selection: all) Enable Auto Refresh: ONServe Marketplace From Cursor: OFF- A background worker runs
agent plugin marketplace update <target>every 30 minutes
Summary
The marketplace index stays pinned to an old commit for hours. agent plugin marketplace update
returns success the whole time, so nothing in the logs indicates a problem. Merging to main,
pressing Refresh in the dashboard, and restarting the client all failed to advance it.
The client side appears to work correctly: whenever the index does advance, the same
update call rebuilds ~/.cursor/plugins/cache/ to the new commit without further action.
The stall looks server-side.
Timeline (2026-09-23 JST)
1. Index pinned for ~half a day.
Index stuck on commit b2d2150 (authored 04:38) while main moved several commits ahead.
Every 30 minutes the worker logged:
✓ Updated marketplace <name>: 6 plugins indexed
while ~/.cursor/plugins/marketplaces/github.com/<org>/<repo>/ still contained only b2d2150.
Skills edited that morning never reached any agent run.
2. add created a duplicate registration instead of updating.
agent plugin marketplace add --git-ref main https://github.com/<org>/<repo>
✓ Added marketplace <repo> (6 plugins)
This created a second, user-scoped registration next to the existing team-scoped one.
Every subsequent update <url> then failed:
Error: Multiple marketplaces match "https://github.com/<org>/<repo>"
(scopes: user, team). Manage it from the dashboard instead.
remove only accepts user-scoped marketplaces, so recovery meant deleting the one we had
just created. There appears to be no CLI path to change a team-scoped registration’s
git ref. Is duplicate creation the intended behaviour of add on an already-registered URL?
3. Interactive /plugins did sync.
Opening agent and entering /plugins showed Skills: 4 while the local cache still had 3,
and the cache was rebuilt right after. So the backend knew about the newer commit before the
local cache did.
4. Manual Refresh had no effect for over an hour.
| time | event |
|---|---|
| 21:38 | merged a new commit 02853a9 to main |
| 21:40 | pressed Refresh (Plugin Repository) in marketplace settings |
| 22:06 | worker cycle → index still d9dbf44, no change |
| 22:35 | opened/focused Cursor on the machine |
| 22:36 | worker cycle → 0 plugins indexed |
| 22:43 | index still d9dbf44 (65 min after the merge) |
5. 0 plugins indexed.
One cycle returned 0 instead of the usual 6:
✓ Updated marketplace <name>: 0 plugins indexed
It still reported success, and the local cache was left intact. I could not find this
symptom reported elsewhere on the forum.
Expected vs actual
Expected: after a push/merge to main, Auto Refresh (or a manual Refresh, or
agent plugin marketplace update) makes the new commit available within minutes.
Actual: the index stays on an old commit for hours. Every command reports success.
What made this diagnosable
The failure is invisible from the CLI output alone, because update always reports success.
What exposed it was comparing two directories:
~/.cursor/plugins/marketplaces/github.com/<org>/<repo>/<sha>/— downloaded commit~/.cursor/plugins/cache/<marketplace>/<plugin>/<sha>/— what agents actually read
We now log both on every refresh. It would help a lot if agent plugin marketplace update
printed the indexed commit itself, and if list exposed each marketplace’s current ref.
Questions
- Is
0 plugins indexeda known failure mode? What does it indicate? - Is
addon an already-registered URL expected to create a duplicate rather than update it?
Can a team-scoped registration’s git ref be changed from the CLI at all? - Is there any non-interactive way to force a re-index or reinstall? The only reliable
recovery we found was opening/pluginsinteractively, which does not fit an unattended
worker.
Happy to provide full logs privately if that helps.
Steps to Reproduce
Steps to reproduce
Two separate issues. A is deterministic. B requires observation over time.
Note: the plugin marketplace subcommands need a key_-form API key in CURSOR_API_KEY.
An agent-execution key (crsr_) is rejected with “Not logged in”.
A. add creates a duplicate registration instead of updating, which then breaks update
-
Register a team-scoped marketplace from a GitHub URL (Settings → Marketplaces).
-
Confirm it is the only registration:
agent plugin marketplace list <name> team https://github.com/<org>/<repo> -
Try to change its ref from the CLI:
agent plugin marketplace add --git-ref main https://github.com/<org>/<repo> ✓ Added marketplace <repo> (6 plugins) -
List again — there are now two registrations for the same URL:
agent plugin marketplace list <name> team https://github.com/<org>/<repo> <repo> user https://github.com/<org>/<repo> -
Every URL-addressed update now fails:
agent plugin marketplace update https://github.com/<org>/<repo> Error: Multiple marketplaces match "https://github.com/<org>/<repo>" (scopes: user, team). Manage it from the dashboard instead. -
Recovery is only partial:
agent plugin marketplace remove <user-scoped name> # works agent plugin marketplace remove <team-scoped name> # not possibleremoveonly accepts user-scoped marketplaces, so a team-scoped registration’s git ref
still cannot be changed from the CLI at all.
Expected: add on an already-registered URL updates that registration, or fails with a
clear “already registered” error — not a silent duplicate that breaks subsequent commands.
B. Index does not advance after a push, while update keeps reporting success
-
Record the currently indexed commit:
ls ~/.cursor/plugins/marketplaces/github.com/<org>/<repo>/ b2d2150... -
Merge any commit to
mainof the marketplace repo. -
Press Refresh under Settings → Marketplaces → Plugin Repository.
-
Run the update (by name, to avoid issue A):
agent plugin marketplace update <name> ✓ Updated marketplace <name>: 6 plugins indexedThis reports success every time.
-
Re-check the directory from step 1. It is unchanged. In our case it stayed on the same
commit for over an hour after the merge and the manual Refresh, across repeated cycles and
client restarts. Earlier the same day it stayed pinned for roughly half a day. -
Occasionally a cycle returns
0instead of the plugin count, still reported as success:✓ Updated marketplace <name>: 0 plugins indexed
Expected: step 4 (or Auto Refresh) makes the new commit available within minutes, and a
no-op update is distinguishable from a successful one.
Note: once the backend does have the newer commit, agent plugin marketplace update
rebuilds ~/.cursor/plugins/cache/ correctly with no further action — so the client side
appears to work. Opening agent → /plugins interactively also pulls it immediately. The
stall is in the indexing step before that.
Operating System
MacOS
Version Information
Version information
| Cursor | 3.21.16 |
| Cursor Agent CLI | 2026.09.18-9a7762b |
@cursor/sdk |
1.0.32 |
| OS | macOS 26.3 (build 25D125) |
| Hardware | Mac mini, Apple M4, arm64 |
| Node.js | v25.6.1 |
Environment
- Team marketplace imported from a private GitHub repo URL (
https://github.com/<org>/<repo>) - Cursor GitHub App installed org-wide — verified through the GitHub API
(app_slug: cursor,repository_selection: all) Enable Auto Refresh: ONServe Marketplace From Cursor: OFF- Runs headless: a launchd worker on the Mac mini drives local agents through
@cursor/sdk,
and callsagent plugin marketplace update <name>every 30 minutes - No remote/SSH development; the marketplace repo is cloned by Cursor, not by us
One constraint worth noting for anyone reproducing this headlessly: the agent binary
refuses to run over an SSH session on macOS with
Error: Your macOS login keychain is locked. — passing CURSOR_API_KEY does not bypass it,
and launchctl asuser needs root. The worker itself is fine because launchd runs it inside
the GUI session. This is why the /plugins workaround is awkward for us: it requires
someone physically at the machine.
Does this stop you from using Cursor
No - Cursor works, but with this issue