Overview
Fromcore/models.py:17-24:
1. Structure (30% weight)
Focus: File organization, folder validity, and frontmatter structure. The Structure dimension ensures that the skill follows the correct file and folder layout, contains valid YAML frontmatter, and uses appropriate file types.Checks in This Dimension
SKILL.md Exists
SKILL.md Exists
Check ID:
Severity: ERROR
Spec Required: YesVerifies that a
structure.skill-md-existsSeverity: ERROR
Spec Required: YesVerifies that a
SKILL.md file exists in the skill directory. Also warns if skill.md (lowercase) is found instead.Source: structure.py:18-48Valid Frontmatter
Valid Frontmatter
Check ID:
Severity: ERROR
Spec Required: YesValidates that the YAML frontmatter can be parsed without errors and is not empty.Source:
structure.valid-frontmatterSeverity: ERROR
Spec Required: YesValidates that the YAML frontmatter can be parsed without errors and is not empty.Source:
structure.py:52-82Standard Frontmatter Fields
Standard Frontmatter Fields
Check ID:
Severity: WARNING
Spec Required: NoChecks that frontmatter only contains spec-defined fields. Custom fields should be placed in the
structure.standard-frontmatter-fieldsSeverity: WARNING
Spec Required: NoChecks that frontmatter only contains spec-defined fields. Custom fields should be placed in the
metadata map.Spec Fields: name, description, license, compatibility, metadata, allowed-toolsSource: structure.py:177-227Scripts Folder Valid
Scripts Folder Valid
Check ID:
Severity: WARNING
Spec Required: NoEnsures
structure.scripts-validSeverity: WARNING
Spec Required: NoEnsures
/scripts contains only valid script files with extensions: .py, .sh, .js, .ts, .bash, .rbSource: structure.py:86-127References Folder Valid
References Folder Valid
Check ID:
Severity: WARNING
Spec Required: NoEnsures
structure.references-validSeverity: WARNING
Spec Required: NoEnsures
/references contains only valid reference files with extensions: .md, .txt, .rstSource: structure.py:131-172Scripts No Interactive Input
Scripts No Interactive Input
Check ID:
Severity: WARNING
Spec Required: NoDetects interactive input patterns that won’t work in non-interactive shells:
structure.scripts-no-interactiveSeverity: WARNING
Spec Required: NoDetects interactive input patterns that won’t work in non-interactive shells:
- Python:
input(),getpass.getpass() - Shell:
read,select - Ruby:
gets,STDIN.gets - JS/TS:
readline,prompt(),process.stdin
structure.py:257-311Scripts Self-Contained
Scripts Self-Contained
Check ID:
Severity: INFO
Spec Required: NoWarns if
structure.scripts-self-containedSeverity: INFO
Spec Required: NoWarns if
/scripts contains dependency manifests like requirements.txt, package.json, Gemfile, etc.Scripts should use inline metadata (PEP 723) or install dependencies within the script.Source: structure.py:324-3592. Naming (20% weight)
Focus: Skill name format and consistency. The Naming dimension ensures that skill names follow the spec’s kebab-case convention and match the parent directory name for consistency.Checks in This Dimension
Name Matches Directory
Name Matches Directory
Check ID:
Severity: ERROR
Spec Required: YesValidates that the
naming.matches-directorySeverity: ERROR
Spec Required: YesValidates that the
name field in frontmatter matches the parent directory name (after Unicode normalization).Source: naming.py:12-42Schema-Based Naming Checks
Additional naming constraints are enforced through schema-based checks (seeschema.py:76-112):
- Name Required (
naming.required) - Name field must be present - Name Format (
naming.format) - Must be lowercase, hyphen-separated, max 64 chars, no consecutive hyphens
3. Description (25% weight)
Focus: Description field presence, length, and quality. The Description dimension ensures that skills have clear, concise descriptions that help agents understand when to use them.Checks in This Dimension
All description checks are schema-based (fromschema.py:114-155):
Description Required
Description Required
Check ID:
Severity: ERROR
Spec Required: YesEnsures the
description.requiredSeverity: ERROR
Spec Required: YesEnsures the
description field exists in frontmatter.Description Not Empty
Description Not Empty
Check ID:
Severity: ERROR
Spec Required: YesValidates that description is not empty or whitespace-only.
description.not-emptySeverity: ERROR
Spec Required: YesValidates that description is not empty or whitespace-only.
Description Max Length
Description Max Length
Check ID:
Severity: ERROR
Spec Required: YesEnsures description is under 1024 characters.
description.max-lengthSeverity: ERROR
Spec Required: YesEnsures description is under 1024 characters.
Content-Based Description Check
One additional check in the Content dimension analyzes description quality:- Description Actionable (
content.description-actionable) - Checks for activation phrases like “Use when…”, “Designed for…“
4. Content (25% weight)
Focus: SKILL.md body quality, examples, token budgets, and resource references. The Content dimension evaluates the actual instructions and documentation in the skill body.Checks in This Dimension
Body Not Empty
Body Not Empty
Check ID:
Severity: WARNING
Spec Required: NoEnsures the SKILL.md body has meaningful content (at least 50 characters).Source:
content.body-not-emptySeverity: WARNING
Spec Required: NoEnsures the SKILL.md body has meaningful content (at least 50 characters).Source:
content.py:50-79Line Budget
Line Budget
Check ID:
Severity: WARNING
Spec Required: NoValidates that the body is under 500 lines.Source:
content.line-budgetSeverity: WARNING
Spec Required: NoValidates that the body is under 500 lines.Source:
content.py:83-106Has Examples
Has Examples
Check ID:
Severity: INFO
Spec Required: NoChecks for code examples using patterns: fenced code blocks (
content.has-examplesSeverity: INFO
Spec Required: NoChecks for code examples using patterns: fenced code blocks (
```), indented code blocks, or <example> tags.Source: content.py:110-133Reference Depth
Reference Depth
Check ID:
Severity: WARNING
Spec Required: NoEnsures references are maximum 1 level deep to avoid excessive nesting.Source:
content.reference-depthSeverity: WARNING
Spec Required: NoEnsures references are maximum 1 level deep to avoid excessive nesting.Source:
content.py:137-178Scripts Referenced
Scripts Referenced
Check ID:
Severity: WARNING
Spec Required: NoVerifies that scripts in
content.scripts-referencedSeverity: WARNING
Spec Required: NoVerifies that scripts in
/scripts are mentioned in the body so the agent knows they exist.Source: content.py:182-225Script Paths Exist
Script Paths Exist
Check ID:
Severity: WARNING
Spec Required: NoValidates that script paths referenced in the body (e.g.,
content.script-paths-existSeverity: WARNING
Spec Required: NoValidates that script paths referenced in the body (e.g.,
scripts/setup.py) exist on disk.Source: content.py:234-272Compatibility Prerequisites
Compatibility Prerequisites
Check ID:
Severity: INFO
Spec Required: NoChecks that command runners in the body (like
content.compatibility-prereqsSeverity: INFO
Spec Required: NoChecks that command runners in the body (like
npx, uvx, bunx) are documented in the compatibility field.Source: content.py:293-346Token Budget
Token Budget
Check ID:
Severity: WARNING
Spec Required: NoEnsures the body stays under the spec-recommended 5,000 token budget.Source:
content.token-budgetSeverity: WARNING
Spec Required: NoEnsures the body stays under the spec-recommended 5,000 token budget.Source:
content.py:350-372Metadata Token Budget
Metadata Token Budget
Check ID:
Severity: INFO
Spec Required: NoValidates that combined name + description is under 150 tokens for efficient discovery.Source:
content.metadata-token-budgetSeverity: INFO
Spec Required: NoValidates that combined name + description is under 150 tokens for efficient discovery.Source:
content.py:376-407Description Actionable
Description Actionable
Check ID:
Severity: INFO
Spec Required: NoChecks that the description includes activation phrasing (“Use when…”, “Designed for…”, etc.).Activation Phrases:
content.description-actionableSeverity: INFO
Spec Required: NoChecks that the description includes activation phrasing (“Use when…”, “Designed for…”, etc.).Activation Phrases:
use when, use for, use this, trigger, activate, invoke, run when, run this, helps with, designed for, intended for, works withSource: content.py:411-442Asset Paths Exist
Asset Paths Exist
Check ID:
Severity: WARNING
Spec Required: NoValidates that asset paths referenced in the body (e.g.,
content.asset-paths-existSeverity: WARNING
Spec Required: NoValidates that asset paths referenced in the body (e.g.,
assets/template.json) exist on disk.Source: content.py:450-4885. Execution (0% weight in static analysis)
Focus: Runtime behavior from trace analysis (Phase 3). The Execution dimension is reserved for trace-based checks that analyze how skills perform during actual execution. These checks are run separately usingsklab trace and do not contribute to the static analysis quality score.
Execution dimension checks are part of Phase 3 (Trace Analysis) and are not yet fully implemented in v0.4.0.