Skill tool cannot invoke custom slash commands from .claude/commands/ or .claude/skills/

Resolved 💬 2 comments Opened Mar 24, 2026 by Drcollinjc Closed Apr 23, 2026

Description

The Skill tool cannot programmatically invoke custom slash commands defined in .claude/commands/ or .claude/skills/. Only built-in bundled skills (e.g., simplify, batch, claude-api) work via the Skill tool.

Expected Behavior

Custom slash commands (.claude/commands/*.md) and custom skills (.claude/skills/*/SKILL.md) should be invokable via the Skill tool, enabling Claude to trigger them programmatically during a conversation — not just when the user types /command directly.

Actual Behavior

  • .claude/commands/plan.md -> Skill("plan") returns: "Skill plan is not a prompt-based skill"
  • .claude/skills/plan/SKILL.md (with name field) -> same error: "Skill plan is not a prompt-based skill"
  • .claude/skills/test-skill/SKILL.md (created mid-session) -> "Unknown skill: test-skill"
  • Built-in Skill("simplify") -> works correctly

Reproduction Steps

  1. Create .claude/commands/mycommand.md with valid frontmatter:

``yaml
---
description: A test command.
---
Do something with $ARGUMENTS
``

  1. In a conversation, have Claude invoke Skill("mycommand")
  2. Error: "Skill mycommand is not a prompt-based skill"
  1. Alternatively, create .claude/skills/mycommand/SKILL.md with:

``yaml
---
name: mycommand
description: A test skill.
---
Do something with $ARGUMENTS
``

  1. Same error (or "Unknown skill" if created mid-session)

Tested Variations

| Location | Frontmatter | Result |
|----------|------------|--------|
| .claude/commands/plan.md | description: only | "not a prompt-based skill" |
| .claude/skills/plan/SKILL.md | description: only | "not a prompt-based skill" |
| .claude/skills/plan/SKILL.md | name: + description: | "not a prompt-based skill" |
| .claude/skills/plan/SKILL.md | With old command removed | "not a prompt-based skill" |
| .claude/skills/test-skill/SKILL.md | Created mid-session | "Unknown skill" |
| Built-in simplify | N/A | Works |

Environment

  • Claude Code CLI (Opus 4.6)
  • macOS Darwin 25.2.0
  • Permissions: Skill(*) explicitly allowed in .claude/settings.local.json

Why This Matters

We have a plugin (claude-specify) that installs a pipeline of slash commands (/specify -> /plan -> /tasks -> /implement). The workflow requires Claude to invoke the next pipeline stage programmatically. Currently, only the user can trigger each stage by manually typing the /command, which breaks the autonomous pipeline flow.

The skills documentation suggests custom skills should be invokable by Claude, but this does not work in practice.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