Format Specifications
Complete reference for YMD and PMD formats.
YMD Format
Structure
meta: # Required metadata (grouped)
id: unique_id # snake_case identifier
kind: category # prompt type
version: X.Y.Z # semantic versioning
title: Title # human-readable
section_name: | # Any YAML key (customizable!)
{{ variables }} # Jinja2 variables
{% include "file.pmd" %} # Includes
Metadata Fields
meta.id (required)
- Type: string
- Format: snake_case
- Purpose: Unique identifier
- Example:
code_review_assistant
meta.kind (required)
- Type: string
- Purpose: Category/type of prompt
- Examples:
review,task,api_design,documentation
meta.version (required)
- Type: string
- Format: Semantic versioning (X.Y.Z)
- Purpose: Track changes
- Example:
1.0.0
meta.title (required)
- Type: string
- Purpose: Human-readable description
- Example:
Code Review Assistant
Sections
Sections are fully customizable - not limited to standard names!
Standard Sections (Optional)
Commonly used but not required:
system- Role/persona definitioninstructions- Step-by-step tasksexpected_output- Output format specificationdeveloper- Implementation notesuser- User input template
Custom Sections (Any YAML Key)
Use any descriptive name:
context- Contextual informationconstraints- Limitations and rulesvalidation_rules- Quality criteriaapi_principles- API design principlesreview_focus- Review priorities- Any domain-specific name!
Rule: Use valid YAML key names (snake_case recommended).
Jinja2 Features
Variables
user: |
Analyze {{ code }} for {{ language }}.
Includes
system: |
{% include "roles/expert.pmd" %}
Control Flow
instructions: |
{% if strict_mode %}
Apply strict validation rules.
{% else %}
Apply relaxed rules.
{% endif %}
Loops
examples: |
{% for example in examples %}
- {{ example }}
{% endfor %}
Comments
{# This is a Jinja2 comment - won't appear in output #}
PMD Format
Structure
{# Optional documentation comment
Expected variables:
- var1: description
- var2: description
#}
Markdown content with **formatting**.
{{ variables }}
{% include "other.pmd" %}
Key Rules
PMD files must:
- ❌ Have NO
meta:section - ✅ Be pure Markdown + Jinja2
- ✅ Have single, clear responsibility
- ✅ Document expected variables
Component Types
Leaf PMD
Pure content, no includes:
You are an expert in {{ domain }}.
Your expertise:
- {{ skill_1 }}
- {{ skill_2 }}
Composite PMD
Aggregates other PMDs:
{% include "../roles/senior_dev.pmd" %}
{% include "../shared/principles.pmd" %}
Common Categories
Organize PMDs by purpose:
roles/- Persona definitionschecklists/- Validation listsformats/- Output templatesshared/- Common content[domain]/- Domain-specific (e.g.,languages/,frameworks/)
Composition Rules
Include Resolution
Rule: Includes are relative to current file.
project/
├── prompts/main.ymd
└── components/
├── roles/expert.pmd
└── shared/core.pmd
# In main.ymd:
{% include "../components/roles/expert.pmd" %}
# In roles/expert.pmd:
{% include "../shared/core.pmd" %}
Variable Propagation
Variables flow down through include chain:
YMD defines: domain, language
└─ PMD A uses: domain, language
└─ PMD A.1 uses: domain
└─ PMD B uses: language
All included PMDs have access to variables from YMD.
Composition Patterns
Simple (YMD → PMD)
main.ymd
└─ includes component.pmd
Hierarchical (YMD → PMD → PMD)
main.ymd
└─ includes profile.pmd
└─ includes role.pmd
Multiple Includes
main.ymd
├─ includes role.pmd
├─ includes checklist1.pmd
└─ includes checklist2.pmd
Conditional
{% if condition %}
{% include "path_a.pmd" %}
{% else %}
{% include "path_b.pmd" %}
{% endif %}
Depth Recommendations
| Depth | Status |
|---|---|
| 1-3 levels | ✅ Good |
| 4-5 levels | ✅ Acceptable |
| 6+ levels | ⚠️ Consider refactoring |
Validation Rules
YMD Validation
Required checks:
- Has
meta:section (grouped) - Has id, kind, version, title
- Version follows semver
- At least one section beyond
meta: - Valid YAML syntax
- Valid Jinja2 syntax
- All includes exist
- No circular dependencies
PMD Validation
Required checks:
- NO
meta:section - NO YAML metadata
- Pure Markdown + Jinja2
- Valid Markdown syntax
- Valid Jinja2 syntax
- All includes exist
- No circular dependencies
Composition Validation
Required checks:
- All include paths are relative
- No circular dependencies
- Depth reasonable (≤5 levels)
- All variables defined or documented
Naming Conventions
Files
- YMD:
snake_case.ymd(e.g.,code_review_assistant.ymd) - PMD:
snake_case.pmd(e.g.,senior_developer_role.pmd)
Identifiers
- IDs:
snake_case(e.g.,api_design_assistant) - Sections:
snake_case(e.g.,review_focus,api_principles) - Variables:
snake_case(e.g.,user_id,max_retries)
Folders
- Plural:
roles/,checklists/,formats/ - Lowercase: all lowercase
Best Practices
YMD Best Practices
DO:
- ✅ Group metadata under
meta: - ✅ Use custom sections for clarity
- ✅ Keep thin (mostly includes)
- ✅ Document expected variables
- ✅ Follow semantic versioning
DON’T:
- ❌ Put large content inline (extract to PMD)
- ❌ Duplicate content across YMDs
- ❌ Hardcode values (use variables)
- ❌ Forget version updates
PMD Best Practices
DO:
- ✅ Single responsibility
- ✅ Descriptive filename
- ✅ Document expected variables
- ✅ Organize by category
- ✅ Test independently
DON’T:
- ❌ Add YAML metadata
- ❌ Create circular includes
- ❌ Make giant monoliths
- ❌ Use absolute paths
Composition Best Practices
DO:
- ✅ Document composition structure
- ✅ Keep depth reasonable (≤5 levels)
- ✅ Use relative paths
- ✅ Test include chains
- ✅ Validate no cycles
DON’T:
- ❌ Nest too deeply
- ❌ Create circular includes
- ❌ Over-engineer simple prompts
Common Errors
Error 1: Flat Metadata in YMD
# ❌ WRONG
id: example
kind: task
version: 1.0.0
# ✅ CORRECT
meta:
id: example
kind: task
version: 1.0.0
Error 2: Metadata in PMD
<!-- ❌ WRONG -->
meta:
id: component
<!-- ✅ CORRECT - No metadata in PMD -->
Content here...
Error 3: Circular Includes
# ❌ WRONG
a.pmd includes b.pmd
b.pmd includes c.pmd
c.pmd includes a.pmd # Circular!
# ✅ CORRECT
Extract common content to shared.pmd
Both a.pmd and b.pmd include shared.pmd
Error 4: Missing Pipe
# ❌ WRONG
user:
# ✅ CORRECT
user: |
{{ task }}
Reference Documents
Full specifications available at:
- YMD Format:
~/.claude/ymd-spec/ymd_format_spec.md - PMD Format:
~/.claude/ymd-spec/pmd_format_spec.md - Composition:
~/.claude/ymd-spec/composition_spec.md - Guidelines:
~/.claude/ymd-spec/context/format-guidelines.md - Quick Reference:
~/.claude/ymd-spec/context/quick-reference.md - Cheatsheet:
~/.claude/ymd-spec/cheatsheet/ymd_pmd_cheatsheet.md