creating-agent-skills
$
npx mdskill add pr-pm/prpm/creating-agent-skillsGenerate portable AI agent capabilities for multiple platforms.
- Enables agents to define reusable skills across Codex, Copilot, and Amp.
- Validates SKILL.md frontmatter against strict naming and length rules.
- Enforces directory structure with optional scripts and asset folders.
- Ensures consistent skill delivery through standardized agentskills.io format.
SKILL.md
.github/skills/creating-agent-skillsView on GitHub ↗
---
name: creating-agent-skills
description: Use when creating Agent Skills packages (SKILL.md format) for Codex CLI, GitHub Copilot, or Amp - provides the agentskills.io specification with frontmatter constraints, directory structure, and validation rules
---
# Creating Agent Skills
## Overview
Agent Skills is an open standard for portable AI agent capabilities. One SKILL.md file works across Codex CLI, GitHub Copilot, and Amp.
**Official Spec:** https://agentskills.io/specification
## Installation Directories
| Tool | Location |
|------|----------|
| **Codex CLI** | `.agents/skills/{skill-name}/SKILL.md` |
| **GitHub Copilot** | `.github/skills/{skill-name}/SKILL.md` |
| **Amp** | `.agents/skills/{skill-name}/SKILL.md` |
## Directory Structure
```
my-skill/ # Must match frontmatter `name`
├── SKILL.md # Required - main definition
├── scripts/ # Optional - executable code
├── references/ # Optional - additional docs
└── assets/ # Optional - static resources
```
## Frontmatter Specification
### Required Fields
```yaml
---
name: skill-name
description: What it does and when to use it
---
```
| Field | Constraints |
|-------|-------------|
| `name` | 1-64 chars, lowercase alphanumeric + hyphens, no leading/trailing/consecutive hyphens, must match parent directory |
| `description` | 1-1024 chars, explains functionality AND use cases |
### Optional Fields
```yaml
---
name: pdf-processing
description: Extracts and processes PDF content. Use for document analysis and text extraction.
license: MIT
compatibility: Requires pdftotext, poppler-utils
allowed-tools: Bash(pdftotext:*) Read Write
metadata:
category: document-processing
version: 1.0.0
---
```
| Field | Constraints |
|-------|-------------|
| `license` | Short reference (e.g., `MIT`, `Apache-2.0`) |
| `compatibility` | 1-500 chars, environment requirements |
| `allowed-tools` | Space-delimited pre-approved tools (experimental) |
| `metadata` | Arbitrary string key-value pairs |
## Name Validation
```
✅ Valid: pdf-processing, code-review, data-analysis
❌ Invalid: PDF-Processing (uppercase), -pdf (leading hyphen), pdf--processing (consecutive hyphens)
```
**Pattern:** `^[a-z0-9]+(-[a-z0-9]+)*$`
## Description Best Practices
```yaml
# ❌ BAD - Too vague
description: Helps with PDFs
# ❌ BAD - Missing use cases
description: Extracts text from PDFs
# ✅ GOOD - Functionality + use cases
description: Extracts and processes PDF content. Use for document analysis, text extraction, and form data parsing.
```
**Include:**
- What the skill does
- When to activate it (keywords agents search for)
- Specific use cases
## Body Content
Markdown instructions after frontmatter. No format restrictions, but recommended sections:
```markdown
---
name: code-review
description: Reviews code for best practices and security issues. Use when analyzing PRs or conducting audits.
---
## Overview
Brief description of capabilities.
## Process
1. Step-by-step workflow
2. With clear actions
## Guidelines
- Bullet points for rules
- Best practices
## Examples
Code samples showing usage.
```
## Progressive Disclosure
Skills use tiered loading to optimize context:
1. **Metadata** (~100 tokens): `name` + `description` load at startup
2. **Activation** (<5000 tokens): Full `SKILL.md` loads when selected
3. **On-demand**: Supporting files load when referenced
**Keep `SKILL.md` under 500 lines** for efficient context usage.
## Supporting Files
### scripts/
Executable code agents can invoke:
```python
#!/usr/bin/env python3
# scripts/extract.py
import sys
# Self-contained with clear dependencies
```
### references/
Additional documentation:
- `REFERENCE.md` - Technical details
- `FORMS.md` - Templates
- Domain-specific files
### assets/
Static resources: templates, diagrams, lookup tables.
**Reference with relative paths:** `scripts/extract.py`, `references/REFERENCE.md`
## Complete Example
```markdown
---
name: typescript-expert
description: Expert TypeScript assistance with strict typing and modern patterns. Use for TypeScript projects requiring type safety, generics, or advanced type manipulation.
license: MIT
compatibility: Requires Node.js 18+, TypeScript 5+
---
You are an expert TypeScript developer.
## Guidelines
- Always use strict type checking
- Prefer `unknown` over `any`
- Use type guards for runtime checking
- Leverage template literal types
## Best Practices
- Export types from dedicated `.types.ts` files
- Use `readonly` for immutable data
- Prefer interfaces for objects, types for unions
## Examples
### Type Guard
```typescript
function isUser(obj: unknown): obj is User {
return (
typeof obj === 'object' &&
obj !== null &&
'id' in obj &&
'name' in obj
);
}
```
```
## Validation
Use the validation tool:
```bash
skills-ref validate ./my-skill
```
Checks:
- YAML frontmatter validity
- Name format compliance
- Required fields presence
- Directory name matches `name` field
## Quick Checklist
**Frontmatter:**
- [ ] `name` is 1-64 chars, lowercase alphanumeric + hyphens
- [ ] `name` matches parent directory name
- [ ] `description` is 1-1024 chars
- [ ] `description` includes functionality AND use cases
**Content:**
- [ ] Under 500 lines for efficient loading
- [ ] Clear instructions agents can follow
- [ ] Examples for complex operations
**Structure:**
- [ ] Directory named exactly as `name` field
- [ ] `SKILL.md` at directory root
- [ ] Supporting files in appropriate subdirectories
## Cross-Tool Compatibility
The SKILL.md format is identical across implementations. To port:
```bash
# Codex → Copilot
mv .agents/skills/my-skill .github/skills/my-skill
# Copilot → Codex/Amp
mv .github/skills/my-skill .agents/skills/my-skill
```
No content changes required.
More from pr-pm/prpm
- adding-new-ai-formatStep-by-step guide for adding support for a new AI editor format to PRPM - covers types, converters, schemas, CLI, webapp, and testing
- aws-beanstalk-expertExpert knowledge for deploying, managing, and troubleshooting AWS Elastic Beanstalk applications with production best practices
- beanstalk-deployRobust deployment patterns for Elastic Beanstalk with GitHub Actions, Pulumi, and edge case handling
- ci-test-claude-skillCI Test Claude Skill
- ci-test-codex-skillCI Test Codex Skill
- ci-test-droid-skillCI Test Factory Droid Skill
- claude-hook-writerExpert guidance for writing secure, reliable, and performant Claude Code hooks - validates design decisions, enforces best practices, and prevents common pitfalls
- creating-agents-mdUse when creating agents.md files - provides plain markdown format with NO frontmatter, free-form structure, and project context guidelines for AI coding assistants
- creating-claude-commandsExpert guidance for creating Claude Code slash commands with correct frontmatter, structure, and best practices
- creating-continue-packagesUse when creating Continue rules - provides required name field, alwaysApply semantics, glob/regex patterns, and markdown format with optional frontmatter