Load, validate, and populate templates consistently across frameworks.
Install via CLI
openskills install jmagly/ai-writing-guide# template-engine
Load, validate, and populate templates consistently across frameworks.
## Triggers
- "create from template [name]"
- "instantiate [template]"
- "new [artifact-type] from template"
- "use template [name]"
- "scaffold [artifact]"
## Purpose
This skill provides a unified template instantiation engine that:
- Locates templates across project, framework, and installation locations
- Parses template structure and placeholders
- Gathers required inputs from context or prompts
- Populates and validates instantiated artifacts
- Integrates with artifact-metadata for tracking
## Behavior
When triggered, this skill:
1. **Locates template**:
- Search project templates first (`.aiwg/templates/`)
- Search active framework templates
- Search AIWG installation templates
- Return first match or list similar templates
2. **Parses template**:
- Extract placeholders (`{{variable}}`, `{variable}`)
- Identify required vs optional sections
- Detect conditional blocks
- Build input requirements list
3. **Gathers inputs**:
- Check context for matching values
- Prompt for missing required values
- Apply defaults for optional values
4. **Instantiates template**:
- Replace all placeholders
- Evaluate conditional sections
- Process loops/repeating sections
- Format output
5. **Validates output**:
- Check all placeholders replaced
- Validate structure
- Create metadata (via artifact-metadata skill)
6. **Saves artifact**:
- Write to appropriate location
- Update artifact index
## Template Discovery Order
```
1. .aiwg/templates/{template-name}.md
2. .aiwg/templates/{category}/{template-name}.md
3. {framework}/templates/{category}/{template-name}.md
4. ~/.local/share/ai-writing-guide/.../{template-name}.md
```
## Template Syntax
### Basic Placeholders
```markdown
# {{project_name}} Architecture Document
**Author**: {{author}}
**Date**: {{date}}
**Version**: {{version|default:0.1.0}}
```
### Conditional Sections
```markdown
{{#if has_database}}
## Database Design
{{database_description}}
{{/if}}
```
### Loops/Repeating Sections
```markdown
## Components
{{#each components}}
### {{name}}
{{description}}
- **Owner**: {{owner}}
- **Dependencies**: {{dependencies}}
{{/each}}
```
### Includes
```markdown
{{> common/header.md}}
## Content
{{> partials/component-table.md}}
```
### Computed Values
```markdown
**Generated**: {{now|format:YYYY-MM-DD}}
**ID**: {{artifact_type}}-{{sequence|pad:3}}
```
## Configuration
### Template Metadata
Each template can have a `.meta.yaml` file:
```yaml
name: software-architecture-document
description: Template for Software Architecture Documents
category: architecture
version: 1.0.0
variables:
- name: project_name
required: true
description: Name of the project
- name: author
required: true
description: Document author
- name: version
required: false
default: "0.1.0"
description: Document version
- name: components
required: false
type: array
description: List of system components
sections:
- name: overview
required: true
- name: database
required: false
condition: has_database
output:
location: .aiwg/architecture/
filename: "{{project_name|kebab}}-sad.md"
```
## Usage Examples
### Basic Template Instantiation
```
User: "Create SAD from template"
Skill executes:
1. Find: sdlc-complete/templates/analysis-design/software-architecture-doc-template.md
2. Parse: Extract placeholders (project_name, author, etc.)
3. Gather: Prompt for required values
4. Instantiate: Replace placeholders
5. Save: .aiwg/architecture/myproject-sad.md
6. Metadata: Create .aiwg/architecture/myproject-sad.metadata.json
```
### With Context
```
User: "New test plan from template for authentication module"
Context provides:
- project_name: "MyProject"
- module: "authentication"
- author: from git config
Skill uses context values, prompts for remaining.
```
### List Available Templates
```
User: "What templates are available?"
Skill returns:
Architecture:
- software-architecture-doc-template
- adr-template
- api-contract-template
Requirements:
- use-case-spec-template
- user-story-template
- supplementary-spec-template
Testing:
- test-plan-template
- test-case-template
- test-strategy-template
```
### Template with Components
```
User: "Create component diagram from template with 3 components"
Skill prompts:
- Component 1 name? "API Gateway"
- Component 1 description? "External API interface"
- Component 2 name? "Auth Service"
...
Output includes all components in repeating section.
```
## CLI Usage
```bash
# Instantiate template
python template_engine.py --template software-architecture-doc-template
# With variables
python template_engine.py --template sad \
--var project_name="MyProject" \
--var author="John Doe"
# Interactive mode
python template_engine.py --template test-plan --interactive
# List templates
python template_engine.py --list
python template_engine.py --list --category architecture
# Validate template
python template_engine.py --validate --template custom-template.md
# Preview without saving
python template_engine.py --template sad --preview
# Specify output location
python template_engine.py --template sad --output .aiwg/architecture/custom-name.md
```
## Template Categories
### SDLC Framework Templates
| Category | Templates |
|----------|-----------|
| requirements | use-case-spec, user-story, supplementary-spec, srs, glossary |
| architecture | sad, adr, api-contract, data-flow, database-design |
| testing | test-strategy, test-plan, test-cases, defect-card |
| security | threat-model, security-requirements, vulnerability-plan |
| deployment | deployment-plan, release-notes, support-runbook |
| management | iteration-plan, risk-list, project-status |
### MMK Framework Templates
| Category | Templates |
|----------|-----------|
| intake | campaign-intake, audience-profile, brand-brief |
| content | blog-post, case-study, whitepaper, newsletter |
| creative | creative-brief, asset-spec, design-system |
| email | email-campaign, email-sequence, nurture-workflow |
| analytics | kpi-dashboard, measurement-plan, campaign-report |
## Integration
This skill integrates with:
- `artifact-metadata`: Creates metadata for instantiated artifacts
- `artifact-orchestration`: Uses templates for artifact generation
- `project-awareness`: Gets context values from project state
## Error Handling
### Missing Template
```
Template 'nonexistent' not found.
Did you mean:
- test-plan-template (testing)
- deployment-plan-template (deployment)
Available templates: python template_engine.py --list
```
### Missing Required Variable
```
Missing required variable: project_name
Description: Name of the project
Please provide: --var project_name="value"
```
### Invalid Template Syntax
```
Template validation failed:
Line 45: Unclosed conditional block {{#if has_database}}
Line 67: Unknown variable {{unknwon_var}}
```
## References
- SDLC templates: `sdlc-complete/templates/`
- MMK templates: `media-marketing-kit/templates/`
- Template syntax: Handlebars-compatible subset
- Metadata schema: `schemas/template-meta.schema.json`
No comments yet. Be the first to comment!