If you have spent any time working with AI coding agents, you have probably hit the same wall: the same instructions, conventions, and checklists get pasted into prompt after prompt. Your "how we deploy" paragraph lives in a CLAUDE.md file, a Notion page, and the back of your head, and the agent still forgets the third step half the time. Claude Skills exist to fix exactly that.
A Skill is reusable, filesystem-based expertise. You teach Claude a workflow once, store it as a folder, and Claude pulls it in automatically when the context matches. It turns a general-purpose agent into a specialist for your domain without bloating every prompt or stuffing your project rules to the breaking point. Anthropic announced Agent Skills on October 16, 2025, and later published the format as an open standard that other tools can adopt.
What a Skill actually is
A Skill is a directory with a SKILL.md file at its root. That file has two parts: YAML frontmatter that tells Claude when to use the Skill, and a markdown body that tells Claude how to do the work. Alongside it you can bundle anything else the task needs: reference documents, templates, datasets, or executable scripts.
deploy-tool/
├── SKILL.md # metadata + main instructions
├── reference.md # detailed steps, loaded only when needed
└── scripts/
└── verify.sh # executed via bash, never loaded into context
The frontmatter is small but load-bearing. Two fields are required:
| Field | Rules | Purpose |
|---|---|---|
name | Lowercase letters, numbers, hyphens; max 64 chars; no "claude"/"anthropic" | Identifies the Skill |
description | Non-empty; max 1024 chars; third person | How Claude decides to trigger it |
The description is the most important line you will write. It should say both what the Skill does and when to use it, because Claude relies on it to pick the right Skill from potentially dozens that are installed.
Why this beats stuffing instructions into prompts
The naive alternative is to paste everything into your system prompt or your project rules file. That works until it doesn't. Every token you add competes with conversation history, other instructions, and the actual task. Worse, the agent carries that weight on every request, even when 90% of it is irrelevant to what you are doing right now.
Skills solve this with progressive disclosure — Claude loads information in stages instead of all at once:
| Level | When it loads | Token cost |
|---|---|---|
Metadata (name + description) | Always, at startup | ~100 tokens per Skill |
| SKILL.md body | When the Skill is triggered | Under ~5k tokens |
| Bundled files and scripts | Only when referenced | Effectively unlimited |
Because only the metadata is pre-loaded, you can install many Skills with almost no context penalty. Claude just knows each one exists and when to reach for it. When a task matches, it reads the body via bash; if that body points to a reference.md or runs a verify.sh, those load only at the moment they are needed. A script's output enters the context, but its source code never does, which makes deterministic operations both reliable and cheap.
That is the real argument for Skills over giant prompts. You move workflow logic out of oversized instructions and into versioned, inspectable units that you can review in a pull request, diff over time, and share with your team.
Where and who can use them
Skills are available across Claude's products, but the details differ by surface:
- claude.ai supports both Anthropic's pre-built document Skills (PowerPoint, Excel, Word, PDF) and custom Skills. You upload custom Skills as zip files under Settings on Pro, Max, Team, and Enterprise plans with code execution enabled. They are per-user and not centrally managed.
- The Claude API supports both kinds. You reference a
skill_idin the code execution container, or upload your own through the/v1/skillsendpoints, where they are shared workspace-wide. (The API path currently runs behind beta headers, so check the current docs before wiring it into production.) - Claude Code supports custom, filesystem-based Skills only — no API upload required. This is where Skills feel most natural for engineering teams.
One important caveat: custom Skills do not sync across surfaces. A Skill you upload to claude.ai is not available through the API, and Claude Code Skills are separate from both. You manage each surface independently.
How to author one
In Claude Code, where a Skill lives determines who can use it:
| Location | Path | Scope |
|---|---|---|
| Personal | ~/.claude/skills/<name>/SKILL.md | All your projects |
| Project | .claude/skills/<name>/SKILL.md | This repo only |
| Plugin | <plugin>/skills/<name>/SKILL.md | Wherever the plugin is enabled |
Here is a complete, minimal Skill that summarizes uncommitted changes:
---
description: Summarizes uncommitted changes and flags anything risky.
Use when the user asks what changed, wants a commit message, or asks
to review their diff.
---
## Current changes
!`git diff HEAD`
## Instructions
Summarize the changes above in two or three bullet points, then list
any risks such as missing error handling, hardcoded values, or tests
that need updating. If the diff is empty, say there are no uncommitted
changes.
That !`git diff HEAD` line is a Claude Code extension called dynamic context injection: Claude Code runs the command and inlines its output before Claude ever sees the Skill, so the instructions arrive grounded in your actual working tree.
Triggering works two ways. Ask something that matches the description ("what did I change?") and Claude loads the Skill automatically, or invoke it explicitly by typing /summarize-changes. In Claude Code, custom commands and Skills have merged, so the directory name becomes the slash command.
A few authoring rules from Anthropic's best-practices guide are worth internalizing:
- Be concise. Assume Claude is already smart; only add context it lacks. Keep the SKILL.md body under 500 lines and split overflow into separate files.
- Write the description in third person with specific trigger terms. "Processes Excel files and generates reports" beats "I can help with spreadsheets."
- Keep references one level deep. Link reference files directly from SKILL.md so Claude reads them completely instead of preview-skimming nested links.
- Match freedom to fragility. Give high-level guidance for open-ended tasks, exact scripts for fragile ones ("run exactly this command, do not add flags").
We use this pattern in this very codebase. InventiveHQ ships project Skills like /deploy-tool, /new-tool, and /new-blog that encode our multi-step deployment and scaffolding workflows. Instead of re-explaining the nine-step R2 bundle deploy every time, the procedure lives in one versioned file the whole team (and every Claude session) follows. If you want the agent to finish one of these workflows unattended, pair a Skill with the /goal command; if you are coordinating Claude across multiple CLIs, the same idea scales into an engineering-manager workflow.
A note on trust
Skills give Claude new capabilities through instructions and executable code, which is exactly why you should treat installing one like installing software. A malicious Skill can direct Claude to invoke tools or run code in ways that don't match its stated purpose. Use Skills only from sources you trust or built yourself, audit every bundled file, and be especially wary of Skills that pull content from external URLs.
The bottom line
Skills are the missing layer between a one-off prompt and a fully custom agent. They take the expertise you would otherwise repeat endlessly — your conventions, your workflows, your deployment steps — and turn it into versioned, inspectable, auto-triggering units that load only when relevant. For teams already leaning on AI coding tools (see our CLI best-practices guide), Skills are the cleanest way to make the agent consistently good at your work, not just work in general. Start with one Skill for a procedure you keep re-explaining, test it on a real task, and iterate from there.