Creating Skills

Guide for creating Claude Code skill documents with YAML frontmatter, instructions, examples, and reference implementations

$ Installer

git clone https://github.com/lawless-m/claude-skills /tmp/claude-skills && cp -r /tmp/claude-skills/.claude/skills/Creating%20Skills ~/.claude/skills/claude-skills

// tip: Run this command in your terminal to install the skill


name: Creating Skills description: Guide for creating Claude Code skill documents with YAML frontmatter, instructions, examples, and reference implementations

Creating Skills

This guide explains how to create effective skill documents for Claude Code. Skills are domain-specific knowledge files that teach Claude how to perform specialized tasks consistently.

File Structure

Skills must be placed in the .claude/skills/ directory with the following structure:

.claude/
�� skills/
    �� My Skill Name/
        �� SKILL.md          # Main skill document (required)
        �� reference-file.cs  # Supporting reference files (optional)

YAML Frontmatter (Required)

Every skill document must begin with YAML frontmatter between --- delimiters:

---
name: Skill Name
description: Brief description of what this skill enables (appears in skill list)
---

Frontmatter Fields:

FieldRequiredDescription
nameYesDisplay name for the skill (used in /skill command)
descriptionYesOne-line summary shown when listing available skills
licenseNoLicense information if applicable

Example:

---
name: Elasticsearch
description: Elasticsearch 5.2 operations using HTTP API - searching, indexing, bulk operations, scroll API, and alias management
---

Document Structure

A well-structured skill document follows this pattern:

1. Title and Overview

# Skill Name

Brief introduction explaining what this skill covers and when Claude should use it.

2. Instructions Section

Numbered guidelines for Claude to follow when applying this skill:

## Instructions

When helping users with [topic], follow these guidelines:

1. **Guideline One**: Explanation of the first principle
2. **Guideline Two**: Second important consideration
3. **Guideline Three**: Third rule to follow
...

3. Examples Section

Conversational examples showing how Claude should respond to common requests:

## Examples

### Example 1: Descriptive Title

User: Example user request

Claude: How Claude should approach this:

  • Step 1 explanation
  • Step 2 explanation
  • Reference to implementation details below

[Provides implementation using the Pattern Name from reference material below]


### Example 2: Another Common Scenario

User: Different user request

Claude: Alternative approach explanation...

Example Pattern:

### Example 3: Search with Range Filters

User: Help me search Elasticsearch for pricing periods active today

Claude: I'll use the ServiceLib.Elasticsearch wrapper with a bool query and range filters:

  • Current date for comparison
  • Two range filters (start <= today AND end >= today)
  • Access results via dynamic object properties

[Provides implementation using the Search pattern from reference material below]

4. Reference Implementation Section

Divider followed by detailed, production-proven code:

---

# Reference Implementation Details

The sections below contain proven working code from production systems that the examples above reference.

**Reference Files in This Folder**:
- `HelperClass.cs` - Description of what it contains
- `ExampleService.cs` - Another supporting file

## Pattern Name

**Location**: `Source/Path.cs`
**Purpose**: What this pattern accomplishes

### Code Example

```csharp
// Production-tested code with comments explaining key decisions
public class ExampleClass
{
    // Implementation details...
}

Key Points:

  • Important observation about the pattern
  • Critical requirement or constraint
  • Common pitfall to avoid

## Best Practices

### 1. Be Specific and Prescriptive

**Good:**
```markdown
1. **Version Constraint**: Always use Elasticsearch 5.2 API patterns. This version will not change.

Avoid:

1. Use the appropriate Elasticsearch version for your project.

2. Include Exact Command Formats

When Claude needs to execute commands, provide exact syntax:

**ALWAYS use this exact command format:**

```bash
"Y:/CSharpDLLs/Tool/Tool.exe" <command> --solution "<path>" --format console

### 3. Document Parameter Styles and Patterns

For database or API work, clearly document parameter conventions:

```markdown
## Parameter Styles by Database

| Database | Parameter Style | Example |
|----------|----------------|---------|
| DuckDB | `?` placeholders | `WHERE id = ?` |
| PostgreSQL | `$1, $2, $3` | `WHERE id = $1` |
| MySQL | `@parameter` | `WHERE id = @id` |

4. Include Error Handling and Troubleshooting

## Troubleshooting

### "Connection Refused" Error

**Cause:** Server not running

**Solution:**
```bash
cd server-directory
dotnet run

### 5. Reference Supporting Files

If your skill folder contains additional files, reference them explicitly:

```markdown
**Reference Files in This Folder**:
- `Utf8LoggingExtensions.cs` - Complete UTF-8 logger implementation (copy to Services/)
- `ODBC.cs` - ServiceLib ODBC wrapper with ExecuteAndMap pattern

6. Use Tables for Quick Reference

## Quick Reference

| Action | Command | Notes |
|--------|---------|-------|
| Find unused | `unused --solution X` | High confidence = safe |
| Check impact | `impact --method Y` | Shows what would break |
| Find callers | `callers --method Z` | Direct dependencies |

7. Include Real-World Examples

## Real-World Examples

### PriceExtractor
```bash
dotnet run -- --pqdir "R:\Outputs\Parquets\poller" --log-dir "C:\Logs\PriceExtractor"

Creates: C:\Logs\PriceExtractor\PriceExtractor_2025_10_16.log


## Complete Skill Template

```markdown
---
name: My Skill Name
description: One-line description of skill capabilities and use cases
---

# My Skill Name

Brief introduction explaining the skill's purpose and when to use it.

## Instructions

When helping users with [topic], follow these guidelines:

1. **First Principle**: Explanation
2. **Second Principle**: Explanation
3. **Third Principle**: Explanation

## Examples

### Example 1: Common Task

User: Typical user request

Claude: How to approach this:

  • Step explanation
  • Another step

[Provides implementation using Pattern from reference material below]


### Example 2: Another Task

User: Different request

Claude: Alternative approach...


---

# Reference Implementation Details

The sections below contain proven working code that the examples above reference.

**Reference Files in This Folder**:
- `file1.cs` - Description
- `file2.cs` - Description

## Pattern Name

**Location**: `Path/To/Source.cs`
**Purpose**: What this accomplishes

```csharp
// Production code example
public class Example
{
    // Implementation
}

Key Points:

  • Important note
  • Critical requirement

Another Pattern

Additional implementation details...

Troubleshooting

Common Error

Cause: Why this happens

Solution: How to fix it

Best Practices Summary

  1. First best practice
  2. Second best practice
  3. Third best practice

## Common Mistakes to Avoid

1. **Missing YAML frontmatter** - Skill won't be recognized without `---` delimiters and required fields

2. **Vague instructions** - "Use appropriate methods" vs "Use HttpClient with POST to /_bulk endpoint"

3. **No examples** - Abstract instructions without concrete user/Claude dialogues

4. **Untested code** - Reference implementations should be production-proven, not theoretical

5. **Missing context** - Not explaining why certain patterns are preferred

6. **No error handling** - Users will hit errors; document common issues and solutions

7. **Outdated references** - Keep file paths and version numbers current

## Testing Your Skill

After creating a skill:

1. Verify the skill appears in the available skills list
2. Test with a request that should trigger the skill
3. Confirm Claude follows the documented patterns
4. Check that example scenarios produce expected outputs
5. Validate reference code still works with current dependencies