Guide for creating effective agent skills. Use when you want to create a new skill, improve an existing skill, or learn best practices for skill development. Helps codify learned patterns into reusable, discoverable skills.
Content & Writing
341 Stars
29 Forks
Updated Jan 12, 2026, 08:03 PM
Why Use This
This skill provides specialized capabilities for joelhooks's codebase.
Use Cases
Developing new features in the joelhooks repository
Refactoring existing code to follow joelhooks standards
Understanding and working with joelhooks's codebase structure
---
name: skill-creator
description: Guide for creating effective agent skills. Use when you want to create a new skill, improve an existing skill, or learn best practices for skill development. Helps codify learned patterns into reusable, discoverable skills.
tags:
- meta
- skills
- learning
- documentation
tools:
- skills_init
- skills_create
- skills_update
- skills_read
---
# Skill Creator
This skill provides guidance for creating effective skills that extend agent capabilities with specialized knowledge, workflows, and tools.
## What Are Skills?
Skills are modular, self-contained packages that extend agent capabilities by providing:
1. **Specialized workflows** - Multi-step procedures for specific domains
2. **Tool integrations** - Instructions for working with specific file formats or APIs
3. **Domain expertise** - Project-specific knowledge, schemas, business logic
4. **Bundled resources** - Scripts, references, and assets for complex tasks
Think of skills as "onboarding guides" that transform a general-purpose agent into a specialized one equipped with procedural knowledge.
## Skill Anatomy
Every skill consists of a required SKILL.md file and optional bundled resources:
```
skill-name/
├── SKILL.md (required)
│ ├── YAML frontmatter (name, description, tags, tools)
│ └── Markdown instructions
└── Bundled Resources (optional)
├── scripts/ - Executable code (run with skills_execute)
└── references/ - Documentation (load with skills_read)
```
### Progressive Disclosure
Skills use a three-level loading system:
1. **Metadata** (name + description) - Always in context (~100 words)
2. **SKILL.md body** - When skill triggers (<5k words)
3. **Bundled resources** - On-demand as needed
Keep SKILL.md lean. Move detailed content to references/.
## Creating a Skill
### Step 1: Understand the Use Cases
Before creating, understand concrete examples:
- What triggers should activate this skill?
- What user requests would benefit from it?
- What workflows does it enable?
**Ask clarifying questions** if scope is unclear.
### Step 2: Initialize the Skill
Use `skills_init` to create the full template structure:
```
skills_init(
name: "my-skill",
description: "Initial description",
directory: ".opencode/skills"
)
```
This creates:
- SKILL.md with TODO placeholders
- scripts/ with example script
- references/ with example doc
### Step 3: Complete the SKILL.md
Fill in the TODO placeholders. Key sections:
**Frontmatter** - Critical for discoverability:
```yaml
---
name: my-skill
description: What it does and WHEN to use it. Be specific about triggering scenarios.
tags:
- category
- domain
tools:
- tool_names_used
---
```
**When to Use** - Specific triggering scenarios:
```markdown
## When to Use This Skill
- When working on X type of task
- When files matching Y pattern are involved
- When the user asks about Z topic
```
**Instructions** - Actionable, imperative form:
```markdown
## Instructions
1. Read the configuration file first
2. Check for existing patterns before creating
3. Always validate output before completing
```
**Examples** - Realistic user requests:
```markdown
## Examples
### Example: Realistic Scenario
**User**: "Help me do X"
**Process**:
1. First step
2. Second step
3. Final step
```
### Step 4: Add Bundled Resources (Optional)
**scripts/** - Executable helpers:
- Use for repeated automation
- Token-efficient (run without reading)
- Run via `skills_execute`
**references/** - On-demand documentation:
- Detailed guides too long for SKILL.md
- API documentation
- Complex workflows
- Load via `skills_read`
### Step 5: Test and Iterate
1. Use `skills_use` to load the skill
2. Try it on real tasks
3. Notice struggles or inefficiencies
4. Update SKILL.md based on experience
5. Test again
## Best Practices
### Metadata Quality
The `name` and `description` determine when the skill triggers:
**Good descriptions**:
- "Guide for creating MCP servers. Use when building tools that connect LLMs to external APIs."
- "File organization helper. Use when Downloads folder is messy or files need restructuring."
**Bad descriptions**:
- "A useful skill" (too vague)
- "Does stuff with files" (not actionable)
### Writing Style
Use **imperative/infinitive form** throughout:
- "Read the file first" (not "You should read the file")
- "Check for patterns" (not "Consider checking patterns")
### Keep SKILL.md Lean
- Core instructions only (<5k words)
- Move details to references/
- Use examples sparingly
- Delete placeholder sections
### Design for Discoverability
- Tags help agents find skills by category
- "When to Use" sections enable proper triggering
- Tools list shows what capabilities the skill uses
## Quick Reference
### Creating Skills
| Tool | Use When |
|------|----------|
| `skills_init` | Want full template structure with TODOs |
| `skills_create` | Have complete content ready to write |
| `swarm_learn` | Converting learned patterns to skills |
### Managing Skills
| Tool | Use For |
|------|---------|
| `skills_list` | Discover available skills |
| `skills_use` | Activate a skill by loading its content |
| `skills_read` | Load a reference file from a skill |
| `skills_update` | Modify an existing skill |
| `skills_delete` | Remove an obsolete skill |
### Execution
| Tool | Use For |
|------|---------|
| `skills_execute` | Run a script from a skill |
| `skills_add_script` | Add a new script to a skill |
## From Learned Patterns to Skills
When you discover something reusable during work:
1. **Identify the pattern** - What worked well?
2. **Consider scope** - Is it project-specific or universal?
3. **Use `swarm_learn`** - Document the learning
4. **Create the skill** - Use `create_skill=true` or `skills_init`
5. **Test and refine** - Iterate based on usage
Skills make swarms smarter over time by preserving learned knowledge for future agents.