[Bug]: Claude skill discovery drops skills with frontmatter Claude Code itself accepts (strict YAML vs CLI leniency), silently
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 23k
- Forks
- 5.9k
- Avg merge
- 11h 14m
- Merged PRs (30d)
- 357
Description
Before submitting
- I searched existing issues and did not find a duplicate.
- I included enough detail to reproduce or investigate the problem.
Area
apps/server
Steps to reproduce
-
Install a skill whose
descriptionis a plain scalar containing a colon followed by a space. Real-world example: LambdaTest's kane-cli installer (kane-cli install skill) writes~/.claude/skills/kane-cli/SKILL.mdwith:--- name: kane-cli description: Browser automation + AI test authoring via kane-cli: run browser objectives, ... ---yaml.parserejects this (mapping values are not allowed here), but Claude Code's own frontmatter parser accepts it — the skill loads and works in every Claude Code session. -
Start the desktop app with a Claude provider instance and wait for a capability probe cycle.
-
Type
$in the composer, or read~/.t3/caches/claudeAgent.json.
Expected behavior
Whatever file the Claude Code CLI loads as a skill should be discovered by T3's own scanner too — the CLI is the authority on what it accepts. Failing that, dropping a skill should at least log which file was rejected and why.
Actual behavior
parseSkillFrontmatter in apps/server/src/provider/Drivers/ClaudeSkills.ts strict-YAML-parses the frontmatter and skips the entry as malformed with no log. The same cache snapshot shows the contradiction: the skill appears in slashCommands (enumerated by the Claude Code SDK probe, which accepts the file) while skills is [] (T3's scanner dropped it). If it is the user's only skill, the $ picker is empty and nothing explains why.
Related but distinct: #6449 covers discovery scanning the wrong directory (ServerConfig.cwd), and #1084 covers malformed-skill diagnostics in threads. This one is the parser-strictness mismatch: a skill that demonstrably works in Claude Code is invisible in T3.
Impact
Minor bug or occasional failure
Version or commit
Desktop 0.0.33 (alpha); code path unchanged at main HEAD
Environment
macOS (Darwin 25.5.0), T3 Code (Alpha) 0.0.33, Claude Code CLI 2.1.237, kane-cli skill 0.0.17 as shipped by @testmuai/kane-cli-skill
Logs or stack traces
# ~/.t3/caches/claudeAgent.json (one snapshot, provider ready, authenticated)
"slashCommands": [... "kane-cli" ...] # SDK probe accepted the file
"skills": [] # T3's scanner dropped it, no log emitted
# python yaml.safe_load on the same frontmatter:
mapping values are not allowed here, line 2, column 65
Workaround
Quote the description in the skill's frontmatter so it parses as strict YAML. Works, but every consumer of an installer-shipped skill has to know to do it, and nothing tells them.
Investigated and filed by Claude Fable 5 (claude-fable-5) on behalf of the repo user; findings verified against the packaged app bundle and source at main.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in apps/server/src/provider/Drivers/ClaudeSkills.ts, focusing on parseSkillFrontmatter and the path that marks entries as malformed. Reproduce the provided kane-cli frontmatter and compare T3's scanner result with the Claude Code SDK probe; run the relevant server tests. Done means accepted Claude-compatible frontmatter is discovered, or rejected files are logged with a useful reason.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript, yaml
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 74/100