Build Ship Market
Back to Guides
AI Workflows Featured

Mastering Claude Skills

Transform AI into a specialized coworker by understanding Projects, Sub-Agents, and Skills

Amir
15 min read
claudeskillsautomationproductivity
Mastering Claude Skills

Mastering Claude Skills: Transforming AI into a Specialized Coworker

In the rapidly evolving landscape of AI productivity, understanding how to structure your workflow is the difference between a generic chat and a high-performance tool. While many users are familiar with Projects and Sub-agents, Skills represent a paradigm shift in how we automate complex, repeatable work.

Skills are available on Pro, Max, Team, and Enterprise plans. They're also available in beta for Claude Code and via the API with the code execution tool.

The Claude Ecosystem: Projects, Sub-Agents, and Skills

To get the most out of Claude, you must first distinguish between these three core features:

Projects

These serve as collaborative workspaces. They contain repeatable system instructions, uploaded files, and a persistent knowledge base. While excellent for ongoing team tasks—like a marketing team analyzing data—they require constant manual updates to instructions and data to stay relevant.

Sub-Agents

These are specialized agents spun up to break down complex workflows into isolated tasks. For instance, you might delegate the front-end design of a feature to one agent and the back-end API to another, keeping the context strictly isolated to that specific conversation window.

Skills

These are automated workflows that can be applied at both an individual chat level and a global project level. Unlike general instructions, a skill allows you to set specific constraints, guidelines, and steps that are built by you to be followed exactly every time.

Think of a Project as a shared office where you keep all your files, a Sub-Agent as a contractor hired for one specific afternoon to fix a pipe, and a Skill as a professional certification you give your AI, ensuring it knows exactly how to perform a specialized task perfectly every time you ask.


Why Skills Matter: Solving the "Non-Deterministic" Problem

One of the primary challenges with Large Language Models (LLMs) is that they are non-deterministic, meaning they can produce varied results or experience "hallucinations". Additionally, providing too much context can lead to "context rot," which degrades the AI's performance.

Skills solve this through two key mechanisms:

  1. Packaged Expertise: Instead of manually documenting guidelines in a project and hoping Claude follows them, a skill ensures those constraints are automatically applied.

  2. Progressive Disclosure: Claude only loads the full skill instructions when relevant, keeping context lean. At startup, only skill names and descriptions are loaded—the full SKILL.md content is loaded on-demand.

  3. Embedded Scripts: Include actual code that runs deterministically rather than having Claude guess at outcomes.


Skill Architecture: The SKILL.md File

Every skill is simply a folder containing a SKILL.md file. This file combines YAML frontmatter metadata with markdown instructions.

Basic Structure

---
name: my-skill-name
description: A clear description of what this skill does and when to use it
---

# My Skill Name

## Overview
[What this skill does and when to use it]

## Instructions
### Step 1: [Action]
### Step 2: [Action]

## Examples
[Concrete input/output examples]

## Guidelines
- Guideline 1
- Guideline 2

Required Frontmatter Fields

Field Description Constraints
name Unique identifier Max 64 chars, lowercase, hyphens only
description When Claude should use this skill Max 1024 chars (200 recommended)

Optional Frontmatter Fields

---
name: advanced-skill
description: Skill with advanced configuration
allowed-tools: "Read,Write,Bash,Glob,Grep,Edit"
model: claude-sonnet-4-5-20250929
disable-model-invocation: false
license: MIT
---

The allowed-tools field pre-approves specific tools, reducing permission prompts during execution.


Building Your First Skill: Step-by-Step

Example: Weekly Team Report Generator

Create this folder structure:

team-report/
├── SKILL.md
└── templates/
    └── report-template.md

SKILL.md:

---
name: weekly-team-report
description: Generate formatted weekly team reports with wins, blockers, and priorities
---

# Weekly Team Report Generator

## Purpose
Transform raw team updates into a structured weekly report that follows company formatting standards.

## Instructions

1. **Collect Information**: Ask for or parse the following:
   - Team accomplishments this week (3-5 bullets)
   - Current blockers (2-3 items)
   - Next week priorities (3 items)
   - Any team requests or escalations

2. **Format the Report**: Structure output as:

### Week of [DATE]

**🎯 Wins**
- [Accomplishment 1]
- [Accomplishment 2]
- [Accomplishment 3]

**🚧 Blockers**
- [Blocker 1]: [Mitigation]
- [Blocker 2]: [Mitigation]

**📋 Next Week Priorities**
1. [Priority 1]
2. [Priority 2]
3. [Priority 3]

**📢 Team Requests**
- [Any escalations or resource needs]

