Skill Creator
Propose, test, validate, and improve Skill candidates without mutating active Skill files.
Usage
/skill-creator create <name> "<description>"
/skill-creator test <skill-name> "<test input>"
/skill-creator optimize <skill-name>
/skill-creator optimize <skill-name> --advanced [--iterations N]
/skill-creator optimize-description <skill-name> [--iterations N]
/skill-creator validate <skill-path>
/skill-creator list-templates
Skill Anatomy
skill-name/
├── SKILL.md (required) YAML frontmatter + Markdown instructions
└── handler.js (required) init() + execute() exports
SKILL.md Structure
---
name: my-skill # Unique identifier (lowercase, hyphens)
display-name: My Skill # Human-readable name
description: What + When # CRITICAL: include what it does AND when to use it
version: 1.0.0
category: development # knowledge|automation|development|system|media|productivity
user-invocable: true
tags: [relevant, keywords]
capabilities: [what-it-can-do]
handler: ./handler.js
os: [win32, darwin, linux]
tools: [tool-names]
instructions: |
When to use this skill and how
examples:
- input: "example command"
action: action-name
---
# Skill Title
## Usage
## Actions
## Examples
handler.js Structure
module.exports = {
async init(skill) {
/* load dependencies */
},
async execute(task, context = {}, skill) {
const input = task.input || task.args || "";
// Parse input, execute action, return result
return { success: true, action, result, message };
},
};
Writing Tips
- Description: Include both what + when. Be slightly "pushy" for better triggering
- Keep SKILL.md under 500 lines; use reference files for more
- Progressive Disclosure: Metadata always loaded, body loaded on trigger
- Examples are crucial: Include 2-4 realistic usage examples
- Test early: Create test cases after initial draft
Actions
| Action | Description |
|---|---|
create |
Return an in-memory SKILL.md + handler.js candidate and diff; do not persist or activate it |
test |
Run skill with sample input and verify output |
optimize |
Quick heuristic check on description (length, keywords) |
optimize-description |
LLM-driven eval loop that returns proposed SKILL.md content, a diff, and in-band evidence; active bytes stay unchanged |
validate |
Check SKILL.md format and required fields |