Bug Description
Custom Claude Code skills always display "A Claude Code Skill" or "Agent command" as their description in Maestro, instead of the actual description from the skill's frontmatter.
Root Cause
In src/main/ipc/handlers/claude.ts line 1672, the skill scanner looks for skill.md (lowercase):
const skillPath = path.join(dir, entry.name, 'skill.md');
But Claude Code skills use uppercase: SKILL.md (e.g., ~/.claude/skills/Research/SKILL.md).
On case-sensitive filesystems (Linux, WSL), skill.md != SKILL.md, so the lookup silently fails. The skill name is discovered via the init message's slash_commands array, but without a matching description from the file, the UI falls back to generic text.
Full Chain
- Claude Code reports skill names via init message (
slash_commands: ["Research", ...])
agents:discoverSlashCommands in agents.ts:1067 returns just { name } without descriptions
- Renderer's
getSlashCommandDescription() doesn't find custom skills in its hardcoded builtin list
- Falls back to generic "Agent command" description
Files Affected
src/main/ipc/handlers/claude.ts:1672 - Case-sensitive skill.md lookup
src/main/ipc/handlers/agents.ts:1067 - Missing description in skill discovery
src/renderer/hooks/agent/useAgentListeners.ts:988 - Uses fallback instead of actual descriptions
Proposed Fix
- Try
SKILL.md first, fall back to skill.md (or do a case-insensitive directory listing)
- When reporting skills from
slash_commands, fetch descriptions from disk and return { name, description }
- Use actual descriptions in the renderer instead of
getSlashCommandDescription() fallback
Environment
- Platform: Linux/WSL (case-sensitive filesystem)
- macOS may also be affected depending on filesystem configuration
- Windows NTFS is case-insensitive so this works there by accident
Bug Description
Custom Claude Code skills always display "A Claude Code Skill" or "Agent command" as their description in Maestro, instead of the actual description from the skill's frontmatter.
Root Cause
In
src/main/ipc/handlers/claude.tsline 1672, the skill scanner looks forskill.md(lowercase):But Claude Code skills use uppercase:
SKILL.md(e.g.,~/.claude/skills/Research/SKILL.md).On case-sensitive filesystems (Linux, WSL),
skill.md!=SKILL.md, so the lookup silently fails. The skill name is discovered via the init message'sslash_commandsarray, but without a matching description from the file, the UI falls back to generic text.Full Chain
slash_commands: ["Research", ...])agents:discoverSlashCommandsinagents.ts:1067returns just{ name }without descriptionsgetSlashCommandDescription()doesn't find custom skills in its hardcoded builtin listFiles Affected
src/main/ipc/handlers/claude.ts:1672- Case-sensitiveskill.mdlookupsrc/main/ipc/handlers/agents.ts:1067- Missing description in skill discoverysrc/renderer/hooks/agent/useAgentListeners.ts:988- Uses fallback instead of actual descriptionsProposed Fix
SKILL.mdfirst, fall back toskill.md(or do a case-insensitive directory listing)slash_commands, fetch descriptions from disk and return{ name, description }getSlashCommandDescription()fallbackEnvironment