Check Skill Formatting
Validate skill files against formatting conventions. Catches preprocessing hazards, placeholder violations, and frontmatter issues.
Steps
- Load the
/skillcheckskill (runs preprocessing linter) - Run the placeholder linter to find
[string]patterns that should use{ string }convention - Run the fence linter to find bare code fences and nesting issues
- Run the relative paths linter to find
../references that should use${CLAUDE_PLUGIN_ROOT} - Review findings and fix violations
Placeholder Linter
Scan markdown files for [string] patterns that aren't markdown links or file references:
bun .claude/skills/check-skill-formatting/scripts/lint-placeholders.ts ${ARGUMENTS:-plugins/}
What it catches
Instructional placeholders using brackets instead of braces:
| Found | Expected |
|---|---|
[Complete AWS-specific content] |
{ complete AWS-specific content } |
[Details follow...] |
{ details follow } |
[Section content] |
{ section content } |
What it skips
- Markdown links:
[text](url)or[text](#anchor) - File references:
[file.md],[config.json] - Checkboxes:
[x],[ ],[-] - GitHub admonitions:
[!NOTE],[!WARNING] - Code fences and HTML comments
- All-caps tokens under 12 chars:
[REDACTED],[TIME]
Fence Linter
Scan markdown files for code fence issues — bare fences without language specifiers and broken nesting:
bun plugins/fieldguides/scripts/lint-fences.ts ${ARGUMENTS:-plugins/}
What it catches
- Bare fences: Opening
```without a language (suggests one based on content heuristics) - Broken nesting: Inner fence with same backtick count as outer fence (use
```` for outer)
Fix patterns
| Issue | Fix |
|---|---|
``` with TypeScript content |
```typescript |
``` with shell commands |
```bash |
``` with plain text |
```text |
Inner ``` inside outer ``` |
Use ```` for outer fence |
Relative Paths Linter
Scan markdown files for ../ path references that should use ${CLAUDE_PLUGIN_ROOT}:
bun plugins/fieldguides/scripts/lint-relative-paths.ts ${ARGUMENTS:-plugins/}
What it catches
- Markdown links:
[text](../other-skill/SKILL.md)with relative targets - Bare paths:
../SECURITY.mdreferences in prose
Fix patterns
| Issue | Fix |
|---|---|
[link](../skill-name/SKILL.md) |
[link](${CLAUDE_PLUGIN_ROOT}/skills/skill-name/SKILL.md) |
[link](../patterns/handler.md) |
[link](${CLAUDE_PLUGIN_ROOT}/shared/patterns/handler.md) |
../EXTERNAL.md (outside plugin) |
Remove link or reference by name |