What?

Skills are custom slash commands for Claude Code. They follow the Agent Skills open standard (agentskills.io) and give Claude detailed playbooks for specific tasks — code review, deployment, commit workflows, etc.

Why?

Skills let you encode repeatable workflows and domain knowledge so Claude behaves consistently. Instead of re-explaining your conventions every session, you write it once as a skill and invoke it with /my-skill.

How?

Skill Structure

my-skill/
├── SKILL.md           # Instructions (required)
├── template.md        # Optional template for output
├── examples/          # Optional example outputs
└── scripts/           # Optional helper scripts

Skills live at one of three levels:

LevelPathScope
Personal~/.claude/skills/<name>/SKILL.mdAll your projects
Project.claude/skills/<name>/SKILL.mdCurrent project
Plugin<plugin>/skills/<name>/SKILL.mdWhere enabled

Creating a Skill

mkdir -p ~/.claude/skills/code-review

Write SKILL.md with frontmatter and instructions:

---
name: code-review
description: Reviews code for best practices, security, and test coverage.
allowed-tools: Read Grep
---
 
When reviewing code, analyze:
1. **Structure**: Is the code organized logically?
2. **Error handling**: Are errors caught and handled?
3. **Security**: Any SQL injection, XSS, or auth issues?
4. **Tests**: Is coverage adequate?
5. **Performance**: Any obvious inefficiencies?
 
For each issue found, explain the problem and suggest a fix.

Then invoke:

/code-review src/auth.ts

SKILL.md Frontmatter Reference

FieldDescription
nameDisplay name (lowercase, hyphens, max 64 chars)
descriptionWhat it does — Claude uses this to auto-invoke
argument-hintAutocomplete hint, e.g. [issue-number]
disable-model-invocationtrue to prevent Claude auto-invoking (manual / only)
user-invocablefalse to hide from / menu (background knowledge)
allowed-toolsSpace-separated tools Claude can use without asking
modelSpecific model override
effortlow, medium, high, max
contextfork to run in isolated subagent
pathsGlob patterns limiting when skill activates

Dynamic Variables

Use these in your SKILL.md:

  • $ARGUMENTS — all arguments passed
  • $0, $1, $N — specific argument by index
  • ${CLAUDE_SESSION_ID} — current session ID
  • ${CLAUDE_SKILL_DIR} — skill’s directory path

Dynamic Context with Shell Commands

Prefix a shell command with ! to inject live data before Claude processes:

---
name: pr-summary
context: fork
allowed-tools: Bash(gh *)
---
 
## PR Context
- Diff: !`gh pr diff`
- Comments: !`gh pr view --comments`
 
Summarize this PR.

Invocation Control

ConfigYou invokeClaude invokesUse case
DefaultYesYesGeneral utilities
disable-model-invocation: trueYesNo/deploy, /commit (side effects)
user-invocable: falseNoYesBackground knowledge

Top Skills

Popular skills worth trying:

SkillPurpose
SuperpowersTDD methodology, atomic tasks, test-driven approach
Frontend Design (official)UI/UX design quality and best practices
RemotionAnimations, timing, audio, captions, 3D content

Installing Skills from Marketplace

/plugin install <skill-name>

Bundled Skills

Claude Code ships with these built-in:

  • /simplify — review and improve code quality
  • /batch — plan and execute large-scale changes
  • /loop — run commands on recurring intervals
  • /claude-api — build and debug Claude API apps

Skills vs Plugins

  • Skills — single-purpose command, simple SKILL.md, no namespace, quick to create
  • Plugins — complete packages bundling skills, hooks, MCP/LSP servers, agents; namespaced (/plugin:skill), shareable via marketplace