Team marketplace index stops advancing for hours; `update` reports success with no change

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: ON
  • Serve 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

  1. Is 0 plugins indexed a known failure mode? What does it indicate?
  2. Is add on 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?
  3. Is there any non-interactive way to force a re-index or reinstall? The only reliable
    recovery we found was opening /plugins interactively, 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

  1. Register a team-scoped marketplace from a GitHub URL (Settings → Marketplaces).

  2. Confirm it is the only registration:

    agent plugin marketplace list
    <name>   team   https://github.com/<org>/<repo>
    
  3. 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)
    
  4. 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>
    
  5. 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.
    
  6. Recovery is only partial:

    agent plugin marketplace remove <user-scoped name>     # works
    agent plugin marketplace remove <team-scoped name>     # not possible
    

    remove only 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

  1. Record the currently indexed commit:

    ls ~/.cursor/plugins/marketplaces/github.com/<org>/<repo>/
    b2d2150...
    
  2. Merge any commit to main of the marketplace repo.

  3. Press Refresh under Settings → Marketplaces → Plugin Repository.

  4. Run the update (by name, to avoid issue A):

    agent plugin marketplace update <name>
    ✓ Updated marketplace <name>: 6 plugins indexed
    

    This reports success every time.

  5. 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.

  6. Occasionally a cycle returns 0 instead 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: ON
  • Serve Marketplace From Cursor: OFF
  • Runs headless: a launchd worker on the Mac mini drives local agents through @cursor/sdk,
    and calls agent 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

Hi @Yoshimichi, thanks for the detailed report. I checked the timeline, and the marketplace re-indexed 02853a9 shortly after the push. The marketplace index itself was current; the lag was in syncing the content to the Mac mini.

agent plugin marketplace update refreshes the marketplace index, but it does not update the local plugin folders. In your 22:36 JST run, the refresh failed while accessing GitHub, but the CLI still reported success with 0 plugins indexed. That misleading success output is an issue we’re tracking. It was not caused by your GitHub App configuration.

You’re also right about the duplicate. marketplace add creates a personal registration even when the repository already exists at team scope. The CLI then finds both registrations and cannot resolve the URL. Removing the personal copy was the right cleanup. Your team marketplace already follows the default branch, so it does not need --git-ref main.

For the unattended setup, could you try this after the next merge?

  1. Wait about a minute.
  2. From the same launchd session, run agent -p "list the skills you have available".
  3. Check whether the new commit appears in the local marketplace folder.

If that works, the short CLI session can act as the local sync trigger. The scheduled marketplace update job should not be necessary while Auto Refresh is enabled.