Skills are instruction bundles that tell the agent how to perform specific tasks. They are not executable code by default.
skill-name/
├── SKILL.md # Required: Instructions and metadata
├── scripts/ # Optional: Helper scripts
├── templates/ # Optional: Document templates
└── resources/ # Optional: Reference files
---
name: my-skill-name
description: A clear description of what this skill does.
---
# My Skill Name
Detailed description of the skill's purpose.
## When to Use This Skill
- Use case 1
- Use case 2
## Instructions
[Detailed instructions for the agent on how to execute this skill]
## Examples
[Real-world examples]
For skills that need to connect to external data sources, you can create an MCP server:
pip install fastmcp
server.py:
from fastmcp import FastMCP
mcp = FastMCP("My Server")
@mcp.tool()
def hello_world(name: str = "World") -> str:
"""A simple tool that says hello."""
return f"Hello, {name}!"
if __name__ == "__main__":
mcp.run()
As the ecosystem grows, consistent quality helps agents discover and use skills reliably. The following references and criteria keep the bar high.
From Andrej's post:
"The models make wrong assumptions on your behalf and just run along with them without checking. They don't manage their confusion, don't seek clarifications, don't surface inconsistencies, don't present tradeoffs, don't push back when they should."
"They really like to overcomplicate code and APIs, bloat abstractions, don't clean up dead code... implement a bloated construction over 1000 lines when 100 would do."
"They still sometimes change/remove comments and code they don't sufficiently understand as side effects, even if orthogonal to the task."
| Area | Guideline |
|---|---|
| Description | Write in third person. State what the skill does and when to use it. Use specific keywords agents can match on (e.g., "PostgreSQL migration" not "database stuff"). |
| Progressive disclosure | Keep top-level metadata under ~100 tokens. Skill body should stay below 500 lines. Load resources (large docs, schemas) on demand, not inline. |
| No absolute paths | Never hard-code machine-specific paths like /Users/alice/. Use relative paths or well-known variables ($HOME, $PROJECT_ROOT). |
| Scoped tools | Request only the tools the skill actually needs. Avoid blanket "tools": ["*"]. Declare tool dependencies explicitly. |
Four principles in one file that directly address these issues:
| Principle | Addresses |
|---|---|
| Think Before Coding | Wrong assumptions, hidden confusion, missing tradeoffs |
| Simplicity First | Overcomplication, bloated abstractions |
| Surgical Changes | Orthogonal edits, touching code you shouldn't |
| Goal-Driven Execution | Leverage through tests-first, verifiable success criteria |
SKILL.md file with a name and description at the top.github/skills/ or .claude/skills/ folderFull guide: How to create custom skills
Last modified 07 May 2026