Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Validate both YAML frontmatter formats (SKILL.md for Claude Code) and IANA-registered project.faf formats. Use when user asks "validate my skill", "check YAML format", "is my SKILL.md correct", or needs to verify format compliance for either Claude Code skills or project.faf files.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 175% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 182% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 165% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 146% | 0% |
Validate two distinct YAML formats in the FAF ecosystem:
The Goal: Ensure both tooling (Skills) and infrastructure (project.faf) maintain format integrity.
This skill activates when the user:
Trigger Words: validate, check format, SKILL.md, project.faf, YAML, frontmatter, format compliance
Purpose: Configure Claude Code skill activation
Required Structure:
yaml--- name: skill-name description: One-sentence description with trigger words allowed-tools: Tool1, Tool2, Tool3 --- # Skill Title ## Purpose ...
Required Fields:
name - Skill identifier (kebab-case)description - Comprehensive description with trigger phrasesallowed-tools - List of tools the skill can useOptional Fields:
version - Skill version (semantic)author - Skill creatorValidation Checks:
---name field present (lowercase, kebab-case)description field present (100+ characters recommended)allowed-tools field presentPurpose: Universal project DNA for ANY AI
Required Structure:
yamlformat: name: FAF version: 3.0.0 iana_media_type: application/vnd.faf+yaml project: name: Project Name version: 1.0.0 architecture: type: web-app stack: []
Required Fields:
format.name - Must be "FAF"format.version - Must be "3.0.0" or higherformat.iana_media_type - Must be "application/vnd.faf+yaml"project.name - Project namearchitecture.type - Architecture typeValidation Checks:
Auto-detection logic:
bash# Check if SKILL.md (frontmatter) if file contains "---" at line 1 AND markdown content: → Validate as SKILL.md format # Check if project.faf (IANA) if file has .faf extension OR contains "iana_media_type": → Validate as project.faf format # Check if both (ERROR) if file has both frontmatter AND iana_media_type: → ERROR: Mixed formats detected
Validation workflow:
bashcat skills/faf-teacher/SKILL.md
yaml# Must start with --- # Must have name, description, allowed-tools # Must end with ---
✅ SKILL.md Format Valid
Name: faf-teacher
Description: 150 characters (✅ comprehensive)
Tools: Read, WebFetch (✅ valid)
Sections: 8 found (✅ complete)Validation workflow:
bashfaf validate
yamlformat: iana_media_type: application/vnd.faf+yaml # Required
yamlformat: version: 3.0.0 # Must be 3.0.0+
bashfaf score
✅ project.faf Format Valid
Version: 3.0.0 (✅ current)
IANA Media Type: application/vnd.faf+yaml (✅ registered)
Score: 72% (🥇 Gold tier)
Required Fields: 10/10 presentCommon errors:
ERROR 1: Mixed formats
yaml--- name: my-project # ❌ SKILL.md frontmatter description: test --- format: # ❌ project.faf structure iana_media_type: application/vnd.faf+yaml
Solution: Choose one format - either SKILL.md OR project.faf
ERROR 2: Wrong extension
project.md # ❌ Should be project.faf
SKILL.faf # ❌ Should be SKILL.mdSolution: Use correct file extension
ERROR 3: Missing IANA registration
yaml# project.faf without iana_media_type format: name: FAF version: 3.0.0 # ❌ Missing iana_media_type
Solution: Run faf migrate to upgrade
| Check | Required | Common Issues | |-------|----------|---------------| | YAML frontmatter | ✅ Yes | Forgot closing --- | | name field | ✅ Yes | CamelCase instead of kebab-case | | description field | ✅ Yes | Too short (<50 chars) | | allowed-tools | ✅ Yes | Invalid tool names | | Markdown content | ✅ Yes | No sections after frontmatter | | Purpose section | ⚠️ Recommended | Missing purpose statement | | Examples | ⚠️ Recommended | No usage examples |
| Check | Required | Common Issues | |-------|----------|---------------| | Valid YAML | ✅ Yes | Syntax errors, tabs vs spaces | | format.version | ✅ Yes | Old version (v2.x, v1.x) | | iana_media_type | ✅ Yes | Missing or incorrect | | project section | ✅ Yes | Empty or missing | | architecture | ✅ Yes | Undefined architecture type | | Podium score | ⚠️ Quality | Low score (<40%) |
User: "Check if my faf-teacher skill is valid"
Skill Activates:
skills/faf-teacher/SKILL.md ✅ name: faf-teacher (valid) ✅ description: 150 chars (comprehensive) ✅ allowed-tools: Read, WebFetch (valid)
✅ Purpose section found ✅ "When to Use" section found ✅ 5 examples provided
Result:
✅ SKILL.md Format Valid
Skill: faf-teacher
Quality: Championship grade
Sections: 8/8 required sections
Trigger words: 12 identifiedUser: "Is my project.faf valid?"
Skill Activates:
faf validatebash ✅ Valid YAML syntax ✅ Format version: 3.0.0 ✅ IANA media type: application/vnd.faf+yaml ✅ All required fields present
faf score Score: 68% (🥈 Silver tier)
Missing:
Result:
✅ project.faf Valid (Silver tier)
Next: Run `faf enhance` to reach Gold (70%+)User: "Why isn't this working?"
File content:
yaml--- name: my-project --- format: iana_media_type: application/vnd.faf+yaml
Skill Activates:
---)iana_media_type)Result:
❌ Format Conflict Detected
You're mixing two different YAML formats:
- SKILL.md (frontmatter) - For Claude Code skills
- project.faf (IANA) - For project DNA
Choose one:
Option 1 - Creating a skill?
→ Use SKILL.md format
→ File: skills/skill-name/SKILL.md
Option 2 - Describing project?
→ Use project.faf format
→ File: project.faf
→ Run: faf initUse SKILL.md when:
~/.config/claude-code/skills/Structure:
YAML frontmatter (metadata)
+
Markdown content (instructions)Extension: .md
Use project.faf when:
Structure:
Pure YAML (structured data)
No markdownExtension: .faf
bash# Manual validation cat skills/faf-teacher/SKILL.md | head -10 # Check frontmatter grep -A 5 "^---$" skills/faf-teacher/SKILL.md | head -6 # Verify tools grep "allowed-tools:" skills/faf-teacher/SKILL.md
bash# faf-cli validation (recommended) faf validate # Manual YAML check cat project.faf | head -20 # Check IANA registration grep "iana_media_type" project.faf # Get score faf score
Wrong:
skills/faf-teacher/project.faf # ❌ Wrong formatRight:
skills/faf-teacher/SKILL.md # ✅ CorrectWrong:
yaml# In repository root: SKILL.md --- name: my-project # ❌ This is not a skill ---
Right:
yaml# In repository root: project.faf format: iana_media_type: application/vnd.faf+yaml # ✅ Correct
Wrong:
yaml--- format: # ❌ Can't mix frontmatter + IANA iana_media_type: application/vnd.faf+yaml ---
Right: Pick one format, use it correctly
Symptom: Skill won't load in Claude Code
Check:
bash# Must start with --- head -1 skills/skill-name/SKILL.md # Must have closing --- grep -n "^---$" skills/skill-name/SKILL.md
Fix: Ensure frontmatter is properly delimited
Symptom: AI doesn't understand project
Check:
bashfaf validate
Fix: Ensure IANA media type present:
yamlformat: iana_media_type: application/vnd.faf+yaml
Symptom: File has both frontmatter and IANA format
Fix: Separate into two files:
SKILL.md:
project.faf:
Each format serves a distinct role:
For Skills:
For project.faf:
faf validate)faf score)faf migrate)SKILL.md Validation:
project.faf Validation:
Generated by FAF Skill: faf-format-validator v1.0.0 "Two formats. Two purposes. One ecosystem. Validate both."
Other measured skills in the registry, with their headline benchmark lift.