# Skill Creator

> Propose, test, validate, and improve Skill candidates without changing active files - generate reviewable SKILL.md and handler.js drafts, run test evaluations, and optimize descriptions for better triggering

- Skill: `chainlesschain/skill-creator` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add chainlesschain/skill-creator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/chainlesschain/skill-creator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- License: MIT
- Author: chainlesschain (https://skillmd.com/u/chainlesschain)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/chainlesschain/skill-creator

---


# 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

```yaml
---
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

```javascript
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                                                                              |

