skill-authoring

Create and maintain Claude Code skills following Anthropic best practices. Use when building new skills, refactoring existing ones, or ensuring skills follow official guidelines for structure, naming, progressive disclosure, and testing.

9 stars

Best use case

skill-authoring is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Create and maintain Claude Code skills following Anthropic best practices. Use when building new skills, refactoring existing ones, or ensuring skills follow official guidelines for structure, naming, progressive disclosure, and testing.

Teams using skill-authoring should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/skill-authoring/SKILL.md --create-dirs "https://raw.githubusercontent.com/aspiers/ai-config/main/.agents/skills/skill-authoring/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/skill-authoring/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How skill-authoring Compares

Feature / Agentskill-authoringStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Create and maintain Claude Code skills following Anthropic best practices. Use when building new skills, refactoring existing ones, or ensuring skills follow official guidelines for structure, naming, progressive disclosure, and testing.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# Skill Authoring

Create effective Claude Code skills that follow Anthropic's official best practices and guidelines.

## When to Use This Skill

Use this skill when:

- Creating new skills from scratch
- Refactoring existing skills for better structure
- Ensuring skills follow Anthropic guidelines
- Troubleshooting skill discovery or performance issues
- Optimizing skills for token efficiency

## Core Principles

### 1. Concise is Key

- Context window is shared - be economical with tokens
- Assume Claude is already smart - don't over-explain basics
- Challenge every piece of information: "Does this justify its token cost?"

### 2. Progressive Disclosure

Skills load in three tiers:

- **Level 1**: Metadata (name/description) - always loaded (~100 tokens/skill)
- **Level 2**: SKILL.md body - loaded when triggered (<500 lines recommended)
- **Level 3**: Reference files/scripts - loaded/executed as needed

### 3. Appropriate Freedom Levels

- **High freedom**: Text instructions for flexible, context-dependent tasks
- **Medium freedom**: Parameterized scripts with some variation
- **Low freedom**: Specific scripts for fragile, error-prone operations

## Skill Structure

### Required Files

Each skill is a directory containing a `SKILL.md` file. Multiple locations
are scanned, in order of preference:

**Project-local** (walked up from cwd to git worktree root):
- `.agents/skills/<name>/SKILL.md` — preferred cross-platform standard
- `.claude/skills/<name>/SKILL.md` — Claude-compatible
- `.opencode/skills/<name>/SKILL.md` — OpenCode-specific

**Global** (user home):
- `~/.agents/skills/<name>/SKILL.md`
- `~/.claude/skills/<name>/SKILL.md`
- `~/.config/opencode/skills/<name>/SKILL.md`

Use `.agents/skills/` for new skills — it is the emerging cross-platform
standard supported by Claude Code, OpenCode, and other agents.

```
.agents/skills/skill-name/
├── SKILL.md (required - instructions + metadata)
└── Optional bundled resources:
    ├── scripts/     - Executable code (Python/Bash/etc.)
    ├── references/  - Documentation loaded as needed
    └── assets/      - Files for output (templates, images)
```

### YAML Frontmatter Requirements

```yaml
---
name: skill-name-here          # lowercase, hyphens, max 64 chars
description: What + When       # max 1024 chars, include trigger contexts
---
```

**Critical**: Description must include both WHAT the skill does AND WHEN to use it. Include:
- Task types (create, analyze, process)
- File types (.pdf, .docx, .json)
- Keywords users might mention
- Specific trigger contexts

### Example `SKILL.md`

N.B. The following example is indented here so that triple backticks can be included within the example, but when creating / editing a `SKILL.md`, most of it should not be indented.

Note also that `SKILL.md` files do not necessarily need to provide and use helper tools; however it's included this example skill for illustrative purposes.

    ---
    name: example-skill
    description: Process example files with specific formatting. Use when users mention examples, processing, or .example files.
    ---

    # Example Skill

    Process example files following consistent patterns.

    ## When to Use This Skill

    - When processing .example files
    - When users ask about example formatting
    - When converting example formats

    ## How It Works

    1. Read the input file using the example-parser tool
    2. Apply formatting rules from references/rules.md
    3. Write output to destination

    ## Usage

    ```bash
    python scripts/process_example.py input.example output.txt
    ```

    ## How to use the example-parser tool

    ```python
    from example_parser import parse

    result = parse("data.example")
    print(result.summary)
    ```

    ## Reference Files

    - [Formatting Rules](references/rules.md)
    - [Parser Documentation](references/parser.md)

## Best Practices

