From director-mode-lite
Validates skill file format and structure against the official Claude Code spec. Use after creating or editing a skill or when a skill fails to load.
How this skill is triggered — by the user, by Claude, or both
Slash command
/director-mode-lite:skill-checkThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Validate skill files for correct format against the official Claude Code spec.
Validate skill files for correct format against the official Claude Code spec.
.claude/skills/*/SKILL.mdSkills support these fields. Only description is meaningfully required (a
skill with none of these still loads — name defaults to the directory name).
---
name: skill-name # Optional: defaults to directory name; lowercase, hyphenated
description: What it does # Recommended: shown in / menu and used for triggering
when_to_use: When to reach for it # Optional: appended to description for triggering
# (description + when_to_use truncated at 1,536 chars in listings)
user-invocable: true # Optional: default true; false hides from / menu (Skill tool still works)
model: sonnet # Optional: fable, opus, sonnet, haiku, inherit, default, best,
# sonnet[1m], opus[1m] (or a full model ID). NOT opusplan (session-only)
effort: medium # Optional: low, medium, high, xhigh, max
allowed-tools: # Optional: pre-approved tools. Accepts a comma-separated string
- Read # OR a YAML list — BOTH are official (list shown here as house style)
- Write
- Bash
disallowed-tools: # Optional: explicitly blocked tools (string or YAML list)
- WebFetch
context: fork # Optional: run the skill in a subagent
agent: agent-name # Optional: subagent type when context: fork (default: general-purpose)
argument-hint: "[issue-number]" # Optional: autocomplete hint shown after the skill name
arguments: target flags # Optional: space-separated argument NAMES for $name substitution
# (e.g. arguments "target flags" -> use $target and $flags in the body).
# NOT a structured array of name/description/required objects.
disable-model-invocation: false # Optional: bool; true also blocks scheduled-task invocation
paths: # Optional: glob patterns that limit where the skill activates
- "src/**/*.ts"
shell: bash # Optional: bash or powershell for inline !`command` blocks
hooks: # Optional: skill-scoped lifecycle hooks (same schema as settings.json)
PreToolUse:
- matcher: Write
hooks:
- type: command
command: ./scripts/validate.sh
Stop:
- hooks:
- type: command
command: ./scripts/verify.sh
once: true
---
Read, Write, Edit, Bash, Grep, Glob, Agent (Task = legacy alias),
Skill, WebFetch, WebSearch, TodoWrite, NotebookEdit, AskUserQuestion
metadata, license, version # Not part of the skill spec; harmless but should be removed
once # Valid ONLY inside a hooks[] entry, never at skill top level
description present (recommended; used for the / menu and triggering)name, if present, is lowercase and hyphenated (defaults to directory name if omitted)allowed-tools / disallowed-tools are valid tool namesallowed-tools / disallowed-tools are a comma-separated string OR a YAML list (both valid)model is a valid value: fable, opus, sonnet, haiku, inherit, default, best, sonnet[1m], opus[1m], or a full model ID (NOT opusplan)effort is one of: low, medium, high, xhigh, maxcontext is fork (if specified)agent only set alongside context: fork (defaults to general-purpose)argument-hint is a stringarguments is a space-separated string of argument names (NOT a structured array)when_to_use is a descriptive string (appended to description for triggering)disable-model-invocation is booleanpaths is a list of glob patternsshell is bash or powershelluser-invocable is booleanhooks has valid structure (matcher + hooks[] with type/command)metadata, license, versiononce used at the top level (only valid inside a hooks[] entry)$ARGUMENTS (or $name per arguments) if expecting input## Skill Validation Report
### Files Checked
| File | Status | Issues |
|------|--------|--------|
| workflow/SKILL.md | OK | None |
| my-skill/SKILL.md | WARN | Missing description |
### Summary
- Total: [N]
- Valid: [N]
- Needs fixes: [N]
name from directory namedescriptionallowed-tools string to a YAML list (house style only — the string form is valid; do NOT flag it as an error)metadata, license, version)arguments array to a space-separated name stringopusplan model with a supported value$ARGUMENTS handlingnpx claudepluginhub claude-world/director-mode-lite --plugin director-mode-liteValidates SKILL.md files against the agentskills specification. Catches structural, semantic, and naming issues before publishing or debugging skills.
Internal development tool that validates all SKILL.md and agent .md files against the Claude Code spec. Checks frontmatter completeness, field validity, allowed-tools presence, line count, hardcoded paths, and description quality. Use when the user says "lint skills", "validate skills", "check skill quality", "run the linter", "are my skills valid", or before shipping changes to the skills repo.
Validates SKILL.md files against the agentskills.io standard, checking YAML frontmatter, required sections, line count limits, procedure format, and registry sync. Use before merging new or modified skills.