Skill quality linter
Skill BuilderCed/agent-skills/skills/security/skill-quality-linter
Validate SKILL.md structure, frontmatter completeness, token budget, freshness, naming conventions, and cross-platform portability before publishing.From its SKILL.md
npx -y skills add BuilderCed/agent-skills --skill skill-quality-linterAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
3.6 KB, 785 tokens by cl100k_base, as published. Nobody here has run it
Skill Quality Linter
When to Use
- Before publishing a new skill to a registry
- Reviewing a skill PR
- Auditing existing skill quality
- Setting up CI for a skill repository
Lint Checks
1. Frontmatter (Required Fields)
| Field | Required | Format |
|---|---|---|
| name | YES | kebab-case, matches directory name |
| description | YES | 1 line, max 250 chars, starts with verb |
| version | YES | Semver (X.Y.Z) |
| last-updated | YES | YYYY-MM-DD, not in future |
| platforms | YES | Array of known platform names |
| license | YES | Valid SPDX identifier |
| dependencies | RECOMMENDED | Object with mcp, skills, apis, data |
| update_sources | RECOMMENDED | Array with url + check_frequency |
| language | RECOMMENDED | ISO 639-1 (en, fr, etc.) |
| geo_relevance | RECOMMENDED | Array (global, fr, eu, africa, etc.) |
| category | RECOMMENDED | Matches parent directory name |
| priority | OPTIONAL | critical, high, medium, low |
2. Structure
| Check | Rule |
|---|---|
Starts with --- | Valid YAML frontmatter |
Has # Title | H1 heading after frontmatter |
Has ## When to Use | Trigger conditions documented |
Has ## What This Skill Does NOT Do | Limitations section present |
| No H1 other than title | Single H1 only |
Sections use H2 (##) | Consistent hierarchy |
3. Size Budget
| Metric | Limit | Rationale |
|---|---|---|
| SKILL.md lines | < 800 | ETH Zurich: more = worse perf |
| SKILL.md tokens | < 2500 | Context window budget |
| SKILL.md + references/ | < 3000 tokens | Total load budget |
| references/ file count | < 5 | Keep focused |
4. Portability
| Check | Rule |
|---|---|
| No tool-specific syntax | No Read, Write, Bash, Edit references |
| No platform-specific imports | No import, require, from in instructions |
| Natural language instructions | Steps readable by any agent |
| Graceful degradation | "If terminal available... otherwise..." pattern |
5. Freshness
| Age | Status |
|---|---|
| < 60 days | PASS |
| 60-90 days | WARN — review needed |
| > 90 days | FAIL — must update before use |
6. Naming
| Check | Rule |
|---|---|
| Directory name | kebab-case, no uppercase |
| name field | Matches directory exactly |
| description | Starts with action verb (Guide, Build, Detect, Generate...) |
| No emoji in name/description | Plain text only |
Output Format
LINT: {skill-name}
Status: PASS | WARN | FAIL
[PASS] Frontmatter: all required fields present
[PASS] Structure: all sections present
[WARN] Size: 2800 tokens (approaching 3000 limit)
[PASS] Portability: no platform-specific syntax
[PASS] Freshness: 5 days old
[PASS] Naming: matches conventions
Verdict: PASS (1 warning)
What This Skill Does NOT Do
- Does not check factual accuracy of content
- Does not validate referenced URLs (use separate check)
- Does not scan for security issues (see
skill-security-audit) - Does not auto-fix issues (reports only)
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.