Interactive skill creation and eval-driven optimization. Triggers: create a skill, make a skill, new skill, scaffold skill, optimize skill, run evals, improve skill. Uses AskUserQuestion for interview; WebSearch for research; Bash for eval execution. Outputs: complete skill directory with SKILL.md, tile.json, evals, and repo integration.
93
94%
Does it follow best practices?
Impact
91%
1.26xAverage score across 3 eval scenarios
Passed
No known issues
Use after Phase 1 (interview) completes and the decision map passes the completeness check. Cross-check generated SKILL.md content with activation-design.
skills/<skill-name>/
├── SKILL.md
├── tile.json
├── rules/ # optional
│ └── *.md
├── evals/ # optional; often added in Phase 3
│ └── <slug>/
│ ├── task.md
│ └── criteria.json
└── benchmark-log.md # created when evals run (Phase 6)---
name: <skill-name>
description: "<Purpose>. Triggers: <trigger terms>. Uses <tools>. Outputs: <deliverables>. Do NOT use for: <exclusions>."
metadata:
version: "1.0.0"
tags: <domain tags>
---metadata.version: Required on every SKILL.md — semver string (MAJOR.MINOR.PATCH). New skills start at 1.0.0; bump when behavior or user-facing guidance changes materially (patch for small clarifications, minor for new sections or workflow changes, major for breaking rewrites).Length: Target 150–400 lines. If longer, move secondary material into rules/<name>.md with YAML frontmatter (name, description) and link from SKILL.md.
Exact shape:
{
"name": "oh-my-ai/<skill-name>",
"version": "1.0.0",
"private": false,
"summary": "<one-line purpose>",
"skills": {
"<skill-name>": { "path": "SKILL.md" }
}
}name must be oh-my-ai/<skill-name> matching the directory name under skills/.| Need | Action |
|---|---|
| Rules split | rules/<rule-name>.md with frontmatter name, description; link from SKILL.md with relative paths. |
| Templates | Files at skill root or subdirs; reference from SKILL.md. |
Do not add or edit skills-lock.json. That file pins vendored copies under .agents/skills/. First-party tiles under skills/ are registered only via README and CI.
| Skill | Description | table. Insert a new row in alphabetical order by skill name. Skip if skills/<skill-name>/ is already listed..github/workflows/tessl-publish.yml: under matrix.tile, append - skills/<skill-name> if not already present.After editing the workflow file, validate YAML parses, e.g.:
python3 -c "import yaml; yaml.safe_load(open('.github/workflows/tessl-publish.yml'))"If validation fails, revert the CI edit and report the error.
Preferred: From repo root or tile directory:
cd skills/<skill-name> && tessl tile lintIf tessl is unavailable — simulated checks:
name, description, and metadata.version present.name, version, summary, skills present; name equals oh-my-ai/<skill-name>.rules/*.md has YAML frontmatter with name and description.Fix failures before handing off the scaffold.