Conventions for authoring SKILL.md files. Load before creating or reviewing any skill.
This skill defines how skills are structured, written, and maintained so they are consistent, concise, and effective.
Two required fields:
name: Must match the directory name exactly. Lowercase letters, numbers, hyphens only. Max 64 chars.description: One concise sentence. Describes what the skill does. Max 1024 chars.Optional fields:
last_verified: ISO date ('2025-03-04'). Used on domain-specific skills that reference concrete file paths, entity names, or API shapes that may drift over time.The description is the primary trigger mechanism — the model uses it to choose from all available skills.
Good examples from existing skills:
Testing conventions with a generic baseline plus monorepo-specific addendum.Code review checklist and conventions. Load before reviewing a pull request.Conventions for creating and evolving apps in Chirp-style Yarn/Turbo monorepos.Bad: Helps with documents / Processes data / generic descriptions without scope.
Prefer descriptive compound names: language-typescript, workflow-git-cli, develop-monorepo-app, develop-monorepo-package.
Avoid: vague names (helper, utils), overly generic (documents, data), single words when a compound is clearer.
Use # <Descriptive Name> as the first line after frontmatter. Patterns from existing skills:
# TypeScript Skill# Code Review Conventions# Monorepo App Writing# TypeORM Migrations (Monorepo)Skills follow this general structure (not every section is required):
Not every skill needs every section. Small skills skip straight from conventions to rules. Large skills (like language-terraform at 727 lines) have many detailed sections. Scale the structure to the content.
Skills that only apply in specific contexts must start with an applicability check. This pattern is used by monorepo-specific skills and domain-specific skills:
## Applicability
Use this skill only when all are true:
- the target repository is a Turbo/workspace monorepo
- the repository has an `apps/` and/or `packages/` folder at root
- work is being done inside that monorepo repository
If these signals are missing, do not apply this skill.
Skills that are universally applicable (like language-typescript, develop-tests, workflow-git-cli) skip the gate and start with Purpose or Core Rules instead.
Some universally applicable skills have monorepo-specific content that only applies conditionally. These use an addendum section near the end:
## Monorepo-Only Addendum (Turbo/workspaces + `apps/`/`packages/`)
Apply this section only when all are true:
- the target repository is a Turbo/workspace monorepo
- the repository has an `apps/` and/or `packages/` folder at root
- work targets code inside that monorepo repository
This pattern is used by language-typescript, develop-tests, and workflow-git-cli.
Only add context the model doesn't already have. Challenge each piece of information:
Don't explain what well-known libraries, frameworks, or concepts are. Don't restate what tool descriptions already contain. Focus on project-specific conventions and decisions.
Show actual code, actual templates, actual patterns from the codebase. Input/output examples are more effective than descriptions.
Good — actual pattern with real names:
@Controller('feature')
@UseGuards(FirebaseAuthGuard)
@ApiBearerAuth()
export class FeatureController { ... }
Bad — abstract description: "Controllers should use appropriate guards and decorators."
When a skill might conflict with other sources, state the priority explicitly:
## Source of Truth Hierarchy
When rules conflict, apply in this order:
1. Repository lint + compiler rules
2. Existing local pattern in the nearest module/package
3. This skill's defaults
Reference tools by their bare name: jira_create_issue, codebase_find_definition, github_get_pull_request. Do not document tool parameters — the model already has tool descriptions injected automatically.
Keep SKILL.md under 1000 lines for focused skills. Domain-heavy skills (like language-terraform at 727 lines or develop-opencode-plugins at 746 lines) can exceed this when the domain genuinely requires it, but consider whether content could be split.
The range across existing skills:
| Size | Lines | Examples |
|---|---|---|
| Small | < 150 | write-jira-ticket (191) |
| Medium | 150–300 | develop-tests (311) |
| Large | 300+ | language-typescript (600+), workflow-git-cli (450+) |
| Very large | 500+ | language-terraform (727) |
name field doesn't match directory name---) between sections — use headings alone for structurename must match directory name exactlylast_verified on domain-specific skills that reference concrete paths or APIs---) between sections