Custom skill in .claude/skills/ recognized but fails with 'Unknown skill' when invoked
Claude Code version
2.1.74
Environment
- macOS 15.3 (Darwin 25.3.0, arm64)
- Node v24.14.0
- Model: claude-opus-4-6
Description
A custom skill defined in .claude/skills/timesheet/SKILL.md is listed in the system reminder as an available skill, but invoking it via /timesheet or the Skill tool returns Unknown skill: timesheet.
Steps to reproduce
- Create a skill file at
.claude/skills/timesheet/SKILL.mdwith valid frontmatter:
```markdown
---
name: timesheet
description: Analyze git history to estimate time spent on the project.
allowed-tools: Bash, Read
---
(skill instructions here)
```
- Start a new Claude Code conversation in the project directory.
- Observe that the skill appears in the system reminder:
```
The following skills are available for use with the Skill tool:
- timesheet: Analyze git history to estimate time spent on the project...
```
- Type
/timesheetor have the model invokeSkill(skill: "timesheet").
- Result:
Unknown skill: timesheet
Expected behavior
The skill should be invoked successfully since it's recognized and listed as available.
Actual behavior
The skill is listed in the available skills but the Skill tool returns Unknown skill: timesheet. This happened consistently across multiple attempts in the same conversation.
File structure
.claude/
├── settings.json
├── settings.local.json
└── skills/
└── timesheet/
└── SKILL.md (1961 bytes, -rw-r--r--)
SKILL.md frontmatter (hex-verified, no BOM or hidden characters)
---
name: timesheet
description: Analyze git history to estimate time spent on the project. Use when the user asks about time tracking, hours worked, or timesheet.
allowed-tools: Bash, Read
---
Workaround
Manually reading the SKILL.md and executing the instructions works fine — only the /timesheet invocation path is broken.
This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