Creating Skills

Master the art of skill authoring. Build reusable, powerful AI instructions that work across all platforms.

🧬 Skill Anatomy

Every OMNISKILL skill lives in its own directory under skills/ and follows this structure:

📁 skills/my-skill/
📄 SKILL.md — Instructions the AI agent follows
📄 manifest.yaml — Metadata, triggers, dependencies
📁 resources/ — Reference materials
📁 examples/ — Sample interactions
📁 templates/ — Output templates
📁 tests/cases/ — Validation test cases
📁 overrides/ — Platform-specific overrides

Step 1: manifest.yaml

The manifest declares everything about your skill except the instructions themselves:

YAML
name: my-awesome-skill
version: 1.0.0
description: "What this skill does in one sentence"
author: your-name
license: MIT

platforms: [claude-code, copilot-cli, cursor, windsurf, antigravity]

tags: [domain, category, keywords]

triggers:
  keywords: ["exact phrase 1", "exact phrase 2"]
  patterns: ["pattern with * wildcards"]

priority: P2

Trigger Design Tips

💡
  • Be specific: "create React component" is better than "create component"
  • Avoid conflicts: Check existing skills' triggers before choosing yours
  • Use patterns: "review * code" matches "review Python code", "review my code", etc.

Step 2: SKILL.md

This is the instruction file the AI agent reads. Required sections:

🎭 Identity

Who is this skill? What's its role and personality?

MARKDOWN
# My Awesome Skill

You are a **specialist** in [domain]. Your role is to [primary function]...

## Core Identity
- Expert in [area]
- Focused on [goals]
- Prioritizes [values]

🎯 When to Use

Trigger conditions, keywords, and anti-patterns (when NOT to use).

MARKDOWN
## When to Use

Activate this skill when:
- User asks to [scenario 1]
- User mentions [keyword]
- [Specific condition]

Do NOT use this skill when:
- [Anti-pattern 1]
- [Out of scope scenario]

⚙️ Workflow

Step-by-step process the agent follows.

MARKDOWN
## Workflow

1. **Analyze** — Understand the request
2. **Plan** — Determine approach
3. **Execute** — Perform the task
4. **Validate** — Verify output quality
5. **Document** — Create artifacts

📏 Rules

DO and DON'T lists — guardrails for the agent.

MARKDOWN
## Rules

### DO:
- Follow best practices for [domain]
- Validate all inputs
- Document decisions

### DON'T:
- Skip validation steps
- Make assumptions about [X]
- Proceed without confirmation

📦 Output Format

What the skill produces, in what format, saved where.

MARKDOWN
## Output Format

Produce a [type of file] with:
- Section A containing [content]
- Section B containing [content]

Save to: `output/[filename]`

🤝 Handoff

What happens after the skill completes.

MARKDOWN
## Handoff

After completion:
- Inform user that [artifact] is ready
- Suggest next step: [action]
- If part of pipeline, pass [artifact] to [next agent]

Step 3: Resources (Optional but Recommended)

Add reference materials the agent can consult:

📁 resources/
📄 cheat-sheet.md — Quick reference for the domain
📄 style-guide.md — Standards the output should follow
📄 decision-tree.md — Logic for complex decisions
📄 lookup-table.md — Values to look up, not guess

Declare resources in your manifest:

YAML
resources:
  - path: resources/cheat-sheet.md
    type: cheat-sheet
    load: always
  - path: resources/style-guide.md
    type: style-guide
    load: on-demand

Step 4: Tests

Add test cases in tests/cases/ to validate your skill:

tests/cases/basic.yaml
name: "Basic skill test"
input: "User prompt that should trigger this skill"
expected:
  contains: ["expected output pattern"]
  not_contains: ["things that should NOT be in output"]
  sections: ["required output sections"]

---

name: "Edge case test"
input: "Complex scenario prompt"
expected:
  contains: ["specific behavior"]
  format: "expected file format"
Testing Best Practices
  • Test both happy path and edge cases
  • Validate trigger matching accuracy
  • Check output format compliance
  • Ensure resource loading works

Step 5: Validate

Run the validation script to ensure your skill is well-formed:

$ python scripts/validate.py skills/my-awesome-skill

The validator checks:

⚠️
Common Validation Errors
  • Missing required sections in SKILL.md
  • Trigger conflicts with existing skills
  • Referenced resources don't exist
  • Invalid YAML syntax in manifest

Step 6: Platform Overrides (Optional)

If your skill needs different behavior on specific platforms:

📁 overrides/
📄 cursor.md — Cursor-specific instructions
📄 windsurf.md — Windsurf-specific instructions

These are merged with the base SKILL.md during adapter transformation.

overrides/cursor.md
# Cursor-Specific Behavior

## Additional Rules for Cursor
- Use Cursor's native file navigation
- Leverage Cursor's inline suggestions
- Output format adjusted for .mdc rules

✨ Best Practices

1. Single Responsibility

Each skill should do one thing exceptionally well. If your skill does multiple unrelated things, split it into separate skills and compose them with a bundle.

2. Clear Triggers

Make triggers specific enough to avoid false positives, but broad enough to be useful. Test your triggers against real user prompts.

3. Comprehensive Resources

Don't rely on the AI's general knowledge for domain-specific facts. Provide cheat sheets, lookup tables, and style guides.

4. Detailed Workflow

The more explicit your workflow, the more consistent the output. Don't skip steps or leave things to interpretation.

5. Robust Testing

Test edge cases, not just happy paths. Your skill will encounter unexpected inputs in the wild.

6. Document Decisions

If your skill makes choices (like selecting a framework or architecture), document the decision-making process in resources.

🤖 Self-Customization Skills

OMNISKILL includes AI-guided skills for creating new skills, bundles, and agents:

The add-skill Skill

Instead of manually following these steps, tell your AI assistant:

💡
Prompt: "Follow the add-skill skill to create a new skill for [domain]"

The add-skill skill provides:

Example Advanced Skills

See these skills as examples of advanced patterns:

Advanced Skill Patterns
skills/
├── complexity-router/    # Classifies task complexity and routes 
│                          # to optimal model tier
└── knowledge-sources/    # Integrates external knowledge 
                           # repositories
Pattern to Study

The complexity-router skill demonstrates how to build a routing skill with P0 priority that runs before all other skills.

⚙️ Generator Tool Pattern

For real-time status visualization, use the async generator pattern:

Python
async def process_task():
    yield {"status": "loading", "message": "Initializing..."}
    # Do work
    yield {"status": "processing", "message": "Analyzing code..."}
    # More work
    yield {"status": "done", "result": output}

This pattern enables the AI assistant to show live progress updates. See skills/_template/resources/tool-pattern.md for the full specification.

💡
When to Use

Use the generator pattern for long-running tasks (>5 seconds) where users benefit from progress updates: code analysis, multi-file operations, API calls, etc.