As of v2.1.3 (January 10, 2026), Claude Code merged slash commands into skills. I found out because I stepped away from a project for a few weeks and /vibe-article came back as “Unknown skill” instead of running my command workflow. The fix was quick, but it’s worth understanding what changed since skills give you more than commands did.

WHAT CHANGED

Commands and skills are now the same system. A file in .claude/commands/review.md and a skill in .claude/skills/review/SKILL.md both create /review and work the same way at a basic level. The .claude/commands/ folder is still supported, but .claude/skills/ is the recommended location going forward.

Skills give you more to work with:

Old commandsSkills
Location.claude/commands/name.md.claude/skills/name/SKILL.md
StructureSingle fileDirectory (can include templates, scripts, examples)
Invocation controlBasicCan restrict to user-only or Claude-only
Subagent executionNoYes, via context: fork
Dynamic contextNoYes, can inject shell command output
Tool restrictionsNoYes, limit which tools the skill can use

The directory structure is the big practical difference. Instead of one markdown file, you can organize supporting files alongside the skill:

.claude/skills/vibe-article/
├── SKILL.md              # The main skill instructions
├── voice-checklist.md    # Supporting reference
└── templates/
    └── frontmatter.md    # Template Claude can reference

HOW TO MIGRATE

Just tell Claude to do it:

I need to migrate my slash commands from .claude/commands/ to .claude/skills/.
First, research the current skills format and frontmatter requirements
so you get it right. Then migrate each command, keeping the same content
but using the correct directory structure and frontmatter.

Claude will create the new directories, copy your files over, and update the frontmatter. Confirm your /commands work, then delete the old .claude/commands/ versions. This isn’t optional cleanup, it’s important.

Things to know:

  • If you have both a command and a skill with the same name, the skill takes precedence, but both register in the slash command menu, so you’ll see duplicates when you type /
  • Having both can also cause weird invocation issues where the old command version gets blocked with a “This slash command can only be invoked by Claude, not directly by users” error
  • Once your skills are working, delete the matching command files and remove the .claude/commands/ directory if it’s empty
  • You don’t need to restart Claude Code after creating skills (unlike the old commands)

If you want to do it manually, here’s what changes per command:

  1. Create a directory: .claude/skills/your-command-name/
  2. Copy your command file in as SKILL.md
  3. Add name: to the frontmatter

Old format (.claude/commands/vibe-article.md):

---
description: Create blog article from backlog or new idea
---

New format (.claude/skills/vibe-article/SKILL.md):

---
name: vibe-article
description: Create blog article from backlog or new idea
---

The body of the file stays exactly the same.

NOT JUST YOU There’s a GitHub issue about the docs being inconsistent on what “merged” actually means, and people writing about the transition. If your commands broke, you’re not alone.

NEW FEATURES WORTH KNOWING

Skills unlock things commands never had:

  • Invocation control - disable-model-invocation: true means only you can run it (Claude won’t trigger it on its own). user-invocable: false makes it Claude-only, like background knowledge it applies automatically when relevant.
  • Subagent execution - context: fork runs the skill in its own subagent with a separate context window. Useful for skills that read a lot of files since the research stays out of your main conversation.
  • Dynamic context injection - Run shell commands and inject the output into the skill’s context when it runs. Useful for skills that need to check current state before doing anything.
  • Tool restrictions - allowed-tools limits what a skill can do. A review skill that should only read code but never edit it can be locked to read-only tools.

GOING FORWARD

New slash commands should go in .claude/skills/. If you have working commands in .claude/commands/, migrate when you get around to it. Both create the same /slash-command experience, but skills are where new features will land. Everything I covered in the original slash commands article about writing good workflows, structuring commands, and deciding what belongs in CLAUDE.md vs a command still applies.