Skill with disable-model-invocation: true cannot be invoked by user via slash command
Bug Description
When a skill has disable-model-invocation: true in its SKILL.md frontmatter, Claude refuses to invoke it via the Skill tool even when the user explicitly types the slash command (e.g., /project-lean-audit).
The model interprets disable-model-invocation: true as "I cannot use the Skill tool for this skill at all," when it should only mean "don't auto-trigger this skill without user request."
Expected Behavior
user-invocable: true+disable-model-invocation: true= user CAN invoke via slash command, Claude will NOT auto-trigger it- When user types
/skill-name, Claude should use the Skill tool to execute it regardless ofdisable-model-invocation
Actual Behavior
Claude sees the skill in the available skills list but refuses to call the Skill tool, saying:
"The skill exists but has disable-model-invocation: true — so I can't invoke it via the tool. Let me read the skill definition directly and run it manually."
The user tried invoking manually multiple times in the same session and Claude consistently refused to use the Skill tool.
Reproduction
- Create a global skill at
~/.claude/skills/my-skill/SKILL.mdwith:
``yaml``
---
name: my-skill
user-invocable: true
disable-model-invocation: true
---
- Start a new session
- Type
/my-skill - Claude will acknowledge the skill exists but refuse to invoke it via the Skill tool
Environment
- Claude Code in VS Code extension
- Skill located in
~/.claude/skills/(global scope) - Behavior is inconsistent across sessions — sometimes works, sometimes doesn't
Notes
This is particularly impactful for users who set disable-model-invocation: true as a default on all new skills (to prevent unwanted auto-triggering), since it can block all manual slash command invocations.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