Custom Skills Creation Guidelines
Overview
This instruction file provides comprehensive guidelines and best practices for creating custom Skills for Claude. Skills are modular, self-contained packages that extend Claude's capabilities by providing specialized knowledge, workflows, and tools.
Skills follow the open Agent Skills standard — a portable format adopted by multiple agent products (Claude Code, Cursor, Roo Code, GitHub, and others). Skills you create following this guide work across any compatible agent.
What Are Skills?
Skills are folders of instructions, scripts, and resources that Claude loads dynamically to improve performance on specialized tasks. Think of them as "onboarding guides" for specific domains or tasks—they transform Claude from a general-purpose agent into a specialized agent equipped with procedural knowledge.
What Skills Provide
- Specialized workflows - Multi-step procedures for specific domains
- Tool integrations - Instructions for working with specific file formats or APIs
- Domain expertise - Company-specific knowledge, schemas, business logic
- Bundled resources - Scripts, references, and assets for complex and repetitive tasks
How Skills Load (Three Levels)
Understanding how skills load helps you author them effectively:
| Level | When Loaded | Token Cost | Content |
|---|---|---|---|
| 1. Metadata | Always (at startup) | ~100 tokens per Skill | name and description from YAML frontmatter |
| 2. Instructions | When Skill is triggered | Under 5k tokens | SKILL.md body with instructions and guidance |
| 3. Resources | As needed | Effectively unlimited | Bundled files read or executed via bash |
Only metadata is pre-loaded. Claude reads SKILL.md only when the Skill becomes relevant, and reads additional files only as needed. This progressive disclosure ensures only relevant content occupies the context window.
Core Principles
1. Concise is Key
The context window is a shared resource. Your Skill competes with the system prompt, conversation history, other Skills' metadata, and the user's actual request.
Default assumption: Claude is already very smart. Only add context Claude doesn't already have. Challenge each piece of information:
- "Does Claude really need this explanation?"
- "Can I assume Claude knows this?"
- "Does this paragraph justify its token cost?"
Good example (~50 tokens):
## Extract PDF text
Use pdfplumber for text extraction:
```python
import pdfplumber
with pdfplumber.open("file.pdf") as pdf:
text = pdf.pages[0].extract_text()
Bad example (~150 tokens):
```markdown
## Extract PDF text
PDF (Portable Document Format) files are a common file format that contains
text, images, and other content. To extract text from a PDF, you'll need to
use a library. There are many libraries available for PDF processing, but
pdfplumber is recommended because it's easy to use and handles most cases well.
First, you'll need to install it using pip. Then you can use the code below...
The best skills:
- Solve a specific, repeatable task
- Have clear instructions that Claude can follow
- Include examples when helpful
- Define when they should be used
- Focus on one workflow rather than trying to do everything
2. Set Appropriate Degrees of Freedom
Match the level of specificity to the task's fragility and variability:
- High freedom (text-based instructions): Use when multiple approaches are valid, decisions depend on context, or heuristics guide the approach
- Medium freedom (pseudocode or scripts with parameters): Use when a preferred pattern exists, some variation is acceptable, or configuration affects behavior
- Low freedom (specific scripts, few parameters): Use when operations are fragile and error-prone, consistency is critical, or a specific sequence must be followed
Think of Claude as a robot exploring a path: a narrow bridge with cliffs on both sides needs specific guardrails (low freedom), while an open field with no hazards allows many routes (high freedom).
3. Progressive Disclosure Design Principle
Keep SKILL.md body to the essentials and under 500 lines to minimize context bloat. Split content into separate files when approaching this limit.
Key principle: When a skill supports multiple variations, frameworks, or options, keep only the core workflow and selection guidance in SKILL.md. Move variant-specific details (patterns, examples, configuration) into separate reference files.
4. Use Consistent Terminology
Choose one term and use it throughout the Skill:
- Good (consistent): Always "API endpoint", always "field", always "extract"
- Bad (inconsistent): Mix of "API endpoint"/"URL"/"API route"/"path", "field"/"box"/"element", "extract"/"pull"/"get"/"retrieve"
5. Avoid Time-Sensitive Information
Don't include information that will become outdated. Use "old patterns" sections for deprecated approaches:
## Current method
Use the v2 API endpoint: `api.example.com/v2/messages`
## Old patterns
<details>
<summary>Legacy v1 API (deprecated 2025-08)</summary>
The v1 API used: `api.example.com/v1/messages`
This endpoint is no longer supported.
</details>
Anatomy of a Skill
Every skill consists of a required SKILL.md file and optional bundled resources:
skill-name/
├── SKILL.md (required) - Main instructions (loaded when triggered)
│ ├── YAML frontmatter metadata (required)
│ │ ├── name: (required)
│ │ └── description: (required)
│ └── Markdown instructions (required)
├── AUTHORS.md (required) - Skill authorship info (NEVER loaded into context)
├── CHANGELOG.md (required) - Version history (NEVER loaded into context)
└── Bundled Resources (optional)
├── scripts/ - Executable code (Python/Bash/etc.)
├── references/ - Documentation intended to be loaded into context as needed
└── assets/ - Files used in output (templates, icons, fonts, etc.)
SKILL.md (required)
Every SKILL.md consists of:
- Frontmatter (YAML): Contains
nameanddescriptionfields. These are the only fields that Claude reads to determine when the skill gets used, thus it is very important to be clear and comprehensive in describing what the skill is, and when it should be used. - Body (Markdown): Instructions and guidance for using the skill. Only loaded AFTER the skill triggers (if at all).
Do not include any other fields in YAML frontmatter.
Naming Conventions
Use consistent naming patterns to make Skills easier to reference and discover:
Field requirements for name:
- Maximum 64 characters
- Must contain only lowercase letters, numbers, and hyphens
- Cannot contain XML tags
- Cannot contain reserved words: "anthropic", "claude"
Prefer gerund form (verb + -ing) as this clearly describes the activity:
processing-pdfs,analyzing-spreadsheets,managing-databases,writing-documentation
Acceptable alternatives:
- Noun phrases:
pdf-processing,spreadsheet-analysis - Action-oriented:
process-pdfs,analyze-spreadsheets
Avoid:
- Vague names:
helper,utils,tools - Overly generic:
documents,data,files - Reserved words:
anthropic-helper,claude-tools - Inconsistent naming patterns within your skill collection
Writing Effective Descriptions
The description field is the primary triggering mechanism — Claude uses it to choose the right Skill from potentially 100+ available Skills.
Field requirements for description:
- Must be non-empty
- Maximum 1024 characters
- Cannot contain XML tags
Always write in third person. The description is injected into the system prompt, and inconsistent point-of-view causes discovery problems.
- Good: "Processes Excel files and generates reports"
- Avoid: "I can help you process Excel files"
- Avoid: "You can use this to process Excel files"
Be specific and include key terms. Each Skill has exactly one description. Include both what the Skill does and specific triggers/contexts for when to use it.
Include ALL "when to use" information in the description — NOT in the body. The body is only loaded after triggering, so "When to Use This Skill" sections in the body are not helpful to Claude.
Effective examples:
# PDF Processing skill
description: Extract text and tables from PDF files, fill forms, merge documents. Use when working with PDF files or when the user mentions PDFs, forms, or document extraction.
# Excel Analysis skill
description: Analyze Excel spreadsheets, create pivot tables, generate charts. Use when analyzing Excel files, spreadsheets, tabular data, or .xlsx files.
# Git Commit Helper skill
description: Generate descriptive commit messages by analyzing git diffs. Use when the user asks for help writing commit messages or reviewing staged changes.
Avoid vague descriptions:
description: Helps with documents # Too vague
description: Processes data # Too generic
description: Does stuff with files # Uninformative
Bundled Resources (optional)
Scripts (scripts/)
Executable code (Python/Bash/etc.) for tasks that require deterministic reliability or are repeatedly rewritten.
- When to include: When the same code is being rewritten repeatedly or deterministic reliability is needed
- Example:
scripts/rotate_pdf.pyfor PDF rotation tasks - Benefits: Token efficient, deterministic, may be executed without loading into context
- Note: Scripts may still need to be read by Claude for patching or environment-specific adjustments
References (references/)
Documentation and reference material intended to be loaded as needed into context to inform Claude's process and thinking.
- When to include: For documentation that Claude should reference while working
- Examples:
references/finance.mdfor financial schemas,references/mnda.mdfor company NDA template,references/policies.mdfor company policies,references/api_docs.mdfor API specifications - Use cases: Database schemas, API documentation, domain knowledge, company policies, detailed workflow guides
- Benefits: Keeps SKILL.md lean, loaded only when Claude determines it's needed
- Best practice: If files are large (>10k words), include grep search patterns in SKILL.md
- Avoid duplication: Information should live in either SKILL.md or references files, not both. Prefer references files for detailed information unless it's truly core to the skill—this keeps SKILL.md lean while making information discoverable without hogging the context window.
Assets (assets/)
Files not intended to be loaded into context, but rather used within the output Claude produces.
- When to include: When the skill needs files that will be used in the final output
- Examples:
assets/logo.pngfor brand assets,assets/slides.pptxfor PowerPoint templates,assets/frontend-template/for HTML/React boilerplate,assets/font.ttffor typography - Use cases: Templates, images, icons, boilerplate code, fonts, sample documents that get copied or modified
- Benefits: Separates output resources from documentation, enables Claude to use files without loading them into context
AUTHORS.md (required)
Authorship and attribution metadata. This file is never loaded into context — it exists purely for human reference, skill discovery, and credit attribution. Do NOT reference this file from SKILL.md.
Required fields for the primary author:
- Full name
- GitHub username
- GitHub profile URL
- LinkedIn profile URL
Optional fields:
- Organization / company
- Role / title
- Website / portfolio URL
Co-authors: The file supports multiple co-authors, each with the same field structure.
Template:
# Authors
## Primary Author
- **Full Name**: Jane Doe
- **GitHub**: @janedoe
- **GitHub Profile**: https://github.com/janedoe
- **LinkedIn**: https://linkedin.com/in/janedoe
- **Organization**: Acme Corp
- **Role**: Senior Developer
- **Email**: jane.doe@acme.com
- **Website**: https://janedoe.dev
## Co-Authors
### John Smith
- **Full Name**: John Smith
- **GitHub**: @johnsmith
- **GitHub Profile**: https://github.com/johnsmith
- **LinkedIn**: https://linkedin.com/in/johnsmith
- **Organization**: Acme Corp
- **Role**: AL Developer
CHANGELOG.md (required)
Version history tracking all changes to the skill. This file is never loaded into context — it exists purely for human reference and auditing. Do NOT reference this file from SKILL.md.
Each entry must include:
- Version number (semantic versioning: MAJOR.MINOR.PATCH)
- Date (YYYY-MM-DD format)
- GitHub username of the person who made the change
- Description of changes
Template:
# Changelog
All notable changes to this skill are documented in this file.
Format follows [Keep a Changelog](https://keepachangelog.com/).
## [1.1.0] - 2026-03-18 - @janedoe
### Added
- New validation script for form fields
- Reference file for advanced PDF features
### Changed
- Updated description to include additional trigger phrases
## [1.0.1] - 2026-02-10 - @johnsmith
### Fixed
- Corrected file path in workflow step 3
## [1.0.0] - 2026-01-15 - @janedoe
### Added
- Initial skill release
- Core workflow for PDF processing
- Utility scripts: extract_text.py, validate_output.py
Important: Neither AUTHORS.md nor CHANGELOG.md should ever be referenced from SKILL.md. They sit on the filesystem at zero token cost and serve only as human-readable metadata for attribution and audit purposes.
Skill Creation Process
Follow these steps in order, skipping only if there is a clear reason why they are not applicable:
Step 1: Understanding the Skill with Concrete Examples
To create an effective skill, clearly understand concrete examples of how the skill will be used. This understanding can come from either direct user examples or generated examples that are validated with user feedback.
For example, when building an image-editor skill, relevant questions include:
- "What functionality should the image-editor skill support? Editing, rotating, anything else?"
- "Can you give some examples of how this skill would be used?"
- "I can imagine users asking for things like 'Remove the red-eye from this image' or 'Rotate this image'. Are there other ways you imagine this skill being used?"
- "What would a user say that should trigger this skill?"
Conclude this step when there is a clear sense of the functionality the skill should support.
Step 2: Planning the Reusable Skill Contents
To turn concrete examples into an effective skill, analyze each example by:
- Considering how to execute on the example from scratch
- Identifying what scripts, references, and assets would be helpful when executing these workflows repeatedly
Example 1: When building a pdf-editor skill to handle queries like "Help me rotate this PDF," the analysis shows:
- Rotating a PDF requires re-writing the same code each time
- A
scripts/rotate_pdf.pyscript would be helpful to store in the skill
Example 2: When building a frontend-webapp-builder skill for queries like "Build me a todo app," the analysis shows:
- Writing a frontend webapp requires the same boilerplate HTML/React each time
- An
assets/hello-world/template containing the boilerplate HTML/React project files would be helpful to store in the skill
Example 3: When building a big-query skill to handle queries like "How many users have logged in today?" the analysis shows:
- Querying BigQuery requires re-discovering the table schemas and relationships each time
- A
references/schema.mdfile documenting the table schemas would be helpful to store in the skill
Step 3: Initializing the Skill
When creating a new skill from scratch, always use the following structure:
- Create the skill directory
- Create SKILL.md with proper YAML frontmatter
- Create AUTHORS.md with the skill author's information (see AUTHORS.md template)
- Create CHANGELOG.md with the initial
[1.0.0]entry (see CHANGELOG.md template) - Create resource directories as needed:
scripts/,references/, andassets/ - Add example files in each directory that can be customized or deleted
Reminder: Do NOT reference AUTHORS.md or CHANGELOG.md from SKILL.md — they must never be loaded into context.
Step 4: Edit the Skill
When editing the skill, remember that the skill is being created for another instance of Claude to use. Include information that would be beneficial and non-obvious to Claude.
Learn Proven Design Patterns
Consult these helpful guides based on your skill's needs:
- Multi-step processes: Use sequential workflows and conditional logic
- Specific output formats or quality standards: Use template and example patterns
Start with Reusable Skill Contents
Begin implementation with the reusable resources identified above: scripts/, references/, and assets/ files.
Added scripts must be tested by actually running them to ensure there are no bugs and that the output matches what is expected.
Any example files and directories not needed for the skill should be deleted.
Update SKILL.md
Frontmatter
Write the YAML frontmatter with name and description following the naming conventions and description guidelines in the SKILL.md section above.
Do not include any other fields in YAML frontmatter.
Body
The body should contain:
- Clear instructions for using the skill
- Workflow guidance
- Examples when helpful
- References to scripts, assets, and reference files
Keep SKILL.md focused and under 500 lines. When approaching this limit, split content into reference files.
Step 5: Packaging a Skill
Once development of the skill is complete, it must be packaged into a distributable .skill file:
- Ensure the folder name matches your Skill's name
- Create a ZIP file of the folder
- The ZIP should contain the Skill folder as its root (not a subfolder)
Correct structure:
my-skill.zip
└── my-skill/
├── SKILL.md
└── resources/
Incorrect structure:
my-skill.zip
└── (files directly in ZIP root)
Step 6: Iterate
Test and refine the skill based on real usage:
- Enable the Skill in Settings > Capabilities
- Try several different prompts that should trigger it
- Review Claude's thinking to confirm it's loading the Skill
- Iterate on the description if Claude isn't using it when expected
Skill Structure Patterns
Choose the structure that best fits your skill's purpose:
1. Workflow-Based (best for sequential processes)
- Works well when there are clear step-by-step procedures
- Example: DOCX skill with "Workflow Decision Tree" → "Reading" → "Creating" → "Editing"
- Structure: ## Overview → ## Workflow Decision Tree → ## Step 1 → ## Step 2...
2. Task-Based (best for tool collections)
- Works well when the skill offers different operations/capabilities
- Example: PDF skill with "Quick Start" → "Merge PDFs" → "Split PDFs" → "Extract Text"
- Structure: ## Overview → ## Quick Start → ## Task Category 1 → ## Task Category 2...
3. Reference/Guidelines (best for standards or specifications)
- Works well for brand guidelines, coding standards, or requirements
- Example: Brand styling with "Brand Guidelines" → "Colors" → "Typography" → "Features"
- Structure: ## Overview → ## Guidelines → ## Specifications → ## Usage...