### Naming Conventions

Use gerunds or gerundial nouns:

- **Gerunds** (verb + -ing): `processing-pdfs`, `analyzing-spreadsheets`, `managing-databases`
- **Gerundial nouns** (verb-derived nouns): `generation`, `authoring`, `initialization`, `management`

- ✅ `processing-pdfs`, `generating-prps`, `authoring-skills`
- ❌ `pdf-helper`, `data-utils`, `skill-creator`

### Writing Effective Descriptions

- Write in third person (not "I can help" but "Processes files")
- Include specific triggers: "Use when working with PDF files or when users mention PDFs, forms, or document extraction"
- Be specific about capabilities and contexts

### Progressive Disclosure Patterns

#### High-Level Guide with References

```
# PDF Processing

## Quick start

Extract text with pdfplumber:

```python
import pdfplumber
with pdfplumber.open("file.pdf") as pdf:
    text = pdf.pages[0].extract_text()
```

## Common Anti-Patterns to Avoid

### Over-Verbose Instructions

- ❌ Paragraphs explaining basic concepts Claude knows
- ✅ Concise examples that demonstrate patterns

### Deep Reference Nesting

- ❌ SKILL.md → file1.md → file2.md → file3.md
- ✅ SKILL.md → file1.md, file2.md, file3.md (one level deep)

### Time-Sensitive Content

- ❌ "Current best practice as of 2025"
- ✅ "Current best practice (see [UPDATES.md](references/updates.md))"

### Windows Path Usage

- ❌ `scripts\helper.py`
- ✅ `scripts/helper.py`

## Executable Scripts Best Practices

### Solve Problems, Don't Punt

Handle errors explicitly rather than letting Claude figure it out:

```python
# Good: Handle file not found

def process_file(path):
    try:
        with open(path) as f:
            return f.read()
    except FileNotFoundError:
        print(f"File {path} not found, creating default")
        with open(path, 'w') as f:
            f.write('')
        return ''
```

### Provide Utility Scripts

Pre-made scripts offer advantages:

- More reliable than generated code
- Save tokens (no need to load contents)
- Ensure consistency across uses

## References

For complete official guidelines, see:
- [Anthropic Skill Authoring Best Practices](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices)
- [Skills Overview](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview)
- [Progressive Disclosure Architecture](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview#how-skills-work)

Related Skills

subagent-authoring

9
from aspiers/ai-config

Create subagent definitions for Claude Code and OpenCode that delegate to skills. Use when creating new subagents or refactoring existing ones to follow the delegation pattern.

agent-command-authoring

9
from aspiers/ai-config

Create Claude Code slash commands, OpenCode command files, and Pi prompt templates that delegate to the right subagent or skill. Use when creating new commands or refactoring existing ones to follow platform conventions.

xlsx-to-csv

9
from aspiers/ai-config

Convert XLSX spreadsheets (single or multi-sheet) to CSV files you can read and grep. Use whenever you need to process an .xlsx report from Xero, Cryptio, bank exports, or any tool that delivers spreadsheet output.

xero-mcp

9
from aspiers/ai-config

Use the Xero MCP server — obtain/refresh OAuth2 bearer tokens, troubleshoot authentication, and pick up other operational notes for working with Xero MCP tools. Use when Xero MCP tools fail with authentication errors, when the bearer token has expired (tokens last ~30 min), before starting any Xero workflow, or for general guidance on Xero MCP usage.

xero-browser

9
from aspiers/ai-config

General Xero browser automation notes. Use when automating any Xero page with agent-browser — covers non-standard UI patterns, waiting, and dropdown menus.

test-running

9
from aspiers/ai-config

Run tests according to repository guidelines. Use after linting passes, before staging changes.

task-orchestration

9
from aspiers/ai-config

Orchestrate the complete development workflow for implementing sub-tasks from a task list. Use for end-to-end feature implementation with quality controls.

task-implementation

9
from aspiers/ai-config

Implement a single sub-task from a task list. Use when working on feature development with existing task lists.

task-generation

9
from aspiers/ai-config

Generate a detailed task list from a PRP. Use after a PRP is created and ready for implementation planning.

slow-command-running

9
from aspiers/ai-config

Pipe long running commands through tee(1) to allow watching output and repeated analyses without rerunning

safe-rm

9
from aspiers/ai-config

Safely delete files / directories without asking for permission

prp-generation

9
from aspiers/ai-config

Generate a Product Requirements Prompt (PRP) from a feature description. Use when starting work on a new feature.