## Example Output

### Week of January 6, 2025

**🎯 Wins**
- Shipped v2.1 of the dashboard with 40% performance improvement
- Closed 15 customer tickets, reducing backlog by 30%
- Completed security audit with zero critical findings

**🚧 Blockers**
- API rate limiting affecting data sync: Working with vendor on increased quota
- Design resources stretched thin: Prioritizing P0 features only

**📋 Next Week Priorities**
1. Complete mobile responsive redesign
2. Deploy monitoring dashboards to production
3. Begin Q1 planning sessions

**📢 Team Requests**
- Need decision on cloud provider migration timeline by Friday

Advanced Skill Patterns

Pattern 1: Script-Powered Data Analysis

Bundle Python scripts for deterministic calculations:

funnel-analyzer/
├── SKILL.md
├── scripts/
│   └── calculate_metrics.py
└── references/
    └── metric-definitions.md

SKILL.md:

---
name: funnel-analyzer
description: Analyze marketing funnel data with accurate CAC, ROAS, and conversion calculations
allowed-tools: "Bash(python {baseDir}/scripts/*:*), Read, Write"
---

# Marketing Funnel Analyzer

## Overview
Use the bundled Python script to calculate marketing metrics with precision. Never estimate or round—use the script for all calculations.

## Instructions

1. **Load Data**: Accept CSV or manual input of:
   - Ad spend by channel
   - Revenue by channel
   - Conversions by funnel stage

