Building Skills for Claude: Step-by-Step Tutorial With Real
By Dorian Laurenceau
š Last reviewed: April 24, 2026. Updated with April 2026 findings and community feedback.
Building Skills for Claude: The Complete Guide to Modular AI Expertise
š Last Updated: February 13, 2026, Covers Claude Skills as available in Claude.ai, Claude Code, and the Anthropic API.
š Related: Claude Opus 4.6 Guide | Claude Code Agent Skills | MCP Protocol Explained | AI Agents ReAct Explained
- āThe Paradigm Shift
- āSkill Architecture
- āCore Principles
- āBuilding Your First Skill
- āAdvanced Patterns
- āSkills + MCP Integration
- āDeployment & Production
- āReal-World Examples
- āFAQ
- āPre-Built Skills
- āThe Skill Creator
- āSkills API
- āDistribution & Sharing
- āTroubleshooting
- āKey Takeaways
What Are Claude Skills?
Claude Skills are modular, self-contained packages that enhance Claude's capabilities by providing specialized knowledge, workflows, and executable scripts. Released on January 29, 2026 in a comprehensive 32-page guide by Anthropic, Skills transform Claude from a general-purpose assistant into a specialized agent equipped with procedural knowledge.
Before vs. After Skills
Before Skills (traditional approach):
System prompt: "You are an assistant that helps with brand writing.
Always use our brand voice: professional yet approachable...
[500 lines of brand guidelines]
[200 lines of formatting rules]
[300 lines of examples]"
Problems: Token-heavy, loaded for every conversation, hard to maintain, easy to conflict.
After Skills:
š brand-writing/
āāā SKILL.md ā "Apply brand guidelines to any document"
āāā scripts/
ā āāā check_tone.py ā Automated brand voice checker
āāā references/
āāā brand_guide.md
āāā examples.md
Benefits: Loaded only when needed, organizated, testable, shareable, maintainable.
Claude Skills in practice: what teams are actually shipping
Claude Skills landed as a genuine shift in how to package repeatable Claude workflows, and the discussion on r/ClaudeAI, r/ChatGPTCoding, r/LocalLLaMA, and r/ExperiencedDevs has already mapped the practical contours. Here's what's emerged.
What Skills genuinely solve:
- āProcedure reuse. Putting a tested recipe into a SKILL.md beats copy-pasting prompts across chats.
- āScoped context loading. Loading only the reference files needed for a task keeps context windows under control. Prompt caching amplifies the win.
- āTeam standardisation. Shared skills turn tribal knowledge into version-controlled assets. This is the Git-for-prompts moment most teams have been waiting for.
- āTestability. A skill can be tested the way code is tested. promptfoo, Braintrust, and Langfuse all support skill-style evaluation.
What the community flags as real gotchas:
- āSkills are not magic. A badly written skill is a badly written prompt with extra ceremony. Discipline in writing still matters.
- āDiscovery is underrated. If Claude doesn't know which skill to invoke, the skill is dead weight. Clear names, clear descriptions, explicit invocation triggers.
- āVersioning discipline. Skills drift. Without versioning, teams end up debugging "which skill did that" weeks later.
- āOver-abstraction hurts. Some teams build skill frameworks before they have five working skills. Build the skills first, extract patterns later.
- āSecurity and prompt injection. Skills that load external references are an injection surface. The OWASP LLM Top 10 covers the baseline.
What practitioners actually do:
- āStart with 3-5 high-value skills. Pick the repeatable tasks that are already prompt-stable; convert those first.
- āTreat SKILL.md like a README. If a teammate can't read it and understand when to use it, it needs a rewrite.
- āVersion-control alongside code. Skills live in the repo; they follow the same review process as the code they support.
- āInstrument invocations. Log when skills are used and what outputs they produce. LangSmith and Helicone make this tractable.
- āGraduate skills to sub-agents when the workflow needs tool access beyond plain prompting.
The honest framing: Skills are a real primitive, not a magic layer. Teams that treat them like code (reviewed, versioned, tested, instrumented) get compounding returns. Teams that treat them like prompt-sugar get the same problems they had before, just with more ceremony. Invest in the discipline around Skills; that's where the value compounds.
The Paradigm Shift: From Prompts to Procedures
Skills represent a fundamental shift in how we think about AI customization:
| Aspect | Traditional Prompts | Claude Skills |
|---|---|---|
| Structure | Flat text | Organized folder |
| Loading | Always loaded | On-demand |
| Code | No execution | Scripts included |
| Sharing | Copy-paste | Share folder |
| Versioning | Manual | Git-friendly |
| Testing | Ad-hoc | Systematic |
| Composability | Difficult | Built-in |
Skill Architecture
The Folder Structure
Every skill follows the same organizational pattern:
š my-skill/
āāā SKILL.md ā Required: Core instructions + metadata
āāā scripts/ ā Optional: Executable code
ā āāā process_data.py
ā āāā validate.sh
āāā references/ ā Optional: Loaded on-demand docs
ā āāā api_docs.md
ā āāā style_guide.md
āāā templates/ ā Optional: Output templates
ā āāā report_template.md
āāā assets/ ā Optional: Icons, images, etc.
āāā icon.png
The SKILL.md File
The SKILL.md file is the heart of every skill. It uses YAML frontmatter for metadata and Markdown for instructions:
---
name: Brand Voice Checker
description: |
Apply our brand voice guidelines to any document.
Use this skill when the user asks to review, write, or edit
content for brand consistency.
---
# Brand Voice Checker
## Instructions
When the user provides content for brand review:
1. Read the document carefully
2. Run `scripts/check_tone.py` on the content
3. Load `references/brand_guide.md` for current guidelines
4. Identify any deviations from brand voice
5. Provide specific corrections with before/after examples
6. Summarize the overall brand alignment score
## Rules
- Never change the core message or meaning
- Preserve technical accuracy
- Flag ambiguous cases rather than auto-correcting
- Always explain WHY a change improves brand alignment
Component Breakdown
Core Principles
1. Progressive Disclosure
How it works:
- āClaude scans skill descriptions (YAML frontmatter) to find relevant skills
- āWhen user intent matches a skill description, the full SKILL.md is loaded
- āDuring execution, references are loaded only when explicitly needed
- āScripts execute only when called
This means a project with 20 skills doesn't waste tokens loading all 20, only the relevant one(s) activate.
2. Modularity & Composability
Skills are designed to work together:
User: "Create a quarterly report for Q4 with brand formatting
and send it to the leadership team"
Claude activates:
1. š data-analysis skill ā Pulls and analyzes Q4 metrics
2. š brand-writing skill ā Applies brand voice
3. š report-template skill ā Formats as quarterly report
4. āļø email-composer skill ā Drafts email to leadership
Claude automatically identifies and sequences the skills needed, coordinating their execution.
3. Determinism Through Scripts
Skills can include executable scripts for tasks that need 100% reliability:
# scripts/format_currency.py
"""Format numbers as USD currency strings."""
import sys
def format_currency(amount):
"""Returns a properly formatted USD string."""
return f"${amount:,.2f}"
if __name__ == "__main__":
amount = float(sys.argv[1])
print(format_currency(amount))
Instead of Claude "guessing" the format, the script provides deterministic, reliable output.
4. Portability
The same skill works across all Claude environments:
- āClaude.ai, Add the skill folder to a Project
- āClaude Code, Place in
.claude/skills/directory - āAnthropic API, Reference in the system message
Building Your First Skill
Step 1: Define the Use Case
Before writing code, answer these questions:
- āWhat specific task does this skill perform?
- āWhen should Claude activate it? (trigger conditions)
- āWhat inputs does it need from the user?
- āWhat outputs should it produce?
- āAre there deterministic steps that should use scripts?
Step 2: Create the Folder Structure
mkdir -p meeting-summarizer/scripts meeting-summarizer/references
Step 3: Write the SKILL.md
---
name: Meeting Summarizer
description: |
Summarize meeting transcripts into structured action items,
decisions, and follow-ups. Use when the user provides a
meeting transcript, recording summary, or meeting notes.
---
# Meeting Summarizer
## Process
1. **Parse the transcript** ā Identify speakers, timestamps, topics
2. Run `scripts/extract_topics.py` to identify main discussion areas
3. For each topic, extract:
- Key points discussed
- Decisions made (with who made them)
- Action items (with owners and deadlines)
- Open questions
4. Format output using the template in `references/summary_template.md`
5. Highlight any action items without clear owners
## Output Format
Always produce:
- Executive summary (2-3 sentences)
- Decisions list (numbered)
- Action items table (who / what / when)
- Open questions list
- Next meeting suggestions
## Constraints
- Never invent information not in the transcript
- Flag unclear speaker attribution
- If deadlines are mentioned ambiguously, note the ambiguity
Step 4: Add Scripts (Optional)
# scripts/extract_topics.py
"""Extract main topics from a meeting transcript."""
import sys
import re
def extract_topics(transcript):
"""Identify topic transitions in meeting text."""
# Simple topic detection by paragraph breaks and keywords
topics = []
paragraphs = transcript.split('\n\n')
for p in paragraphs:
if any(keyword in p.lower() for keyword in
['next topic', 'moving on', 'let\'s discuss',
'agenda item', 'regarding']):
topics.append(p.strip()[:100])
return topics
if __name__ == "__main__":
transcript = sys.stdin.read()
topics = extract_topics(transcript)
for i, topic in enumerate(topics, 1):
print(f"{i}. {topic}")
Step 5: Add References (Optional)
<!-- references/summary_template.md -->
# Meeting Summary: [TITLE]
**Date:** [DATE] | **Duration:** [DURATION] | **Attendees:** [LIST]
## Executive Summary
[2-3 sentence overview]
## Decisions Made
1. [Decision] ā Decided by [WHO]
## Action Items
| Owner | Task | Deadline | Status |
|-------|------|----------|--------|
| [Name] | [Task description] | [Date] | Pending |
## Open Questions
- [Question requiring follow-up]
## Next Steps
- [Suggested follow-up actions]
Step 6: Test Your Skill
Testing is critical. Verify:
- āTrigger accuracy, Does the skill activate for correct requests?
- āNo false triggers, Does it stay inactive for unrelated requests?
- āNo hallucinations, Does Claude follow the instructions exactly?
- āScript execution, Do scripts run correctly?
- āEdge cases, What happens with incomplete or unusual input?
Advanced Patterns
Pattern 1: Multi-Step Workflow Skills
For complex workflows with multiple phases:
---
name: Code Review Assistant
description: |
Perform a comprehensive code review following our team's
standards. Use when the user asks for a code review,
PR review, or code quality check.
---
# Code Review Assistant
## Phase 1: Static Analysis
1. Run `scripts/lint_check.sh` on the provided code
2. Identify syntax errors, style violations, and common bugs
## Phase 2: Logic Review
1. Analyze the code's logical flow
2. Identify potential edge cases not handled
3. Check for security vulnerabilities
## Phase 3: Architecture Review
1. Load `references/architecture_standards.md`
2. Evaluate naming conventions, code organization
3. Check for SOLID principle violations
## Phase 4: Report Generation
1. Combine findings from all phases
2. Prioritize by severity (Critical > High > Medium > Low)
3. Provide specific fix suggestions for each finding
Pattern 2: State Management Skills
For skills that need to track progress across interactions:
## State Tracking
After each interaction, update the status file:
scripts/update_status.py --task "[TASK_ID]" --status "[STATUS]"
Always check current state before proceeding:
scripts/get_status.py --task "[TASK_ID]"
Pattern 3: Error Handling Skills
## Error Handling
If any script fails:
1. Log the error: `scripts/log_error.py --error "[MESSAGE]"`
2. Inform the user of what went wrong
3. Suggest alternative approaches
4. Never proceed with partial or assumed data
Pattern 4: Composable Skills with Dependencies
---
name: Quarterly Report Generator
description: Generate quarterly business reports.
dependencies:
- data-analysis
- brand-writing
- chart-generator
---
## Step 1: Data Collection
Activate the `data-analysis` skill to process raw metrics.
## Step 2: Visualization
Use the `chart-generator` skill to create charts.
## Step 3: Writing
Apply the `brand-writing` skill to the final report text.
Skills + MCP Integration
How Skills and MCP Complement Each Other
| Capability | MCP (Model Context Protocol) | Claude Skills |
|---|---|---|
| Role | Provides external connections | Provides procedural knowledge |
| Database | Queries, reads, writes | Decides when/what to query, processes results |
| APIs | HTTP calls, authentication | Knows which API to call, formats requests |
| File System | Read/write files | Determines which files to process, generates output |
| Composability | Plug-and-play tools | Orchestrates tools into workflows |
Example: Customer Support Skill with MCP
---
name: Customer Issue Resolver
description: |
Handle customer support tickets by looking up account info,
checking order status, and drafting responses.
---
# Customer Issue Resolver
## Process
1. Extract customer ID from the ticket
2. **[MCP: database]** Query customer account:
`SELECT * FROM customers WHERE id = {customer_id}`
3. **[MCP: api]** Check order status:
`GET /api/orders?customer={customer_id}&status=active`
4. Analyze the issue against `references/common_issues.md`
5. Draft a response using `references/response_templates.md`
6. **[MCP: email]** Send the drafted response to the customer
Deployment & Production
Claude.ai (Projects)
- āCreate a new Project in Claude.ai
- āUpload the skill folder to the Project's knowledge base
- āThe skill will automatically activate when matching conversations occur
Claude Code
- āPlace the skill folder in
.claude/skills/in your project - āClaude Code will discover and use skills automatically
- āScripts execute directly in your development environment
Anthropic API
import anthropic
client = anthropic.Anthropic()
# Load skill content
with open('my-skill/SKILL.md', 'r') as f:
skill_content = f.read()
response = client.messages.create(
model="claude-opus-4-6",
max_tokens=4096,
system=f"""You have the following skill available:
{skill_content}
Activate this skill when the user's request matches
the skill description. Follow the instructions exactly.""",
messages=[
{"role": "user", "content": "Please review this code..."}
]
)
Production Best Practices
- āVersion control your skills, Treat them like code, use Git
- āWrite tests, Create test cases for trigger accuracy and output quality
- āMonitor activation, Log when skills fire to catch false triggers
- āIterate based on feedback, Continuously refine instructions
- āSecurity review scripts, Audit all executable code
- āDocument dependencies, Note which MCP tools or external services a skill requires
Real-World Examples
Example 1: Brand Document Formatter
Automatically apply brand guidelines to any document:
- āScript checks tone, voice, and terminology
- āReference file contains current brand guidelines
- āTemplate formats output as branded PDF-ready Markdown
Example 2: Git PR Reviewer
Automate code review for pull requests:
- āScript runs linting and static analysis
- āReference contains team coding standards
- āProduces structured review with severity levels and fix suggestions
Example 3: Data Pipeline Monitor
Monitor and troubleshoot data pipelines:
- āScript queries pipeline metrics via MCP
- āReference contains SLA definitions
- āAuto-generates incident reports for failures
Pre-Built Skills
Anthropic provides several pre-built document skills available out of the box on Pro, Max, Team, and Enterprise plans:
| Pre-Built Skill | What It Does | Available On |
|---|---|---|
| Excel Creator | Generates and edits .xlsx spreadsheets | Pro, Max, Team, Enterprise |
| PowerPoint Builder | Creates .pptx presentations with layouts | Pro, Max, Team, Enterprise |
| Word Document Editor | Generates and modifies .docx files | Pro, Max, Team, Enterprise |
| PDF Form Filler | Extracts form fields and fills PDF forms | Pro, Max, Team, Enterprise |
These skills use the Code Execution Tool internally, for example, the PDF skill runs a small Python script to extract form field definitions, then Claude fills them based on user instructions.
The Skill Creator (Meta-Skill)
Anthropic provides a "skill-creator" skill, a meta-skill specifically designed to help you build new skills.
How It Works
- āDescribe what you want your skill to do
- āThe skill-creator guides you through structuring the SKILL.md
- āIt suggests folder layout, trigger descriptions, and instruction patterns
- āIt helps you test trigger behavior with example user requests
- āIt iterates on the skill with you until trigger accuracy is high
What the Skill Creator Checks
- āTrigger description quality, Is the description specific enough to activate correctly?
- āInstruction clarity, Will Claude follow the steps without ambiguity?
- āHallucination risk, Are there gaps where Claude might invent steps not in the skill?
- āComposability, Does the skill work well alongside other skills?
Skills API, /v1/skills Endpoint
For programmatic skill management, Anthropic provides a REST API endpoint:
import requests
# Create a new skill
response = requests.post(
"https://api.anthropic.com/v1/skills",
headers={
"x-api-key": "your-api-key",
"anthropic-version": "2026-01-29"
},
json={
"name": "data-analyzer",
"description": "Analyze CSV datasets and produce summary reports",
"content": open("SKILL.md").read(),
"version": "1.0.0"
}
)
# List available skills
skills = requests.get(
"https://api.anthropic.com/v1/skills",
headers={...}
)
# Upgrade a skill version
response = requests.put(
"https://api.anthropic.com/v1/skills/data-analyzer",
headers={...},
json={
"content": open("SKILL_v2.md").read(),
"version": "2.0.0"
}
)
The API supports:
- āCreate, Upload new skills
- āList, View all available skills
- āRead, Get a skill's current content and metadata
- āUpdate, Upgrade skill versions
- āDelete, Remove skills
Distribution & Sharing
Skills are designed to be portable and shareable:
Sharing Methods
| Method | Best For | How |
|---|---|---|
| Git repository | Teams, open-source | Push skill folder to Git; clone to use |
| ZIP archive | Quick sharing | Zip the folder; import into Claude.ai Project |
| API upload | CI/CD pipelines | Use /v1/skills endpoint to deploy programmatically |
| npm/pip package | Developer ecosystem | Package skills with existing tooling |
Versioning Strategy
my-skill/
āāā SKILL.md ā Current version
āāā CHANGELOG.md ā Version history
āāā package.json ā Version metadata (optional)
āāā ...
Best practices:
- āUse semantic versioning (1.0.0, 1.1.0, 2.0.0) for skill iterations
- āKeep a CHANGELOG.md documenting what changed between versions
- āTest trigger accuracy after every update, even small wording changes can affect activation
Troubleshooting
Common Issues & Solutions
| Problem | Cause | Solution |
|---|---|---|
| Skill doesn't activate | Description doesn't match user intent | Rewrite the YAML description with more trigger phrases |
| Skill activates for wrong requests | Description is too broad | Make the description more specific; add exclusion notes |
| Claude invents steps not in the skill | Instructions have gaps or ambiguity | Fill in the gaps; be explicit about what Claude should NOT do |
| Script fails silently | No error handling in script | Add try/except and print error messages for Claude to read |
| Skill loads but produces wrong output | References not loaded or outdated | Explicitly reference file paths in instructions; update references |
| Multiple skills conflict | Overlapping descriptions | Differentiate descriptions; add priority hints |
Debugging Checklist
- āCheck trigger, Does the YAML description clearly match the user's request phrasing?
- āCheck instructions, Are there any ambiguous steps Claude might interpret differently?
- āCheck scripts, Do scripts run correctly outside of Claude? Test independently.
- āCheck references, Are all referenced files present and up to date?
- āCheck composability, Does this skill conflict with other active skills?
- āCheck hallucinations, Is Claude adding steps or information not present in the skill?
- āClaude Code Agent Skills, Skills in the CLI environment
- āMCP Protocol Explained, The connection protocol
- āAI Agents ReAct Explained, Agent reasoning patterns
- āPrompt Engineering Best Practices, Foundation techniques
Key Takeaways
- ā
Skills transform Claude from general assistant to specialized agent with procedural knowledge, executable scripts, and on-demand references
- ā
SKILL.md is the only required file, it contains YAML frontmatter for trigger matching and Markdown instructions for execution
- ā
Progressive disclosure saves 70-90% of tokens by loading skill details only when triggered by matching user intent
- ā
Scripts provide deterministic reliability for tasks that must produce consistent, exact results every time
- ā
Skills and MCP are complementary, MCP provides external connections, Skills provide the procedures for what to do with that data
- ā
Same skill format works everywhere, Claude.ai Projects, Claude Code, and the Anthropic API
- ā
Composability is built-in, Claude can automatically identify, sequence, and coordinate multiple skills for complex multi-step tasks
- ā
Treat Skills like code, version control, test systematically, iterate based on real-world feedback
Agent Skills: The Official Anthropic Course
"Introduction to Agent Skills" Program (Skilljar)
Anthropic's official Agent Skills course covers:
- āAgent Fundamentals: Understanding autonomous AI agents
- āSkill Architecture: Structure of a skill (triggers, instructions, context)
- āStep-by-Step Creation: Complete skill development workflow
- āTesting and Iteration: Testing and improving skill performance
- āPublishing: Submission process to the marketplace
Key Skills Developed
| Module | Skill Acquired |
|---|---|
| Agent Basics | Understanding the perception-action-reflection loop |
| Skill Design | Writing clear instructions and precise triggers |
| Context Management | Managing agent context and memory |
| Error Handling | Anticipating and handling error cases |
| Deployment | Publishing and maintaining production skills |
Best Practices for Agent Skills
- āAtomic instructions: One skill = one well-defined task
- āPrecise triggers: Avoid conflicts between skills
- āComprehensive tests: Test with varied edge cases
- āClear documentation: Facilitate adoption by other users
- āVersioning: Maintain stable versions
š Explore the marketplace: Check our Claude Skills guide to create and share your own skills.
Level Up Your AI Engineering Skills
Building effective Claude Skills requires deep understanding of how LLMs process instructions, handle context, and execute multi-step procedures.
In our Module 5, AI Agents & Automation, you'll learn:
- āHow to design reliable agent procedures
- āContext management and token optimization
- āMulti-step task decomposition
- āTesting and debugging AI agents
- āProduction deployment patterns
ā Explore Module 5: AI Agents & Automation
Last Updated: February 13, 2026 Based on Anthropic's official 32-page "Complete Guide to Building Skills for Claude" (January 29, 2026), Claude.ai documentation, developer community resources, and production deployment experience.
Module 5 ā RAG (Retrieval-Augmented Generation)
Ground AI responses in your own documents and data sources.
Dorian Laurenceau
Full-Stack Developer & Learning DesignerFull-stack web developer and learning designer. I spent 4 years as a freelance full-stack developer and 4 years teaching React, JavaScript, HTML/CSS and WordPress to adult learners. Today I design learning paths in web development and AI, grounded in learning science. I founded learn-prompting.fr to make AI practical and accessible, and built the Bluff app to gamify political transparency.
Weekly AI Insights
Tools, techniques & news ā curated for AI practitioners. Free, no spam.
Free, no spam. Unsubscribe anytime.
āRelated Articles
FAQ
What are Claude Skills?+
Claude Skills are modular, self-contained packages that enhance Claude's capabilities by providing specialized knowledge, workflows, and executable scripts. They transform Claude from a general-purpose assistant into a specialized agent with procedural knowledge for specific tasks.
What is the structure of a Claude Skill?+
A skill is organized as a folder containing: SKILL.md (core instructions with YAML frontmatter), scripts/ (executable Python or Bash scripts), references/ (documentation loaded on-demand), and optionally assets/ or templates/. The SKILL.md file is always required.
How do Skills differ from traditional prompt engineering?+
Skills go beyond static prompts by organizing AI expertise into structured files and folders. Unlike system prompts that load everything upfront, Skills use progressive disclosure, loading detailed instructions only when triggered by user intent. This reduces token waste and improves consistency.
What is progressive disclosure in Claude Skills?+
Progressive disclosure means Claude only loads the detailed instructions and resources of a skill when triggered by matching user intent. The skill's YAML frontmatter contains the trigger description, while the full instructions are loaded on-demand, minimizing token usage.
Can Skills integrate with MCP (Model Context Protocol)?+
Yes. Skills and MCP are complementary, MCP provides external data connections and tool access, while Skills apply specialized logic and workflows to that data. A skill can invoke MCP tools as part of its procedure.
Where can I use Claude Skills?+
Skills can be used in the Claude UI (Projects), Claude Code (the CLI tool), and through the Anthropic API/SDK. The same skill format works across all three environments.
Is there a tool to help me create new Skills?+
Yes. Anthropic provides a 'skill-creator skill', a meta-skill that guides you through building new skills. It helps you structure the SKILL.md, plan the folder layout, and test the skill's triggering behavior.
How do I test if a Skill triggers correctly?+
Test with various phrasings of user requests to ensure the skill activates when expected and doesn't activate for unrelated requests. Check for hallucinations (the model inventing steps not in the skill) and verify that scripts execute correctly.