Skip to content

How to Create Custom Agent Skills with Anthropic's Skill-Creator

Purpose

I wanted Claude to become a specialized expert for my specific workflows. The default Claude is smart, but it doesn’t know my company’s coding standards, my preferred testing patterns, or my deployment procedures.

That’s when I discovered Anthropic’s skill-creator. It transforms Claude from a general-purpose assistant into a specialized agent with domain-specific knowledge.

What is a Skill?

A skill is a modular package that extends Claude’s capabilities. Think of it as an “onboarding guide” for a specific domain.

Skills provide:

  • Specialized workflows - Multi-step procedures for specific tasks
  • 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 tasks

How Skills Load

Skills use a three-level loading system:

Progressive Disclosure
Phase 1: Metadata (always loaded)
name: security-review
description: Use when adding authentication...
(~100 words)
Phase 2: SKILL.md body (loaded when triggered)
# Security Review Skill
## Security Checklist...
(<5k words)
Phase 3: Bundled resources (loaded as needed)
references/cloud-infrastructure-security.md
(only when user asks about cloud security)

This design keeps the context window efficient. Claude only loads what it needs, when it needs it.

The Six-Step Creation Process

I followed this workflow to create my first skill:

Step 1: Understand with Concrete Examples

Before writing anything, I asked myself:

  • “What functionality should this skill support?”
  • “What would a user say that should trigger this skill?”

For example, when I built a commit-helper skill, I imagined users saying:

  • “Generate a commit message for these changes”
  • “Review my commit history for patterns”

Step 2: Plan Reusable Contents

I analyzed each example to identify what resources would help:

User QueryNeeded Resource
”Rotate this PDF”scripts/rotate_pdf.py
”Build me a todo app”assets/hello-world/ boilerplate
”How many users logged in today?”references/schema.md

Step 3: Initialize the Skill

I ran the init script to scaffold the structure:

Initialize skill
scripts/init_skill.py my-new-skill --path ~/.claude/skills/

This created:

Skill directory structure
my-new-skill/
├── SKILL.md (template with TODOs)
├── scripts/example.py
├── references/api_reference.md
└── assets/example_asset.txt

Step 4: Edit the Skill

The description field is critical. It’s the primary triggering mechanism.

I wrote the frontmatter:

SKILL.md frontmatter
---
name: commit-helper
description: Generate conventional commit messages following team standards. Use when creating git commits or reviewing commit history for: (1) Writing commit messages, (2) Analyzing commit patterns, (3) Enforcing commit conventions.
---

Notice I included both:

  • What the skill does
  • WHEN to use it (specific scenarios)

Then I wrote the body with instructions:

SKILL.md body
# Commit Helper
## Message Format
<type>: <description>
Types: feat, fix, refactor, docs, test, chore, perf, ci
## Examples
**Feature commit:**
feat(auth): add OAuth2 login flow
- Implement Google OAuth provider
- Add session management

Step 5: Package the Skill

I ran the packaging script:

Package skill
scripts/package_skill.py ~/.claude/skills/my-new-skill

The script validated:

  • YAML frontmatter format
  • Skill naming conventions
  • Description completeness
  • File organization

On success, it created my-new-skill.skill - a distributable zip file.

Step 6: Iterate

This is the “variance analysis” I heard about in the community.

The iteration workflow:

  1. Use the skill on real tasks
  2. Notice struggles or inefficiencies
  3. Identify what needs updating
  4. Implement changes and test again

I used my skill for a week and noticed Claude was missing some edge cases in commit message formatting. I updated the SKILL.md body with more specific examples.

Degrees of Freedom

I learned to match specificity to task fragility:

Freedom LevelWhen to UseExample
High (text-based)Multiple valid approaches”Write clean, readable code”
Medium (pseudocode)Preferred pattern exists”Use repository pattern with async methods”
Low (specific scripts)Fragile operationsscripts/rotate_pdf.py --angle 90 input.pdf

Think of Claude as exploring a path: a narrow bridge needs specific guardrails (low freedom), while an open field allows many routes (high freedom).

A Complete Example

Here’s a minimal skill I created:

SKILL.md
---
name: commit-helper
description: Generate conventional commit messages following team standards. Use when creating git commits or reviewing commit history for: (1) Writing commit messages, (2) Analyzing commit patterns, (3) Enforcing commit conventions.
---
# Commit Helper
## Message Format
<type>: <description>
<optional body>
Types: feat, fix, refactor, docs, test, chore, perf, ci
## Examples
**Feature commit:**
feat(auth): add OAuth2 login flow
- Implement Google OAuth provider
- Add session management
- Include error handling
**Bug fix:**
fix(api): resolve race condition in user creation
Use atomic upsert instead of separate check/insert

Key Takeaways

After creating several skills, I learned:

  1. The description field is everything - Be comprehensive about WHEN to use the skill
  2. Keep SKILL.md under 500 lines - Move detailed content to references/
  3. Use scripts/ for deterministic operations - Avoid rewriting the same code
  4. The iterative cycle is built-in - Skills improve through real usage
  5. Progressive disclosure keeps context efficient - Load only what’s needed

Summary

In this post, I showed how to create custom agent skills using Anthropic’s skill-creator. The six-step workflow (understand, plan, initialize, edit, package, iterate) transforms Claude into a specialized expert.

Start by running init_skill.py to scaffold your first skill. Then iterate based on real usage patterns. The skill-creator is itself a skill worth installing before any new agent project in 2026.

Final Words + More Resources

My intention with this article was to help others share my knowledge and experience. If you want to contact me, you can contact by email: Email me

Here are also the most important links from this article along with some further resources that will help you in this scope:

Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!

Comments