2. **Run Calculations**: Execute the analysis script:
   \`\`\`bash
   python {baseDir}/scripts/calculate_metrics.py --input data.csv
   \`\`\`

3. **Generate Report**: Format results as executive summary with:
   - Total spend vs. revenue
   - CAC by channel
   - ROAS comparison
   - Recommendations

## Metric Definitions
See {baseDir}/references/metric-definitions.md for calculation formulas.

scripts/calculate_metrics.py:

#!/usr/bin/env python3
"""
Marketing funnel metrics calculator.
Provides deterministic, auditable calculations.
"""

import argparse
import json
import sys
from dataclasses import dataclass
from typing import Dict, List

@dataclass
class ChannelMetrics:
    channel: str
    spend: float
    revenue: float
    conversions: int

    @property
    def cac(self) -> float:
        """Customer Acquisition Cost"""
        return self.spend / self.conversions if self.conversions > 0 else 0

    @property
    def roas(self) -> float:
        """Return on Ad Spend"""
        return self.revenue / self.spend if self.spend > 0 else 0

    @property
    def conversion_value(self) -> float:
        """Average value per conversion"""
        return self.revenue / self.conversions if self.conversions > 0 else 0

def analyze_funnel(data: List[Dict]) -> Dict:
    """Analyze funnel data and return comprehensive metrics."""
    channels = [ChannelMetrics(**row) for row in data]

    total_spend = sum(c.spend for c in channels)
    total_revenue = sum(c.revenue for c in channels)
    total_conversions = sum(c.conversions for c in channels)

    return {
        "summary": {
            "total_spend": round(total_spend, 2),
            "total_revenue": round(total_revenue, 2),
            "total_conversions": total_conversions,
            "overall_roas": round(total_revenue / total_spend, 2) if total_spend > 0 else 0,
            "overall_cac": round(total_spend / total_conversions, 2) if total_conversions > 0 else 0,
        },
        "by_channel": [
            {
                "channel": c.channel,
                "spend": c.spend,
                "revenue": c.revenue,
                "conversions": c.conversions,
                "cac": round(c.cac, 2),
                "roas": round(c.roas, 2),
                "conversion_value": round(c.conversion_value, 2),
            }
            for c in sorted(channels, key=lambda x: x.roas, reverse=True)
        ]
    }

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Analyze marketing funnel metrics")
    parser.add_argument("--input", help="JSON input file or inline JSON data")
    args = parser.parse_args()

    # Parse input
    if args.input:
        with open(args.input) as f:
            data = json.load(f)
    else:
        data = json.load(sys.stdin)

    results = analyze_funnel(data)
    print(json.dumps(results, indent=2))

Pattern 2: Multi-File Reference Architecture

For complex domains, use progressive disclosure with linked reference files:

code-review/
├── SKILL.md
├── references/
│   ├── security-checklist.md
│   ├── performance-patterns.md
│   └── style-guide.md
└── templates/
    └── review-template.md

SKILL.md:

---
name: code-review
description: Perform thorough code reviews following team standards for security, performance, and style
allowed-tools: "Read, Grep, Glob"
---

# Code Review Skill

## Overview
Conduct comprehensive code reviews that check for security vulnerabilities, performance issues, and style compliance.

## Review Process

### 1. Security Review
Load and apply: {baseDir}/references/security-checklist.md

Key checks:
- SQL injection vectors
- XSS vulnerabilities
- Authentication/authorization flaws
- Sensitive data exposure

### 2. Performance Review
Load and apply: {baseDir}/references/performance-patterns.md

Key checks:
- N+1 query patterns
- Memory leaks
- Unnecessary re-renders (React)
- Missing indexes

### 3. Style Compliance
Load and apply: {baseDir}/references/style-guide.md

## Output Format

Use the template at {baseDir}/templates/review-template.md

Severity levels:
- 🔴 **Critical**: Security vulnerability or data loss risk
- 🟠 **Major**: Performance issue or significant bug
- 🟡 **Minor**: Style issue or minor improvement
- 🟢 **Suggestion**: Optional enhancement

Using Skills: Platform Guide

Claude.ai (Web Interface)

  1. Navigate to Settings > Capabilities
  2. Ensure Code execution and file creation is enabled
  3. Scroll to the Skills section
  4. Click Upload skill and upload a ZIP of your skill folder

Claude Code (CLI)

Skills auto-discover from these locations:

# Global skills (all projects)
~/.claude/skills/my-skill/SKILL.md

# Project-specific skills
your-project/.claude/skills/my-skill/SKILL.md

# Via plugin marketplace
claude /plugin marketplace add anthropics/skills

Invoke skills as slash commands:

# User-invoked
/my-skill-name

# Or Claude auto-invokes based on task relevance

API Integration (Python)

import anthropic

client = anthropic.Anthropic()

# Using Anthropic's pre-built skills
response = client.beta.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=4096,
    betas=["code-execution-2025-08-25", "skills-2025-10-02"],
    container={
        "skills": [
            {
                "type": "anthropic",
                "skill_id": "xlsx",
                "version": "latest"
            }
        ]
    },
    messages=[{
        "role": "user",
        "content": "Create a budget spreadsheet with Q1 projections"
    }],
    tools=[{
        "type": "code_execution_20250825",
        "name": "code_execution"
    }]
)

Uploading Custom Skills via API

from anthropic.lib import files_from_dir

# Create a custom skill
skill = client.beta.skills.create(
    display_title="Financial Analysis",
    files=files_from_dir("/path/to/financial_analysis_skill"),
    betas=["skills-2025-10-02"]
)

print(f"Created skill: {skill.id}")

# Use your custom skill
response = client.beta.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=4096,
    betas=["code-execution-2025-08-25", "skills-2025-10-02"],
    container={
        "skills": [
            {
                "type": "custom",
                "skill_id": skill.id,
                "version": "latest"
            }
        ]
    },
    messages=[{"role": "user", "content": "Analyze the attached financials"}],
    tools=[{"type": "code_execution_20250825", "name": "code_execution"}]
)

Combining Multiple Skills

response = client.beta.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=4096,
    betas=["code-execution-2025-08-25", "skills-2025-10-02"],
    container={
        "skills": [
            {"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
            {"type": "anthropic", "skill_id": "pptx", "version": "latest"},
            {"type": "custom", "skill_id": "skill_01AbCd...", "version": "latest"}
        ]
    },
    messages=[{
        "role": "user",
        "content": "Analyze sales data in Excel, then create a presentation"
    }],
    tools=[{"type": "code_execution_20250825", "name": "code_execution"}]
)

Real-World Skill Examples

1. Brand Guidelines Skill

---
name: brand-guidelines
description: Apply Acme Corp brand guidelines to documents including colors, fonts, and logo usage
---

# Acme Corp Brand Guidelines

## Brand Colors
- Primary: #1E40AF (Acme Blue)
- Secondary: #059669 (Success Green)
- Accent: #F59E0B (Highlight Orange)
- Text: #1F2937 (Dark Gray)
- Background: #F9FAFB (Light Gray)

## Typography
- Headlines: Inter Bold, 24-48px
- Body: Inter Regular, 16px, 1.6 line-height
- Code: JetBrains Mono, 14px

## Voice & Tone
- Professional but approachable
- Active voice preferred
- Avoid jargon unless audience is technical
- Lead with benefits, follow with features

## Logo Usage
- Minimum clear space: 20px all sides
- Never stretch or distort
- Use white logo on dark backgrounds
- Minimum size: 120px wide

2. AB Testing Analyzer

---
name: ab-test-analyzer
description: Analyze A/B test results with statistical significance calculations and recommendations
allowed-tools: "Bash(python {baseDir}/scripts/*:*), Read"
---

# A/B Test Analyzer

## Required Inputs
- Control group: visitors, conversions
- Treatment group: visitors, conversions
- Confidence level (default: 95%)

## Process

1. **Calculate Base Metrics**
   - Conversion rates for each variant
   - Relative lift percentage

2. **Statistical Analysis**
   Run: `python {baseDir}/scripts/significance.py`

3. **Generate Recommendation**
   - If p-value < 0.05 and lift > 5%: **Ship It**
   - If p-value < 0.05 and lift < 5%: **Consider business impact**
   - If p-value > 0.05: **Needs more data** (calculate required sample size)

## Output Format

### Test: [Name]
| Metric | Control | Treatment | Lift |
|--------|---------|-----------|------|
| Visitors | X | X | - |
| Conversions | X | X | +X% |
| Conv. Rate | X% | X% | +X% |

**Statistical Significance**: [Yes/No] (p-value: X.XX)
**Recommendation**: [Ship It / Need More Data / No Impact]

3. Meeting Notes to Action Items

---
name: meeting-to-actions
description: Extract action items, decisions, and follow-ups from meeting notes or transcripts
---

# Meeting Notes Processor

## Extraction Rules

### Action Items
Look for patterns:
- "will do", "should", "needs to", "action:"
- Assignments: "[Name] to [verb]..."
- Deadlines: "by [date]", "before [event]"

### Decisions Made
Look for patterns:
- "decided to", "agreed", "we will", "going with"
- Finalized choices between options

### Follow-ups Required
- Questions left unanswered
- Items needing more research
- Stakeholders to loop in

## Output Format

## Meeting: [Title] - [Date]

### ✅ Action Items
| Owner | Task | Due Date |
|-------|------|----------|
| @name | Task description | Date |

### 📋 Decisions Made
1. [Decision 1]: [Context/Rationale]
2. [Decision 2]: [Context/Rationale]

### 🔄 Follow-ups
- [ ] [Item needing follow-up]
- [ ] [Question to answer]

### 📌 Key Discussion Points
- [Summary point 1]
- [Summary point 2]

Best Practices

Writing Effective Descriptions

The description field is critical—Claude uses this to decide when to invoke your skill.

Good descriptions:

# Specific, actionable
description: Extract text and tables from PDF files for analysis

# Clear trigger conditions
description: Apply Acme Corp brand guidelines to presentations and documents

# Domain-specific
description: Calculate marketing funnel metrics including CAC, ROAS, and LTV

Bad descriptions:

# Too vague
description: Help with documents

# Too broad
description: Do marketing stuff

Skill Design Principles

  1. Single Responsibility: Each skill should do one thing well. Create separate skills for different purposes.

  2. Progressive Disclosure: Keep SKILL.md focused. Link to reference files for detailed information.

  3. Concrete Examples: Always include input/output examples so Claude knows what success looks like.

  4. Test Variations: Try different phrasings and edge cases before relying on your skill in production.

Security Considerations

  • Only use skills from trusted sources: Skills can execute code and access tools
  • Review all bundled scripts: Check for network calls, file system access, or suspicious patterns
  • Don't hardcode secrets: Never include API keys, passwords, or credentials in skill files
  • Audit third-party skills: Read the entire SKILL.md before enabling downloaded skills

Skill Resources

Official Resources

  • GitHub Repository: github.com/anthropics/skills - Official examples and templates
  • Skills Directory: Partner-built skills from Notion, Figma, Atlassian
  • Agent Skills Standard: agentskills.io - Open specification for cross-platform skills

Community Collections

  • Awesome Claude Skills: Community-curated skill collection
  • Claude Code Skill Factory: Toolkit for building production skills at scale

Anthropic Pre-Built Skills

Skill ID Description
xlsx Create and edit Excel spreadsheets
pptx Create PowerPoint presentations
docx Create Word documents
pdf Create and manipulate PDFs

Troubleshooting

Skill Not Triggering

  1. Check the description: Is it specific enough for Claude to match?
  2. Verify the name: Must be lowercase with hyphens only
  3. Check file structure: SKILL.md must be at the folder root

Script Execution Failing

  1. Check allowed-tools: Ensure Bash or Python is permitted
  2. Use {baseDir}: Reference scripts with the portable path variable
  3. Test locally first: Verify scripts work before bundling

Context Overload

  1. Split large skills: Create separate, focused skills
  2. Use references: Move detailed content to linked files
  3. Keep SKILL.md lean: Core instructions only, examples in separate files

Want to learn more?

Check out our other guides or join the community to connect with other builders.