Check Dimensions
Checks are organized into four dimensions:- Structure - File organization, frontmatter format, folder validation
- Naming - Name format and consistency requirements
- Content - Body quality, token budgets, examples, and references
- Description - Description field requirements
Severity Levels
Each check has a severity level that affects scoring:| Severity | Impact | Description |
|---|---|---|
| ERROR | High | Spec violations or critical issues |
| WARNING | Medium | Quality issues that should be fixed |
| INFO | Low | Suggestions for improvement |
Spec-Required vs. Quality Checks
Of the 28 total checks:- 10 checks are spec-required (must pass for spec compliance)
- 18 checks are quality suggestions (best practices)
sklab evaluate -s to run only spec-required checks.
All Checks Summary
Structure Checks (7)
| Check ID | Severity | Spec Required | Description |
|---|---|---|---|
structure.skill-md-exists | ERROR | Yes | SKILL.md file exists in the skill directory |
structure.valid-frontmatter | ERROR | Yes | YAML frontmatter is parseable and valid |
structure.standard-frontmatter-fields | WARNING | No | Frontmatter contains only fields defined in the Agent Skills spec |
structure.scripts-valid | WARNING | No | /scripts contains only .py, .sh, .js, .ts, .bash, .rb files |
structure.references-valid | WARNING | No | /references contains only .md, .txt, .rst files |
structure.scripts-no-interactive | WARNING | No | Scripts do not use interactive input (agents run non-interactive shells) |
structure.scripts-self-contained | INFO | No | Scripts folder has no loose dependency manifests |
Naming Checks (1)
| Check ID | Severity | Spec Required | Description |
|---|---|---|---|
naming.matches-directory | ERROR | Yes | Name must match the parent directory name |
Content Checks (11)
| Check ID | Severity | Spec Required | Description |
|---|---|---|---|
content.body-not-empty | WARNING | No | SKILL.md body has meaningful content |
content.line-budget | WARNING | No | Body is under 500 lines |
content.token-budget | WARNING | No | Body is under 5000 tokens |
content.metadata-token-budget | INFO | No | Metadata is under 150 tokens for efficient discovery |
content.has-examples | INFO | No | Content contains code examples |
content.description-actionable | INFO | No | Description explains when to use this skill |
content.reference-depth | WARNING | No | References are max 1 level deep |
content.scripts-referenced | WARNING | No | Scripts in scripts/ are mentioned in the SKILL.md body |
content.script-paths-exist | WARNING | No | Script paths referenced in body resolve to files on disk |
content.asset-paths-exist | WARNING | No | Asset paths referenced in body resolve to files on disk |
content.compatibility-prereqs | INFO | No | Command runners in body are documented in compatibility field |
Schema Checks (9)
These checks validate frontmatter fields:| Check ID | Severity | Spec Required | Description |
|---|---|---|---|
naming.required | ERROR | Yes | Name field is present in frontmatter |
naming.format | ERROR | Yes | Name is lowercase, hyphen-separated, max 64 chars |
description.required | ERROR | Yes | Description field is present in frontmatter |
description.not-empty | ERROR | Yes | Description is not empty or whitespace-only |
description.max-length | ERROR | Yes | Description is under 1024 characters |
frontmatter.compatibility-length | ERROR | Yes | Compatibility field is under 500 characters if provided |
frontmatter.metadata-format | ERROR | Yes | Metadata field is a string-to-string mapping if provided |
frontmatter.license-format | WARNING | No | License field is a string if provided |
frontmatter.allowed-tools-format | WARNING | No | Allowed-tools field is a space-delimited string if provided |
Usage
Run all checks:Implementation Details
Skill Lab uses two patterns for implementing checks:- Behavioral checks - Hand-written classes with
@register_checkdecorator (structure, naming, content) - Schema checks - Declarative
FieldRuledefinitions that are automatically converted to check classes
CheckResult objects and are executed by the StaticEvaluator.
For detailed information about each check, see the dimension-specific pages: