Introduction

In the previous unit, we explored the fundamentals of the Skills system: how Skills differ from custom commands, their file structure, and when to create them versus using CLAUDE.md. Now it is time to build something real.

In this lesson, we will move from theory to practice by creating two actual, functional Skills: a CSV analysis Skill and a visualization standards Skill. Along the way, we will learn how to write descriptions that help Claude select Skills automatically, how to define tool permissions properly, and how to verify that our Skills work as intended.

Practical vs. Artificial Skills

The best Skills solve real problems that occur regularly in actual projects. For this lesson, we focus on two such Skills:

  • CSV Analyzer: Analyzes CSV data with summary statistics and insights — a common data analysis task
  • Sci-Viz: Creates publication-ready scientific visualizations — essential for research papers

These differ from educational exercises like "convert strings to uppercase" or "add a fixed header to a file." Practical Skills embed domain knowledge and address recurring needs, which is exactly what makes them worth creating.

Creating Your First Skill: CSV Analyzer

Let's create a Skill that analyzes and summarizes CSV data with statistical insights. We will place this Skill in the project-specific directory so it is available for all team members working on this project.

The Skill resides in a dedicated folder with a clear, descriptive name:

.claude/skills/csv-analyzer/SKILL.md

Every Skill starts with YAML frontmatter that provides metadata for Claude's selection system. Here is how we begin our CSV analysis Skill:

---
name: csv-analyzer
description: Analyze CSV data and generate summary statistics, handling sales reports, analytics data, and tabular datasets with descriptive insights
allowed-tools: Read, Bash, Write
---

This frontmatter establishes three critical pieces of information. The name uniquely identifies this Skill, the description tells Claude when to use it, and allowed-tools specifies which capabilities this Skill can access. We will explore each of these fields in detail next.

Writing Clear Descriptions for Automatic Selection

The description field is perhaps the most important part of your Skill's frontmatter. This single line determines whether Claude will select your Skill when you make a request.

A good description should be:

  • Specific about the task: Mention concrete actions like analyze and generate summary statistics rather than vague terms like process data.
  • Rich in keywords: Include terms users might naturally use, such as sales reports, analytics, and CSV.
  • Clear about scope: State what the Skill handles, making selection easier.

Compare these descriptions:

# Weak description
description: Work with CSV files

# Strong description
description: Analyze CSV data and generate summary statistics, handling sales reports, analytics data, and tabular datasets with descriptive insights

The strong description gives Claude multiple matching signals — analyze, summary statistics, sales reports, descriptive insights — so when a user asks "Analyze this sales CSV and give me insights," Claude can confidently select this Skill without being told.

Defining Allowed Tools

The allowed-tools field applies the principle of least privilege: each Skill gets only the capabilities it needs to function. This provides both security and clarity.

For our CSV analysis Skill, we specify:

allowed-tools: Read, Bash, Write

Each tool serves a clear purpose:

  • Read: Access the CSV file to analyze data.
  • Bash: Run Python with pandas and statistical libraries.
  • Write: Save analysis results to summary files.

Notice what we do not include: Edit (we are not modifying existing files, just creating summaries) or any web access tools (this is a local analysis task). Limiting tools to exactly what is needed makes the Skill both safer and easier to reason about.

The Skill Body: Structure and Process

After the frontmatter, the markdown body provides guidance for Claude. The complete CSV analyzer Skill includes:

# CSV Analyzer Skill

## When to Use
- User asks to analyze CSV data or generate statistics
- User mentions sales reports, analytics, or tabular data needing insights
- User wants to understand data distributions, trends, or patterns

## Process
1. Read the CSV file using pandas for reliable parsing
2. Generate statistics: mean, median, std, correlations, outliers
3. Create summary with key metrics and insights
4. Export results as text summary and JSON

## Example Output
```python
import pandas as pd
df = pd.read_csv('sales_data.csv')
stats = df.describe()
summary = generate_insights(df, stats)
with open('analysis_summary.txt', 'w') as f:
    f.write(summary)
```

The "When to Use" section helps Claude recognize appropriate situations, the "Process" section provides step-by-step instructions, and the "Example Output" shows the expected implementation pattern without overwhelming detail.

Testing the CSV Skill

Now let's see this Skill in action. First, we ask Claude to create it:

> Create a skill for analyzing CSV data and generating summary statistics

Claude creates the complete Skill file with proper structure and frontmatter. When you first use a Skill, you will encounter an approval prompt:

Skill: csv-analyzer

This skill wants to use these tools: Read, Bash, Write

Choose an approval option:
  1. Approve temporarily (this session only)
  2. Approve permanently (for this directory)
  3. Approve globally (for all directories)
  4. Deny

For this course, select Option 2 to approve Skills for your practice directory without needing to re-approve each session.

Next, we test automatic selection with a relevant request:

> Analyze this sales CSV and give me key insights

Watch what Claude logs:

● [Skill selected: csv-analyzer]

This confirms our Skill is functioning. Claude recognized that our request matched the csv-analyzer Skill and loaded it automatically — no explicit instruction needed. Claude then applies the Skill and generates results:

● Bash(python analyze_sales.py)
● Read(analysis_summary.txt)
  ⎿ Sales Data Analysis Summary
    ===========================
    
    Dataset Overview:
    - Total records: 245
    - Date range: 2024-01-01 to 2024-03-31
    
    Key Metrics:
    - Total revenue: $156,890.50
    - Average revenue: $640.37
    - Top performing region: North

● Analysis complete! Generated summary statistics and key insights
Creating and Testing a Visualization Skill

Let's reinforce these patterns with a second Skill in a different domain: enforcing matplotlib standards for scientific publications.

> Create a skill that enforces matplotlib standards for scientific papers

Claude creates a new Skill file:

---
name: sci-viz
description: Create publication-ready matplotlib visualizations following scientific paper standards
allowed-tools: Write, Read, Edit, Bash
---

# Scientific Visualization Skill

## When to Use
- User asks for plots, charts, or visualizations
- User mentions "publication", "paper", or "scientific"
- User needs high-quality graphics

## Standards to Apply
- Figure size: (6, 4) inches; DPI: 300 minimum (600 for print)
- Font: 10pt labels, 12pt titles
- Colorblind-safe palettes (tab10, Set2); include error bars where applicable
- Grid: light gray, alpha=0.3; always include units in axis labels
- Export as PNG (300 dpi) for preview and PDF (vector) for publication

Notice the different tool requirements: this Skill includes Edit (for modifying existing plots) alongside Write, Read, and Bash. The standards section encodes domain-specific knowledge, ensuring consistency without repeatedly explaining requirements.

Testing it with a relevant request:

> Create a scatter plot of the sales data with revenue vs region

Claude logs automatic selection:

● [Skill selected: sci-viz]

Then applies all publication standards and confirms:

● Created publication-ready plots:
  - revenue_by_region.png (300 DPI)
  - revenue_by_region.pdf (vector)
  
  Applied standards:
  ✓ Colorblind-safe palette
  ✓ Professional font sizing
  ✓ Grid for readability
  ✓ Units in axis labels
  ✓ Dual format output

The Skill did not just create a plot — it ensured every publication standard was met automatically.

Key Principles for Practical Skills

Now that we have created two complete Skills, let's distill the patterns that make them effective:

Focus on real workflows: Skills should address actual recurring needs, not artificial scenarios.

Write descriptive metadata: Rich descriptions with relevant keywords enable automatic selection.

Apply least privilege: Each Skill specifies only the tools it genuinely needs.

Provide clear procedures: Step-by-step process sections guide consistent execution.

Include concrete examples: Sample code gives Claude a clear starting point.

Test thoroughly: Verify that Claude selects your Skill automatically for relevant requests.

When you create your own Skills, follow these principles. Start with tasks you perform repeatedly, encode your domain knowledge clearly, and test that automatic selection works as expected.

Conclusion and Next Steps

In this lesson, we built two practical Skills: one for analyzing CSV data and another for enforcing visualization standards. Along the way, we learned how to write effective descriptions, define appropriate tool permissions, structure Skill bodies clearly, and verify automatic selection through Claude's logs.

Skills are most valuable when they encode specialized knowledge you use repeatedly. Whether it is CSV analysis, visualization standards, API testing patterns, or any other domain-specific workflow, Skills let you capture that expertise once and apply it consistently.

In the practice section ahead, you will create Skills tailored to your specific needs, experiment with different structures, and discover how powerful this extension system can be.

Sign up
Join the 1M+ learners on CodeSignal
Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal