Kipt

Skills vs slash commands in Claude Code: what changed and which to use

Skills vs slash commands in Claude Code: custom commands merged into skills. What still differs, how invocation and arguments work, and which format to pick.

By the Kipt team · Updated 24 October 2026

Are skills and slash commands different in Claude Code?

Not anymore, for anything you write yourself. Claude Code's skills documentation says: "Custom commands have been merged into skills. A file at .claude/commands/deploy.md and a skill at .claude/skills/deploy/SKILL.md both create /deploy and work the same way." The skill folder simply adds a few optional extras.

So the real question is not "skill or command" but which file layout to use. The short answer from Anthropic's docs is to prefer a skill for new work, and to leave old command files alone until you have a reason to move them.

What still exists separately are built-in commands such as /clear and /model. Those are part of Claude Code itself, not something you write.

What counts as a slash command today?

Type / in Claude Code and the menu mixes several kinds of entries. The commands reference explains them:

  • Built-in commands. "Most are built-in commands whose behavior is coded into the CLI." Examples are /clear, /compact, /init and /model.
  • Bundled skills. Commands marked Skill in the reference are prompts that ship with Claude Code, such as /batch, /simplify, /loop and /debug. The skills docs explain the difference: "Bundled skills are prompt-based: they give Claude detailed instructions and let it orchestrate the work using its tools. Most built-in commands instead execute fixed logic directly."
  • Your own skills and command files. Skills in .claude/skills/ (project) or ~/.claude/skills/ (personal), older command files in .claude/commands/, plus skills from plugins.
  • MCP prompts. "MCP servers can expose prompts that appear as commands."

When people search for "skills vs slash commands," they usually mean the third group: should a reusable prompt live in a commands file or a skill folder? That is what the rest of this guide covers. For the built-ins worth knowing, see the Claude Code slash commands guide.

Command file vs skill: side by side

Command file Skill
Location .claude/commands/<name>.md .claude/skills/<name>/SKILL.md (project) or ~/.claude/skills/<name>/SKILL.md (personal)
Creates /name Yes Yes
Status in the docs "The older format and still works" Recommended for new work
Supporting files (scripts, references, templates) No, a single file Yes, anything in the skill folder
Frontmatter Same fields except name and paths Full set, including name and paths
$ARGUMENTS, $0, $1 Yes Yes
Claude loads it automatically when relevant Listed as a skill feature Yes, unless disable-model-invocation: true
Subfolder naming commands/frontend/component.md becomes /frontend:component Folder name, or the name field
Wins a name clash No Yes
Follows the Agent Skills open standard No Yes

The table is built from the skills page. The "Command files" note there reads: "a Markdown file in .claude/commands/ is the older format and still works. It supports the same frontmatter except name and paths."

What do skills add over a plain command file?

Three things, per the docs: "a directory for supporting files, frontmatter to control whether you or Claude invokes them, and the ability for Claude to load them automatically when relevant."

Supporting files. A skill is a folder, so it can hold a long reference doc, a script or a template next to SKILL.md. The docs explain why that matters: "Large reference docs, API specifications, or example collections don't need to load into context every time the skill runs." Claude reads them only when the instructions point there.

Automatic loading. In a normal session, "skill descriptions are loaded into context so Claude knows what's available, but full skill content only loads when invoked." When your request matches the description, Claude can pull the skill in without you typing anything. The paths field narrows this further: with glob patterns set, "Claude loads the skill automatically only when working with files matching the patterns."

Portability. "Claude Code skills follow the Agent Skills open standard, which works across multiple AI tools." The same folder works in Codex and Cursor, as long as it sits in a folder each tool scans. A .claude/commands/ file is Claude Code only. OpenAI made a similar move: its docs index lists Codex custom prompts as "Deprecated. Use skills for reusable prompts."

Who runs it: you, Claude, or both?

This is the main behavior choice, and it works the same for both formats because they share frontmatter. "By default, both you and Claude can invoke any skill." Two fields change that:

Frontmatter Who can run it Description in Claude's context
(default) You and Claude Yes
disable-model-invocation: true Only you, by typing /name No
user-invocable: false Only Claude Yes

