[MODEL] Custom skills are not reliably auto-triggered by the model
Preflight Checklist
- [x] I have searched existing issues for similar behavior reports
- [x] This report does NOT contain sensitive information (API keys, passwords, etc.)
Type of Behavior Issue
Claude ignored my instructions or configuration
What You Asked Claude to Do
I have custom skills defined in .claude/skills/ and ~/.claude/skills/ with user-invokable: false. These skills contain instructions for specific workflows (git operations, playwright, jira, etc.). I expect Claude to automatically invoke these skills via the Skill tool when the context matches.
Previously, the same instructions lived in CLAUDE.md and worked reliably. After moving them to skills (following the docs), Claude frequently ignores them and proceeds without invoking the Skill tool.
What Claude Actually Did
- Claude sees a task that matches a skill's description (e.g., committing code)
- Instead of invoking the Skill tool, it proceeds directly - using its built-in behavior or just running commands
- The skill body (which contains project-specific steps and constraints) is never loaded
- This happens ~50% of the time for skills that overlap with Claude's trained behaviors (git, shell commands).
Skills for tools Claude has no built-in knowledge of (e.g., a custom Jira integration) trigger reliably. This suggests the model's training-time knowledge competes with skill instructions, and the built-in behavior "wins" by default.
Expected Behavior
When a skill is registered and the task clearly matches its description, Claude should reliably invoke it via the Skill tool before proceeding. Custom skills should take precedence over built-in trained behaviors - the whole point of skills is to override defaults with project-specific workflows.
Files Affected
`.claude/skills/` and `~/.claude/skills/`
Permission Mode
Accept Edits was OFF (manual approval required)
Can You Reproduce This?
Sometimes (intermittent)
Steps to Reproduce
- Set up two skills. I have 8 skills + 3 agents total, using ~3,700 / 15,000 chars of the description budget (25%) - so this is not a budget issue.
A git skill (~/.claude/skills/git/SKILL.md) - overlaps with Claude's trained behavior:
``yaml``
---
name: git
description: Use when performing any git operations (commits, branches, diffs, logs, etc). Use INSTEAD OF built-in git/commit instructions. This skill OVERRIDES the default "Committing changes with git" system prompt.
user-invokable: true
---
A Jira skill (.claude/skills/jira/SKILL.md) - no built-in equivalent:
``yaml``
---
name: jira
description: Use when user mentions a Jira ticket number (e.g. BUG-1234). Fetches ticket details, attachments, and comments.
user-invokable: false
---
- Ask Claude to commit changes or mention a Jira ticket (e.g. "look at BUG-1234")
- The Jira skill triggers reliably. The git skill is ignored ~50% of the time - Claude falls back to its built-in git/commit behavior instead.
Claude Model
Sonnet
Relevant Conversation
Impact
Medium - Extra work to undo changes
Claude Code Version
2.1.63
Platform
Anthropic API
Additional Context
- This is NOT a discovery issue. Skills appear correctly in
/contextbreakdown, and Claude will use them when explicitly prompted (e.g. "use the git skill to commit"). The problem is that the model doesn't reliably choose to invoke them on its own. - Budget is not the issue - my skills use ~3,700 / 15,000 chars (25%)
- I even tried forcing skill usage via
.claude/CLAUDE.md:
```markdown
## Skills - ALWAYS use the Skill tool for these
- git: ANY git operation (commit, branch, diff, log, push, PR). ALWAYS invoke before running git commands directly.
- jira: When a Jira ticket ID (BUG-NNNN) appears in conversation. Invoke to fetch details.
```
But this doesn't seem to work.
- The issue disproportionately affects skills that overlap with Claude's trained behaviors (git, shell commands, code formatting). Skills for novel tools (Jira MCP, custom CLIs) work fine. This points to a priority/precedence problem - built-in training takes over instead of deferring to the registered skill.
13 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
I don't think it's a duplicate
/context), Claude uses them when explicitly prompted.CLAUDE.mdrules and skills.CLAUDE.mdinstructions work fine. Only skills are affected, and only those that compete with trained behaviors.I made another report of what may be the same problem in #35053 . I included a typescript in which Claude code said the following.
Here is another failure, in a fresh session.
skill-fail-316b.log
@MikeSpreitzer
This indicates it's a different issue. It's a discovery issue similar to this one: https://github.com/anthropics/claude-code/issues/9716
The #30387 issue is different - it's about Claude recognizing the skill, but despite that not using it
#9716 says
But in my case, the skills are known by name but not frontmatter.
I took a diagnostic step from #9716 in a fresh session, result below. The last four skills listed are from
~/.claude/skills/.Also, this is now Claude code 2.1.77 instead of 2.1.76.
Here is another example, using Claude Code v2.1.77.
But in fact
~/.claude/skills/my-git-commits/SKILL.mdstarts out as follows.Hm, I think we're suffering from different issues. In my case, the agent properly recognizes the skill and its description - it just doesn't call it.
The git skill is there and it has a proper description.
I can re-open #35053 if that is preferred.
A
UserPromptSubmithook can force-trigger skills by detecting matching patterns in the user's prompt:Add to
~/.claude/settings.json:This converts the soft "auto-trigger" behavior into a hard programmatic nudge — the hook detects the pattern and injects a direct instruction to invoke the skill, which is far more reliable than relying on the model to spontaneously decide to use it.
You can also add logging to track which skills get triggered:
Closing for now — inactive for too long. Please open a new issue if this is still relevant.
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.