SKILL.md is usually a documentation/instruction file for an AI agent or coding tool.
Think of it as:
“Here is how you should perform this particular type of task.”
Example
Suppose a project has:
skills/
├── testing/
│ └── SKILL.md
├── database/
│ └── SKILL.md
└── frontend/
└── SKILL.mdThe testing/SKILL.md might contain instructions such as:
# Testing Skill
When adding a feature:
1. Write tests first.
2. Run the existing tests.
3. Implement the feature.
4. Run the tests again.
5. Add a regression test for fixed bugs.An AI coding agent can read that file when it needs to perform testing-related work.
Why SKILL.md?
It lets you teach an agent a reusable workflow without putting all the instructions into every prompt.
For example:
Your project
│
├── source code
├── tests
└── skills/
├── testing/SKILL.md
├── frontend/SKILL.md
└── api/SKILL.mdThen you can tell the agent:
“Use the testing skill and add tests for this feature.”
The agent reads the relevant SKILL.md and follows its instructions.
SKILL.md vs README.md
They’re different in purpose:
README.md
Explains the project to humans.
What is this project?
How do I install it?
How do I run it?
What does it do?SKILL.md
Gives instructions/workflows to an agent for performing a specific kind of task.
When doing X:
1. Do A
2. Check B
3. Run C
4. Follow these rulesSo a useful mental model is:
README.md → "Understand this project"
SKILL.md → "Here's how to perform this kind of work"The exact behavior depends on the agent/tool that uses the SKILL.md convention; SKILL.md itself isn’t a programming language or a special file type built into Git.
It must have name and description.
A SKILL.md can describe or point to templates and scripts, but they are usually separate files.
For example:
my-skill/
├── SKILL.md
├── templates/
│ ├── component.tsx
│ └── test.ts
└── scripts/
├── setup.sh
└── validate.pySKILL.md
The skill instructions might say:
# Frontend Skill
When creating a new component:
1. Use the template in `templates/component.tsx`.
2. Add a test using `templates/test.ts`.
3. Run `scripts/validate.py`.So you can think of it as:
SKILL.md
│
├── instructions
│
├── → templates/
│ └── reusable starting files
│
└── → scripts/
└── executable automationWhy use them together?
It makes a skill more powerful and consistent.
Instead of telling the agent:
“Create a React component with these 20 rules.”
you can give it a template that already follows the rules.
And instead of telling it to manually perform repetitive checks, you can give it a script:
./scripts/validate.shSo:
-
SKILL.md→ tells the agent what to do and how -
Templates → give it reusable starting material
-
Scripts → let it automate actions/checks
The important point is that SKILL.md itself doesn’t automatically contain templates or scripts. The skill can include them as supporting resources, depending on the agent/tool’s skill system.
We can even have a skill for making skills.