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:
| Level | Path | Scope |
|---|---|---|
| Personal | ~/.claude/skills/<name>/SKILL.md | All your projects |
| Project | .claude/skills/<name>/SKILL.md | Current project |
| Plugin | <plugin>/skills/<name>/SKILL.md | Where enabled |
Creating a Skill
mkdir -p ~/.claude/skills/code-reviewWrite 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
| Field | Description |
|---|---|
name | Display name (lowercase, hyphens, max 64 chars) |
description | What it does — Claude uses this to auto-invoke |
argument-hint | Autocomplete hint, e.g. [issue-number] |
disable-model-invocation | true to prevent Claude auto-invoking (manual / only) |
user-invocable | false to hide from / menu (background knowledge) |
allowed-tools | Space-separated tools Claude can use without asking |
model | Specific model override |
effort | low, medium, high, max |
context | fork to run in isolated subagent |
paths | Glob 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
| Config | You invoke | Claude invokes | Use case |
|---|---|---|---|
| Default | Yes | Yes | General utilities |
disable-model-invocation: true | Yes | No | /deploy, /commit (side effects) |
user-invocable: false | No | Yes | Background knowledge |
Top Skills
Popular skills worth trying:
| Skill | Purpose |
|---|---|
| Superpowers | TDD methodology, atomic tasks, test-driven approach |
| Frontend Design (official) | UI/UX design quality and best practices |
| Remotion | Animations, 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