creating-agent-skills-skill
$
npx mdskill add AgentWorkforce/relay/creating-agent-skills-skillDefine portable AI agent capabilities for Codex, Copilot, and Amp.
- Creates standardized SKILL.md packages for cross-platform agent deployment.
- Enforces frontmatter constraints and directory structure for validation.
- Generates executable scripts and static assets within the skill directory.
- Ensures consistent agent behavior across Codex CLI, GitHub Copilot, and Amp.
SKILL.md
.github/skills/creating-agent-skills-skillView on GitHub ↗
---
name: creating-agent-skills-skill
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
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
### 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
---
```
#### 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
---
```
### Name Validation
#### ```
```
✅ Valid: pdf-processing, code-review, data-analysis
❌ Invalid: PDF-Processing (uppercase), -pdf (leading hyphen), pdf--processing (consecutive hyphens)
```
### Description Best Practices
#### ```yaml
```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.
```
### 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/
```python
#!/usr/bin/env python3
# scripts/extract.py
import sys
# Self-contained with clear dependencies
```
### Complete Example
#### 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
```
### 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
```More from AgentWorkforce/relay
- adding-swarm-patternsUse when adding new multi-agent coordination patterns to agent-relay - provides checklist for types, schema, templates, and docs updates
- agent-relayUse when you need Codex to coordinate multiple agents through Relaycast for peer-to-peer messaging, lead/worker handoffs, or shared status tracking across sub-agents and terminals.
- agent-relay-orchestratorRun headless multi-agent orchestration sessions via Agent Relay. Use when spawning teams of agents, creating channels for coordination, managing agent lifecycle, and running parallel workloads across Claude/Codex/Gemini/Pi/Droid agents.
- browser-testing-with-screenshotsUse when testing web applications with visual verification - automates Chrome browser interactions, element selection, and screenshot capture for confirming UI functionality
- choosing-swarm-patternsUse when coordinating multiple AI agents and need to pick the right orchestration pattern - covers 10 patterns (fan-out, pipeline, hub-spoke, consensus, mesh, handoff, cascade, dag, debate, hierarchical) with decision framework and reflection protocol
- creating-claude-agentsUse when creating or improving Claude Code agents. Expert guidance on agent file structure, frontmatter, persona definition, tool access, model selection, and validation against schema.
- creating-claude-hooksUse when creating or publishing Claude Code hooks - covers executable format, event types, JSON I/O, exit codes, security requirements, and PRPM package structure
- creating-claude-rulesUse when creating or fixing .claude/rules/ files - provides correct paths frontmatter (not globs), glob patterns, and avoids Cursor-specific fields like alwaysApply
- creating-skillsUse when creating new Claude Code skills or improving existing ones - ensures skills are discoverable, scannable, and effective through proper structure, CSO optimization, and real examples
- debugging-websocket-issuesUse when seeing WebSocket errors like "Invalid frame header", "RSV1 must be clear", or "WS_ERR_UNEXPECTED_RSV_1" - covers multiple WebSocketServer conflicts, compression issues, and raw frame debugging techniques