Use disable-model-invocation: true for anything with side effects. The docs suggest it "for workflows with side effects or that you want to control timing, like /commit, /deploy, or /send-slack-message." Use user-invocable: false for background knowledge, such as notes on a legacy module, that make no sense as a command.

Here is a manual-only deploy skill:

---
name: deploy
description: Deploy the current branch to staging and report the URL
disable-model-invocation: true
argument-hint: "[environment]"
---

Deploy the current branch to $ARGUMENTS.
1. Run the test suite. Stop if anything fails.
2. Run npm run deploy -- --env $ARGUMENTS.
3. Report the deploy URL and the commit hash.

How do arguments and naming work?

Arguments behave the same in both formats. $ARGUMENTS holds everything typed after the command, and $0, $1 and so on pick out single arguments. The docs note that indexed arguments "use shell-style quoting," so /my-skill "hello world" second makes $0 equal hello world. If the file has no placeholder at all, Claude Code appends the input as ARGUMENTS: <value>.

Naming is where the formats differ:

  • A skill's command name comes from its folder, or from the optional name field, which "Defaults to the directory name."
  • A command file's name comes from its filename. Subfolders add a prefix with a colon, so .claude/commands/frontend/component.md becomes /frontend:component.
  • Plugin skills are namespaced as /plugin-name:skill-name, so they never clash with your own.

When a skill and a command file share a name, Claude Code's priority table is short: "The skill."

Which should you pick?

For anything new, pick a skill. It does everything a command file does, plus supporting files, path scoping and portability to other agents. Anthropic's own wording is "Prefer a skill for new work."

Keep a command file when:

  • It already works and you have no reason to touch it.
  • It is a one-line shortcut you will never extend.
  • Your team has scripts or docs that expect the .claude/commands/ layout.

Move a command file to a skill when:

  • You want to add a checklist, template or script next to it.
  • You want it to load only for certain files, using paths.
  • You want the same workflow in Codex or Cursor too.
  • You want a different command name than the filename, using name.

Converting is a small change. Create .claude/skills/<name>/, move the command's Markdown into it as SKILL.md, keep the frontmatter, and delete the old file so you do not keep two copies with the same name. Add a clear description: the Agent Skills specification requires one, up to 1,024 characters, and it is what Claude reads to decide when the skill fits. The SKILL.md writing guide covers good descriptions in detail.

Keep your skills in one place

Once your reusable prompts are skills, they are plain folders you can version and share. Kipt keeps prompts and skills as Markdown in a private GitHub repo you own, and installs every skill into Claude Code or Codex with npx skills add https://github.com/<you>/<repo>.git --all -g. If you have an old command or a prompt you keep pasting, the free SKILL.md generator turns it into a skill folder in your browser.

Questions

Are skills and slash commands the same thing in Claude Code?

For custom commands, yes. Anthropic's docs say custom commands have been merged into skills, so a file at .claude/commands/deploy.md and a skill at .claude/skills/deploy/SKILL.md both create /deploy and work the same way. Built-in commands like /clear and /model are a separate thing coded into the CLI.

Do my .claude/commands files still work?

Yes. The docs say existing .claude/commands/ files keep working. They are described as the older format, and Anthropic recommends a skill for new work because skills also support supporting files.

Can Claude run a skill without me typing the command?

Yes, by default. Claude can load a skill automatically when its description matches your request, and you can also type /skill-name. Add disable-model-invocation: true to the frontmatter if you want only you to trigger it.

What happens if a skill and a command file have the same name?

The skill wins. Claude Code's docs list the skill as taking priority over a file in .claude/commands/ with the same name, so remove or rename the old command file when you convert it.

Should I convert my old commands to skills?

There is no deadline, since command files still work. Convert a command when you want to add reference files or scripts next to it, use the paths field, or share it with other tools that read the Agent Skills format.

More in Compare

All guides

Keep your prompts and skills in one place, in your own GitHub. Install every skill with one command.

Get started

Kipt is an independent product, not affiliated with or endorsed by Anthropic, OpenAI, Cursor or GitHub. Claude, ChatGPT, Codex, Cursor and GitHub are trademarks of their owners.