Cursor-agent CLI does not register skills from plugins (IDE does — parity gap)

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Summary

Skills bundled inside plugins are loaded by the plugin subsystem but never reach the agent’s skill registry in the headless cursor-agent CLI. The IDE agent surfaces plugin skills from the official Cursor Marketplace, but the CLI does not — not from Cursor marketplace plugins, not from local plugins (~/.cursor/plugins/local/), and not from Claude Code marketplace plugins. Skills only register when placed directly in one of four well-known paths. This breaks the value proposition of plugin-based skill distribution for any workflow that uses the CLI (CI, evals, headless agents).

Request ID / Privacy note

Our Cursor Enterprise admin policy enforces Privacy Mode, so I cannot enable Share Data to produce a content-visible Request ID. This bug is deterministic and reproducible on any machine via the minimal canary case below — the Cursor team should not need session content to reproduce it.

For completeness, these are the cursor-agent CLI session_ids from my test runs (metadata-level visibility only):

Behavior session_id
Plugin skill not surfaced (Claude Code install) c1c57a65-76df-43ec-a50f-9e5da6f63cd6
Skill enumeration — plugins absent ffad3026-6565-4690-ba98-303cab03b386
Skill fires from ~/.cursor/skills/ (control) 98dead3b-504b-4f5c-b2d9-21eafe48ba9e
Skill fires via symlink into ~/.cursor/skills/ 3ffbf1cf-225d-495c-8ada-8c30875acfd3

Happy to coordinate through our Enterprise account rep if more detailed evidence is needed — please reach out if that’s the preferred channel for this class of issue.

What actually happens

The plugin loader logs success, but the agent has zero knowledge of the skill’s content. When asked to enumerate available skills, the CLI returns only skills from:

  • <repo>/.claude/skills/
  • <repo>/.cursor/skills/
  • ~/.cursor/skills/
  • ~/.cursor/skills-cursor/

Plugin skill paths are never returned, regardless of whether the plugin is:

Source IDE registers skills? CLI registers skills?
Cursor public marketplace (~/.cursor/plugins/cache/cursor-public/*/skills/) :white_check_mark: :cross_mark:
Cursor local plugin (~/.cursor/plugins/local/*/skills/) (likely yes, untested) :cross_mark:
Claude Code marketplace (~/.claude/plugins/cache/*/*/skills/) :cross_mark: :cross_mark:

Workaround currently in use

Symlinking plugin skill directories into ~/.cursor/skills/:

ln -s \
  ~/.claude/plugins/cache/<marketplace>/<plugin>/<sha>/skills/<skill> \
  ~/.cursor/skills/bridge--<plugin>--<skill>

Works because ~/.cursor/skills/ is scanned with plain readdir and symlinks are followed. But:

  • Plugin update changes the SHA directory, breaking the symlink
  • Doesn’t scale — requires a sync script per install/update
  • Only surfaces skills; plugin commands, agents, and hooks still don’t port

Asks

  1. CLI parity with IDE: have cursor-agent scan plugin skill paths the same way the IDE does.
  2. Claude Code plugin skill surfacing (IDE): the existing loadClaudePlugin code path logs “loaded” but the skills don’t reach the IDE agent’s skill registry either (separate issue; logs available).
  3. Config escape hatch (nice-to-have): an additionalSkillPaths field in cli-config.json or ~/.cursor/settings.json for users/orgs that want to add arbitrary skill directories.

Why this matters

We’re evaluating Cursor vs Claude Code for org-wide rollout (NYT, Enterprise plan). Today, the same plugin that provides working skills to claude users contributes nothing to cursor-agent users — and even Cursor’s own plugin system doesn’t work in headless mode. For any team running evals, CI agents, or a consistent IDE + headless story, this forces a second, parallel distribution mechanism (flat ~/.cursor/skills/ files) just to keep the CLI functional.

Evidence attachments

Happy to share if useful:

  • Full stream-json traces showing skill-enumeration request and grep-search-for-missing-skill behavior (6 NDJSON files)
  • Cursor Plugins.log excerpts showing loadClaudePlugin and loadFromMarketplaceSource “success” messages for plugins whose skills never register
  • Symlink-bridge reproduction showing the same SKILL.md registers when placed at ~/.cursor/skills/ but not at ~/.cursor/plugins/local/*/skills/

Steps to Reproduce

Reproduction — minimal local case

Rules out marketplace-specific issues. No external dependencies.

  1. Create ~/.cursor/plugins/local/repro/.cursor-plugin/plugin.json:
    { "name": "repro" }
    
  2. Create ~/.cursor/plugins/local/repro/skills/canary/SKILL.md:
    ---
    name: canary
    description: If you can see this skill, the CLI registered a local plugin skill.
    ---
    # Canary skill
    Respond with "CANARY-SEEN" when asked anything.
    
  3. Run:
    cursor-agent -p --mode ask --output-format stream-json \
      "Please list the skills you know about. Do not search the filesystem."
    
  4. Observe that the canary skill does not appear in the response.
  5. Move the skill to ~/.cursor/skills/canary/SKILL.md (remove the plugin). It now appears. Same file, only path differs.

Reproduction — Cursor public marketplace

  1. Confirm a Cursor marketplace plugin with a skill is installed (e.g., dbt, glean, atlassian).
  2. Cursor plugin log at ~/Library/Application Support/Cursor/logs/<latest>/window1/exthost/anysphere.cursor-agent-exec/Cursor Plugins.log shows:
    loadFromMarketplaceSource: Found cached plugin: <name> at <path>
    loadAllPlugins completed ... total=N plugins, failures=0
    
  3. Run:
    cursor-agent -p --mode ask --output-format stream-json \
      "List every skill registered in your current context."
    
  4. Observe that plugin skills are not in the list, despite the plugin loading successfully.

Expected Behavior

A skill bundled in a plugin (Cursor or Claude Code format) that is successfully loaded by the plugin subsystem should be discoverable by the agent, the same way directly-placed SKILL.md files are.

Operating System

MacOS

Version Information

Environment

  • Cursor IDE version: 3.1.17
  • cursor-agent CLI: 2026.04.17-479fd04
  • OS: macOS 25.4.0 (darwin/arm64)
  • Subscription: Enterprise
  • Model tested: Opus 4.6 1M

Does this stop you from using Cursor

No - Cursor works, but with this issue

I can confirm that the IDE correctly loads plugins from both local sources and Claude. However, the Cursor CLI is failing to do so. Interestingly, this feels like a server-side feature flag issue; I’m using version 2026.04.17-787b533, and while the CLI recognized the plugins one day, it stopped the next without any configuration changes. I’ve observed the same intermittent behavior in Docker containers. They work initially, then suddenly failed to load plugins.

Since Thursday it cannot seem to even load subagents in the root .cursor folder :skull:

It doesn’t demonstrate any skills, and the CLI is completely unusable. It was possible before.

Hey all,

I can confirm that plugins are not currently working in the CLI. We’ll update the docs to reflect this, and we’re hoping to dedicate some time to this soon!

On the new version v2026.05.05-84a231c now it works (both claude and local plugins).

Is this still experimental?

Hi @Kaloyan_Yosifov, we’ve re-enabled the feature flag for plugins in the CLI. Fingers crossed we won’t need to roll it back! Any feedback you can share on Plugins in the CLI would be greatly appreciated and incredibly valuable to us!