Local Skill loading is inconsistent or non-existent

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Local skills aren’t loaded reliably. In Agents Window, starting 3 new agent convos results in 3 very different <agent_skills> and <available_skills> blocks in the initial agent context provided by Cursor. Sometimes no skills are listed at all…other times, the two blocks are either nested or partially/inconsistently duplicated.

These are silent failures and the result is that skills can’t be relied on in agent sessions…or they can’t be used at all.

Steps to Reproduce

Kick off 3 new local agents in Agents Window, same repo, one right after the other…

Dump the raw text of the entire <available_skills> and <agent_skills> blocks from your initial context.

Do not call any tools. Don't abbreviate or truncate anything. Just print out exactly what you were given.

Expected Behavior

Every skill should be listed every time…not listing the skills in the context means skills flat out don’t work in the session.

As for the randomly different XML structure, I don’t know if that has any negative effects, but it wastes context window when duplicated. I don’t know why both tags exist, but if they need to, then perhaps this is the correct structure?

<agent_skills>
  <available_skills>
    <agent_skill>...</agent_skill>
    ...
  </available_skills>
</agent_skills>

Screenshots / Screen Recordings

Operating System

MacOS

Version Information

Version: 3.8.11
VS Code Extension API: 1.105.1
Commit: e56ad3440df06d22ca7501e65fd518e905486ef0
Date: 2026-06-18T01:40:18.333Z
Layout: glass
Build Type: Stable
Release Track: Default
Electron: 40.10.3
Chromium: 144.0.7559.236
Node.js: 24.15.0
V8: 14.4.258.32-electron.0
xterm.js: 6.1.0-beta.256
OS: Darwin arm64 25.5.0

For AI issues: which model did you use?

composer-2.5

For AI issues: add Request ID with privacy disabled

These were run within a few minutes of each other…all from the same repo and run locally using Agents Window.

No skills listed at all:
b2464d12-fa4a-4016-b374-f8940ff17f86

Uses structure <agent_skills><available_skills></available_skills></agent_skills>:
f9e8a74d-c46c-4dce-ac06-d7442999259c

Uses structure where <available_skills> is not nested in <agent_skills>:
e977948c-972d-4424-8b05-749882651172

Does this stop you from using Cursor

Sometimes - I can sometimes use Cursor

I don’t see how it’s a problem, but is this supposed to be dynamic in both content and structure? Is this a/b testing? Note: this is in a cloud environment (parent bug report focuses on local).

bc-65204bf9-6abe-4190-8069-7605697ad0c9

bc-0b93800d-e01b-4c6e-a359-e00d63841303

bc-276047ca-7e0c-4f18-a412-34588bafd36a

Hey Kevin!

Short version: this isn’t something you’re configuring, and it isn’t per-run targeting of your account. Those <agent_skills> and <available_skills> blocks are part of Cursor’s internally managed agent context (the skill catalog we inject so the agent knows what’s on hand). We do iterate on that section’s wording over time, so it isn’t frozen across versions, but for a given build it’s deterministic.

The main reason your three cloud runs look so different is the method itself. Asking the model to “dump its raw context” gives you the model’s reconstruction of that context, not a byte for byte copy. Composer (like LLMs in general) tends to paraphrase, reorder, or drop a line when it echoes its own system context, so the same underlying block can render three different ways across runs. That’s what’s happening in those three screenshots, not three different prompts.

On structure specifically: the real layout nests <available_skills> inside <agent_skills> (exactly the shape you proposed as “correct” in your other thread), so your instinct there was right.

None of this changes which skills are available or whether they work. The skill list (path plus description) is what the agent acts on, it can read any SKILL.md on demand, and explicit /skill-name is unaffected.

The two things genuinely worth tracking are the ones you already flagged: the “no skills listed at all” case in this thread, and the shortened descriptions in your other thread. Those affect behavior. The wording and format differences in the self-dumps don’t.

For how skills get surfaced to the agent, see Agent Skills and Prompting agents.

Happy to dig into a specific run if something still looks off!

Then let’s focus on the attached run where it didn’t register any skills at all. Again, the concern is that the failure is silent. If the user knew that Skills were “unavailable” for that session, then they could do something about it.

That session was created before the skill list finished loading, so it started with an empty skill set for that turn. Your point about it being silent is the right one, and I’ve flagged it specifically. A session shouldn’t come up with no skills and give you nothing to act on. Both the bug and the missing signal are captured on our side.

Workaround for now: give Cursor a few seconds after launching or reloading (and after adding or editing a skill) before starting agents. If a session does come up empty, starting a fresh agent once the list has loaded picks the skills back up.

One thing that would help confirm we’re chasing the same cause: when you hit the no-skills case, is it usually right after launching or reloading Cursor, or right after adding or editing a skill? And does starting a fresh agent a few seconds later bring the skills back? If it instead happens on sessions you’ve had open for a while, that points somewhere different and I’d want to dig further.

If it’s easy to grab, a fresh Request ID from a no-skills run with Privacy Mode set to Share Data lets us see exactly what that session was handed. Totally optional.

I’ll keep this thread posted as it moves.