TL;DR
SKILL.md file (YAML frontmatter + markdown instructions) plus optional scripts/, references/, and assets/ directories — you can build one in minutesIf you find yourself typing the same prompt across conversations — a weekly report format, a code review checklist, a data analysis pipeline — you've already felt the problem that skills solve. Agent Skills are folders of instructions that package repeated workflows, specialized knowledge, or new capabilities for your AI agent. Instead of copying and pasting lengthy prompts every session, you write them once as a skill and reuse them across every conversation.
But skills go far beyond "saved prompts." They're an open standard originally created by Anthropic and now governed as a cross-platform specification at agentskills.io.
On December 18, 2025, Anthropic released Agent Skills as an open standard, publishing the specification and SDK for any AI platform to adopt. This means a skill you build for Claude works identically in OpenAI Codex, Gemini CLI, GitHub Copilot, Cursor, VS Code, and over 20 other platforms that have adopted the standard.
The simplest way to think about it: MCP gives your agent access to external tools and data. Skills teach your agent what to do with those tools and data.
Skills flow into the agent as knowledge, MCP connects bidirectionally for external capabilities, and Subagents are dispatched from the agent. This visually reinforces the point: MCP gives your agent access to external tools and data. Skills teach your agent what to do with those tools and data.
Consider a content creator who publishes blog posts every week. Without skills, every conversation starts the same way:
Now multiply that across a team of five writers, each with their own slightly different version of those instructions. The output quality varies from session to session and person to person.
This approach has three fundamental issues:
Skills address all three problems:
Anthropic frames the context window as a public good — the more data you add, the more tokens you consume, the faster it fills, and the greater the risk of context degradation. Progressive disclosure is what makes skills fundamentally different from just pasting a big prompt. Skills are intentional about what information goes into the context window and what stays on disk until it's actually needed.
Every skill follows the same structure, defined by the Agent Skills Specification:
1my-skill/
2├── SKILL.md # Required — YAML frontmatter + markdown instructions
3├── scripts/ # Optional — executable code (Python, Bash, JS)
4├── references/ # Optional — additional documentation
5└── assets/ # Optional — templates, images, logos, data filesThis is the only required file. It has two parts:
1. YAML Frontmatter — metadata that tells the agent what this skill is and when to use it:
1---
2name: analyzing-marketing-campaign
3description: >-
4 Analyze weekly marketing campaign performance from CSV or BigQuery data.
5 Use when the user asks about campaign metrics, funnel analysis, ROAS,
6 or budget reallocation.
7---The name and description are the only two required fields. The name must be 1-64 characters, lowercase with hyphens, and should match the folder name. The description (up to 1,024 characters) is mission critical — it's how the agent detects when to activate the skill. Include trigger keywords and describe not just what the skill does, but when to use it.
Optional frontmatter fields include license, compatibility (environment requirements), metadata (arbitrary key-value pairs like author and version), and allowed-tools (pre-approved tool list for security-conscious environments).
2. Markdown Body — the actual instructions, as detailed as you need:
1# Weekly Campaign Analysis
2
3## Input Requirements
4- Campaign data with columns: date, campaign_name, impressions, clicks, conversions
5- Date range must be specified
6
7## Step 1: Data Quality Check
8- Verify no missing values in required columns
9- Flag any anomalies (CTR > 20%, negative values, etc.)
10
11## Step 2: Funnel Analysis
12Calculate against these benchmarks:
13| Metric | Benchmark |
14|--------|-----------|
15| CTR | 2.5% |
16| CVR | 3.0% |
17
18## Budget Reallocation
19Only when the user asks about budget reallocation, read:
20`references/budget_reallocation_rules.md`Notice that last line — the budget reallocation rules live in a separate file that only loads when the user asks about it. That is progressive disclosure in action. Instead of cramming everything into the context window upfront, the skill tells the agent where to find additional information and when to fetch it.
| Directory | Purpose | Examples |
|---|---|---|
scripts/ | Executable code loaded and run on demand | Python data analysis, Bash automation, JS utilities |
references/ | Additional documentation loaded when needed | Domain-specific rules, style guides, API docs |
assets/ | Templates, images, and data files | Output templates, logos, schema files, sample data |
Skills aren't limited to text — they can include scripts in Python, Bash, or JavaScript that the agent executes as part of the workflow. A PDF processing skill might include Python scripts for form extraction. A data analysis skill might include diagnostic scripts and visualization code. The agent loads and runs these only when the workflow requires it.
With so many technologies in the AI toolkit — MCP, skills, tools, subagents — understanding when to use what is essential. Here is how they all fit together:
The analogy from the course captures it perfectly: tools are the hammer, saw, and nails. Skills are the knowledge of how to build a bookshelf. The tools provide the raw capabilities (filesystem access, bash execution, API calls). Skills provide the procedural knowledge and domain expertise to use those tools in a specific, repeatable way.
| Component | Role | Best For |
|---|---|---|
| Prompts | Atomic unit of communication | One-off instructions |
| Tools | Low-level capabilities (bash, filesystem, APIs) | The building blocks that power everything |
| MCP | Connects agents to external systems and data | Database access, Google Drive, Slack, any external service |
| Skills | Packaged workflows with domain expertise | Repeatable tasks, team-wide processes, predictable output |
| Subagents | Isolated execution with own context window | Parallel tasks, specialized analysis, fine-grained permissions |
The real power emerges when you combine these components. Consider a workflow that chains three skills with an MCP server:
In this flow, the MCP server provides the connection to BigQuery. The marketing analysis skill defines how to analyze the data (benchmarks, formulas, allocation rules). The brand guidelines skill defines how things should look (colors, typography, logos). The built-in PowerPoint skill handles the document generation. Each skill loads only its own context, only when needed.
You can also dispatch subagents alongside skills. A main agent can spawn subagents — each with their own context window and specific skill access — to parallelize work. For instance, one subagent analyzes customer interviews while another processes survey data, both using the same "customer insights" skill but running in parallel. The parent agent collects and synthesizes their results.
| Scenario | Reach For |
|---|---|
| Need data from an external database or API | MCP |
| Need a repeatable, documented workflow | Skills |
| Need to teach the agent your company's specific process | Skills |
| Need parallel execution with isolated context | Subagents |
| Need real-time access to Google Drive / Slack / etc. | MCP |
| Need specialized analysis that shouldn't pollute main context | Subagents + Skills |
| Need a one-off quick task | Just a prompt |
Use skills for procedural, predictable workflows. Use subagents for full agentic logic only when necessary for specialized or parallel tasks. Use MCP for any external data or tooling. And remember — skills, subagents, and MCP are composable. The sweet spot is usually a combination of all three.
Anthropic ships several production-ready skills at github.com/anthropics/skills:
Document Skills (built into Claude AI, always active):
| Skill | What It Does |
|---|---|
| Excel | Create, edit, and analyze .xlsx spreadsheets with formatting and charts |
| PowerPoint | Generate presentations with custom layouts, colors, typography |
| Word | Create formatted .docx documents |
| Extract text, fill forms, merge PDFs, convert to images |
Example Skills (can be toggled on in Settings > Capabilities):
| Skill | What It Does |
|---|---|
| Skill Creator | Meta-skill that programmatically creates new skills following best practices |
| Code Review | Structured code review with configurable standards |
| Data Analysis | Statistical analysis workflows |
The skill-creator is particularly useful — it's a skill that creates skills. It includes Python scripts for initializing the folder structure, packaging into a zip, and validating against best practices. It is enabled by default and can save significant time when building new skills.
In Claude Code, you can install skills from the marketplace:
# Add the Anthropic skills marketplace
/plugins marketplace add anthropics/skills
# Verify installed skills
/skillsPartner-built skills from companies like Atlassian, Figma, Canva, Stripe, Notion, and Zapier are also available through the skills directory.
The best way to understand how all the pieces of a skill fit together is to look at a real-world example. Let's walk through the architecture of a Strapi Configuration Skill — a skill that scaffolds fully configured Strapi CMS projects with content types, seed data, public API access, and auto-populate middleware.
The goal here is not to recreate this skill step-by-step, but to understand the architectural decisions and moving parts so you can apply these patterns to your own skills. For the full source code, check out the repository.
1strapi-configuration/
2├── SKILL.md # Core instructions (480 lines)
3├── CLAUDE.md # Development context for contributors
4├── README.md # User-facing documentation
5├── scripts/ # Empty — reserved for future helpers
6├── references/ # Empty — reserved for future docs
7└── templates/ # Domain-specific data files
8 ├── blog.json # ~22KB preset definition
9 ├── ecommerce.json # ~23KB preset definition
10 ├── portfolio.json # ~25KB preset definition
11 └── restaurant.json # ~24KB preset definitionThis structure shows several important patterns:
Standard directories are present even when empty. The scripts/ and references/ directories exist as placeholders — they signal to other developers (and the agent) that the skill follows the standard layout and may grow into these directories.
Domain-specific directories are allowed. The templates/ directory isn't part of the standard spec (scripts/, references/, assets/ are), but skills can include any additional directories that make sense for the domain. Here, each JSON template is a ~23KB definition containing content types, components, middleware configs, seed data, and permission rules for a specific project type.
Progressive disclosure is baked into the architecture. Those four template files total ~94KB of data. None of it loads until the agent actually needs a specific template. When the user picks "blog," only blog.json enters the context — the other three templates stay on disk. That's ~70KB of tokens saved.
1---
2name: strapi-configuration
3description: >-
4 Create a fully configured Strapi project with preconfigured content types,
5 seed data, public API access, and route-based middleware for default
6 population. Use when the user wants to scaffold a new Strapi project for
7 a specific use case such as blog, e-commerce, portfolio, or restaurant.
8 Supports preset templates and custom project descriptions.
9compatibility: Requires Node.js and access to the strapi-core monorepo.
10allowed-tools: Bash Read Write Edit Glob Grep
11metadata:
12 author: strapi
13 version: "0.1.0"
14---Key decisions worth noting:
compatibility declares the runtime requirements upfront — the agent (and the user) knows this needs Node.js before it even startsallowed-tools explicitly declares which tools the skill will use. In security-conscious environments, this allows pre-authorization rather than prompting for each tool at runtimeThe body of this SKILL.md is structured as 9 sequential steps, each with clear entry/exit criteria. Here is the high-level flow:
Several patterns make this workflow reliable:
Explicit branching. Step 1 presents a selection menu and routes to either Step 2 (preset template) or Step 2b (custom generation). The branching is clearly marked — the agent never has to guess which path to follow.
Code templates, not descriptions. Rather than saying "create a controller," the skill provides the exact TypeScript code:
1import { factories } from '@strapi/strapi';
2
3export default factories.createCoreController('api::<name>.<name>');This eliminates guesswork and ensures the generated code actually works with the target framework. The skill includes templates for controllers, services, routes (with and without middleware), middleware files, component schemas, and the entire seed script.
Progressive file loading. Step 2 says "Read the template JSON file at templates/<preset>.json." It doesn't embed the template data in the SKILL.md — it tells the agent where to find it and what structure to expect:
1The template contains:
2- `contentTypes` - Collection types and single types (schemas)
3- `components` - Reusable component definitions
4- `middlewares` - Route-based populate middleware configs
5- `seedData` - Sample data entries for each content type
6- `publicPermissions` - Which API endpoints to make publicly accessibleThe custom path generates data dynamically. Step 2b is a mini-workflow within the workflow — it gathers requirements, designs a content model following patterns from existing templates, generates seed data, configures middleware, sets permissions, and optionally saves the result as a reusable template for next time. This demonstrates how skills can handle both deterministic paths (presets) and creative ones (custom generation) within the same workflow.
This skill includes two additional files that aren't part of the agent skills spec but demonstrate good practice:
CLAUDE.md captures development context — the directory structure, key conventions for the Strapi schema format, CLI testing commands, common pitfalls (like draftAndPublish needing to be nested inside options, not at the top level), and future improvements. This is valuable for both the agent when it needs to modify the skill and for human developers maintaining it.
README.md is user-facing documentation — installation instructions, quick start examples, usage for each preset, and what gets generated. It explains how to install the skill at project scope (<project>/.claude/skills/) or globally (~/.claude/skills/).
Looking at the architecture holistically, several design decisions stand out:
Here is the skill in action.
note: this is still work in progress, but once it is ready, I will share the repo here.
Based on the official specification, Anthropic's engineering blog, and patterns observed across production skills:
verb-ing + noun pattern: analyzing-marketing-campaign, generating-practice-questions. Don't use reserved keywords like "claude" or "anthropic." Max 64 charactersreferences/, scripts/, or assets/Think about how much freedom to give the agent:
| Scope | Location | Use Case |
|---|---|---|
| Project | <project>/.claude/skills/ | Team-specific workflows tied to a codebase |
| User | ~/.claude/skills/ | Personal skills available across all projects |
| Claude AI | Settings > Capabilities > Skills | Upload as zip, available in the web UI |
| Marketplace | anthropics/skills on GitHub | Community and official skills |
Agent Skills follow the same playbook Anthropic used with the Model Context Protocol: build a specification that solves a real interoperability problem, release it as an open standard, and let ecosystem adoption create network effects.
The platforms that have adopted the standard now include Claude, Claude Code, OpenAI Codex, Gemini CLI, GitHub Copilot, VS Code, Cursor, Roo Code, Amp, Goose, Mistral AI, Databricks, and many others — over 26 at last count. Partner-built skills from Atlassian, Figma, Canva, Stripe, Notion, and Zapier are available at launch.
The specification and reference library live at github.com/agentskills/agentskills. The reference library includes a validation tool you can use to check your skills against the spec:
skills-ref validate ./my-skill1. Create the folder:
mkdir -p .claude/skills/my-first-skill2. Create SKILL.md:
1---
2name: my-first-skill
3description: >-
4 Describe what your skill does and when to trigger it.
5 Include keywords that users are likely to say.
6---1# My First Skill
2
3## Steps
4
5### Step 1: [First thing to do]
6[Detailed instructions...]
7
8### Step 2: [Second thing to do]
9[Detailed instructions...]
10
11## Output Format
12[What the final result should look like]3. Test it by starting a new session and asking a question that matches your skill's description.
4. Iterate. Run it through the skill-creator for best-practice feedback, or validate it with the reference library. Refine based on actual usage.
Whether you're automating a weekly report, encoding your team's code review process, building a project scaffolding tool, or packaging brand guidelines for consistent design output — skills transform one-off prompts into durable, shareable, composable knowledge that works everywhere.
Citations