Skills โ Teach Claude New Tricks
Skills are reusable instruction sets that give Claude specialized abilities. Think of them as recipe cards โ write the instructions once, and Claude follows them every time you ask.
What Are Skills?
In the last module, you learned about CLAUDE.md โ a file that tells Claude how to behave in your project. Skills take that idea further. A skill is a reusable set of instructions that Claude can follow on demand, like a recipe card you hand to a chef.
Instead of typing the same complex instructions over and over, you write them once in a special file called SKILL.md. Then you trigger that skill whenever you need it โ by typing a simple slash command like /fix-issue or /explain-code.
Think of it like this: CLAUDE.md is the employee handbook that applies to everything. Skills are specialized training manuals for specific tasks.
Skills are SKILL.md files stored in a specific folder. Each file contains instructions, allowed tools, and optional parameters. When you invoke a skill with a slash command, Claude reads that file and follows its instructions exactly. You can have as many skills as you want.
Personal vs Project Skills
Skills live in one of two places, depending on who should use them:
Personal skills are yours alone. They live in your home directory and follow you across every project:
~/.claude/skills/fix-issue/SKILL.md
~/.claude/skills/explain-code/SKILL.md
~/.claude/skills/morning-report/SKILL.md
Project skills are shared with your team. They live inside the project folder and get committed to version control:
.claude/skills/deploy/SKILL.md
.claude/skills/review-pr/SKILL.md
.claude/skills/generate-docs/SKILL.md
The rule is simple: if itโs useful for you personally (like your preferred writing style or your morning routine), make it a personal skill. If itโs useful for the project (like how to deploy or review code), make it a project skill.
Personal skills are great for things like โsummarize this in my writing styleโ or โgenerate a LinkedIn post.โ Project skills are great for team workflows like โrun the test suite and explain any failures.โ
Anatomy of a SKILL.md File
Every SKILL.md file has two parts: frontmatter (metadata at the top) and instructions (the actual recipe).
Hereโs what a real SKILL.md looks like:
Letโs break down the frontmatter fields:
- name โ The slash command name. This becomes
/explain-code. - description โ A short summary that appears when you list available skills.
- allowed-tools โ Which tools Claude can use when running this skill. This is a safety guardrail.
- disable-model-invocation (optional) โ If set to
true, the skill can only use tools, not generate text. Useful for pure automation tasks.
The allowed-tools field is your safety net. If a skill should only read files and never modify them, set it to Read only. Claude will follow this restriction.
Using $ARGUMENTS
Skills become truly powerful when you add parameters. The special $ARGUMENTS placeholder lets you pass information to a skill when you invoke it.
Hereโs a skill that fixes GitHub issues:
Now you can use it like this:
> /fix-issue 42
Claude reads the SKILL.md, replaces $ARGUMENTS with 42, and follows the instructions. It fetches issue #42 from GitHub, reads the code, implements the fix, runs tests, and commits โ all from one command.
/fix-issue 42
Real Examples
Here are skills that real people use every day. You can copy any of these and customize them:
/explain-code src/components/PaymentForm.tsx
/morning-report
/generate-docs src/utils/helpers.js
/security-review src/auth/
Skills are composable. A skill can reference other skills, call external tools, fetch web pages, run commands, and modify files. The allowed-tools field is the only boundary. Think of each skill as a mini-agent with a specific job.
Creating Your First Skill
Letโs walk through creating a skill from scratch. Say you want a skill that explains any error message in plain English and suggests a fix.
$ mkdir -p ~/.claude/skills/explain-error $ nano ~/.claude/skills/explain-error/SKILL.md
Then write:
Now you can use it immediately:
/explain-error "ECONNREFUSED 127.0.0.1:3000"
Skill names must be lowercase with hyphens (like fix-issue, not Fix Issue). The folder name and the name field in frontmatter should match.
You can also ask Claude to create skills for you! Just say โCreate a skill called /weekly-summary that generates a summary of all commits from the past week.โ Claude will create the folder and SKILL.md file automatically.
Try It Yourself
Create a Personal Skill
- Open your terminal and create the skill folder:
mkdir -p ~/.claude/skills/eli5/ - Create a file called
SKILL.mdinside that folder - Write a skill that explains any concept โlike Iโm 5 years oldโ โ use the frontmatter format shown above
- Set
allowed-toolstoRead, WebSearchso Claude can look things up - Use
$ARGUMENTSso you can pass in the topic:/eli5 quantum computing - Test it by opening Claude Code and typing
/eli5 how does WiFi work
Create a Project Skill
- Navigate to any project folder (or create a new one:
mkdir ~/test-project && cd ~/test-project) - Run
claudeto start a session - Ask Claude: โCreate a project skill called /summarize-changes that reads the git log from the last 7 days and writes a plain-English summary of what changed, organized by category (features, fixes, docs). Save it as a project skill.โ
- Verify the file was created at
.claude/skills/summarize-changes/SKILL.md - Test it by typing
/summarize-changes