Repository navigation
[Bug]: Cursor provider: /skill and $skill can't invoke skills with disable-model-invocation: true (agent SDK) #15606
Description
Activity
Note
Grok responding on behalf of Julius.
Triage
Thanks for the detailed report, @cvpcasada. The frontmatter example and the side-by-side with
grillingmade this easy to trace.What I found
I reproduced this from the code on current
main. A Cursor skill withdisable-model-invocation: truegets discovered and offered in the composer, but it's sent as plain prompt text, so the Agent SDK never attaches itsSKILL.md.parseSkillFrontmatterinCursorSkills.tsrecords the flag asuserInvocationOnlyand still returns the skill. The composer keeps it becauseisProviderSkillUserInvocableonly filters outuserInvocable: false.- On send,
CursorAdapterV2.resolveUserMessageuses that same skill set, andrewriteCursorSkillMentionsturns$grill-meinto/grill-me. A typed/grill-meisn't a$mention, so it's passed through unchanged. Either way,agent.sendonly receives a string. Its options are model, mode, MCP servers, and callbacks, with no skill field. - Cursor's docs say a
disable-model-invocationskill is only included when Agent chat invokes/skill-nameitself. The model-facing catalog comes fromsettingSources, which is whygrillingshows up there andgrill-medoesn't. Rewriting the token doesn't do the composer's attach step, so the model has neither a catalog entry nor the skill body.
Related history: this isn't #6581, which was the empty Cursor skill picker (filesystem discovery has since landed). It's the same gap as #9161 and #8295 on Claude and the open #13457 on Grok, except Cursor already does the
$to/rewrite and that isn't enough here. #8336 tried inlining the skill file and was closed in favor of #9128, so the harness itself runs the skill (withallowed-tools, forks, hooks, and model overrides). That suggests inliningSKILL.mdinto the prompt isn't the direction either.Workaround for now: point the prompt at the skill file directly, or remove
disable-model-invocationso Cursor lists the skill for the model again.Likely fix area
CursorAdapterV2.resolveUserMessageandrewriteCursorSkillMentions, if the Cursor SDK exposes (or gains) a way to attach a user-invoked skill on send.CursorSkills.tsandisProviderSkillUserInvocable, if the better option is to hide or mark user-invocation-only skills in the Cursor composer until invocation is supported.
A maintainer will decide on the fix direction.
- addedbugSomething is broken or behaving incorrectly.Something is broken or behaving incorrectly.via-triageFiled through npx t3 triageFiled through npx t3 triage
on Oct 4, 2026 I can reproduce this with the
broskill (~/.agents/skills/bro,disable-model-invocation: true).The composer lists it and the turn is sent as
/bro. In a Cursor thread the model says no such skill exists. The same/broprompt works in theagentCLI. The skill is installed, and the CLI loads it. The Agent SDK session T3 opens does not.
This is painful for using Cursor inside T3. It sits next to #16430: the picker and the running agent still disagree about which Cursor skills are actually available.
Is there a timeline for tackling this?
Before submitting
Area
apps/server
Steps to reproduce
~/.agents/skills/whose frontmatter setsdisable-model-invocation: true(for examplegrill-me)./grill-me <request>or$grill-me <request>.Expected behavior
The skill's
SKILL.mdis loaded into the turn and the agent follows it, the same as typing/grill-mein Cursor's own composer.Actual behavior
The agent receives
/grill-meas plain text and can't find the skill.The skill isn't missing from discovery. The model-facing skill list shows other skills from the same
~/.agents/skills/folder (for examplegrillingandcode-review). All 10 skills there withdisable-model-invocation: trueare absent:grill-me,implement,to-spec,handoff,show-me,retro,ask-matt,improve-codebase-architecture,grill-with-docsandsetup-matt-pocock-skills.For skills with
disable-model-invocation: true, Cursor hides them from the model and only loads them when its own composer handles the slash command. The agent SDK has no equivalent expansion: the prompt reaches the model as text, and the skill was never listed, so the model has no way to look it up. The Claude fix (#7673 / #9161) hands/nameto the CLI to expand. Cursor's SDK has nothing to hand it to, so T3 would need to expand it itself. On send, it would resolve a leading/nameor$nameagainst the discovered Cursor skills, including user-invocation-only ones, and add that skill'sSKILL.mdto the prompt.Related: #6581 (Cursor skill picker and invocation), #9161 and #8295 (the same problem on the Claude provider), #13457 (the same problem on the Grok provider).
Impact
Major degradation or frequent failure
Version or commit
0.0.46-nightly.20261004.2648
Environment
macOS 27.0.1 (arm64), T3 Code desktop nightly, Cursor provider via the Cursor agent SDK with orchestrator v2
Workaround
Reference the file directly in the prompt (
follow ~/.agents/skills/grill-me/SKILL.md), or removedisable-model-invocationfrom the skill.