Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Template loading, variable filling, and scaffolding for all GSD artifacts. Manages 22+ templates covering every document type in the GSD system, from PROJECT.md to milestone archives.
.claude/skills/a5c-ai-template-scaffolding/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 121% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 194% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 110% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 0% | 0% |
phase: 72 status: planned created: 2026-03-02 template: phase-prompt variant: standard
...
### 7. Template Discovery
List available templates:
Available templates: project - Project definition (PROJECT.md) requirements - Requirements specification (REQUIREMENTS.md) roadmap - Development roadmap (ROADMAP.md) state - Project state (STATE.md) context - Phase context (CONTEXT.md) summary - Phase summary (SUMMARY.md) 3 variants] phase-prompt - Phase plan (PLAN.md) ...
### 8. Template Variant Selection
Automatic variant selection based on context:
function selectSummaryVariant(context) { if (context.isQuickTask) return 'summary-minimal'; if (context.taskCount <= 3) return 'summary-minimal'; if (context.taskCount <= 8) return 'summary-standard'; return 'summary-complex'; }
## Tool Use Instructions
### Loading and Filling a Template
1. Use `Glob` to locate the template file in `templates/`
2. Use `Read` to load the template content
3. Replace all `{{VARIABLE}}` placeholders with provided values
4. Process conditional blocks (`{{#if}}...{{/if}}`, `{{#unless}}...{{/unless}}`)
5. Add frontmatter if specified
6. Use `Write` to save the filled template to the target path
### Batch Generation
1. Accept list of template-to-target mappings
2. Load each template, fill variables with shared + per-file data
3. Write all files, collecting results
4. Return list of generated files
### Template Discovery
1. Use `Glob` to find all `.md` and `.json` files in `templates/`
2. Read first line of each to extract template name/purpose
3. Return formatted list
## Process Integration
- `new-project.js` - Batch generate PROJECT.md, REQUIREMENTS.md, ROADMAP.md, STATE.md
- `discuss-phase.js` - Generate CONTEXT.md from context template
- `plan-phase.js` - Generate PLAN.md files from phase-prompt template
- `verify-work.js` - Generate UAT.md from uat template
- `quick.js` - Generate plan and summary using minimal variants
- `debug.js` - Generate debug session file from debug template
- `complete-milestone.js` - Generate milestone archive from milestone-archive template
- `add-tests.js` - Generate test plan structure
- `research-phase.js` - Generate RESEARCH.md from research template
- `map-codebase.js` - Batch generate 7 codebase analysis documents
## Output Format
{ "operation": "fill|batch|discover", "status": "success|error", "template": "project", "variant": "standard", "targetPath": ".planning/PROJECT.md", "variablesFilled": 12, "conditionalsProcessed": 3, "generatedFiles": ".planning/PROJECT.md", ".planning/REQUIREMENTS.md" ] }
## Configuration
| Setting | Default | Description |
|---------|---------|-------------|
| `templatesDir` | `templates/` | Directory containing template files |
| `summaryVariant` | `standard` | Default summary variant |
| `injectFrontmatter` | `true` | Auto-add frontmatter to generated files |
| `variableDelimiter` | `{{...}}` | Variable placeholder syntax |
## Error Handling
| Error | Cause | Resolution |
|-------|-------|------------|
| `Template not found` | Template name does not match any file | List available templates, suggest closest match |
| `Unfilled variable` | Variable not provided in data | Use empty string or placeholder marker |
| `Target path exists` | File already at target location | Prompt for overwrite/append/skip |
| `Invalid conditional` | Malformed if/unless block | Fix template syntax |
| `Batch partial failure` | Some files in batch failed | Report which succeeded and which failed |
## Constraints
- Templates must be idempotent (filling same template with same data produces same output)
- Never modify template source files; only read them
- Generated files must be valid markdown (or JSON for config.json)
- Variable names must be uppercase with underscores only
- Conditional blocks must be properly nested and closed
- Batch operations are all-or-nothing within a single process call| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 9,460 | 4,342 | -54% | 1 | 1 | 0% | 2,046 | 1,260 | -38% | 0 | 0 | — |
case-02 | fail→pass | 4,169 | 2,790 | -33% | 1 | 1 | 0% | 741 | 1,641 | +121% | 0 | 0 | — |
case-03 | fail→fail | 9,255 | 5,269 | -43% | 1 | 1 | 0% | 1,918 | 2,044 | +7% | 0 | 0 | — |
case-04 | fail→pass | 3,749 | 5,107 | +36% | 1 | 1 | 0% | 696 | 2,049 | +194% | 0 | 0 | — |
case-05 | fail→pass | 4,454 | 2,458 | -45% | 1 | 1 | 0% | 710 | 1,493 | +110% | 0 | 0 | — |
case-06 | pass→pass | 9,302 | 2,054 | -78% | 1 | 1 | 0% | 1,676 | 1,389 | -17% | 0 | 0 | — |
case-07 | fail→fail | 6,984 | 2,545 | -64% | 1 | 1 | 0% | 1,288 | 1,554 | +21% | 0 | 0 | — |
case-08 | fail→fail | 4,990 | 2,320 | -54% | 1 | 1 | 0% | 929 | 1,480 | +59% | 0 | 0 | — |
case-09 | pass→pass | 5,977 | 1,928 | -68% | 1 | 1 | 0% | 1,003 | 1,418 | +41% | 0 | 0 | — |
case-10 | fail→pass | 6,836 | 1,284 | -81% | 1 | 1 | 0% | 1,254 | 1,225 | -2% | 0 | 0 | — |
case-11 | fail→fail | 9,692 | 2,431 | -75% | 1 | 1 | 0% | 1,615 | 1,464 | -9% | 0 | 0 | — |
case-12 | fail→pass | 7,553 | 1,354 | -82% | 1 | 1 | 0% | 1,253 | 1,250 | -0% | 0 | 0 | — |
case-13 | fail→pass | 14,405 | 1,347 | -91% | 1 | 1 | 0% | 2,454 | 1,285 | -48% | 0 | 0 | — |
case-14 | fail→fail | 7,193 | 1,963 | -73% | 1 | 1 | 0% | 1,177 | 1,361 | +16% | 0 | 0 | — |
case-15 | fail→fail | 4,527 | 1,562 | -65% | 1 | 1 | 0% | 818 | 1,311 | +60% | 0 | 0 | — |
case-16 | fail→pass | 24,005 | 1,741 | -93% | 1 | 1 | 0% | 1,552 | 1,323 | -15% | 0 | 0 | — |
case-17 | fail→fail | 8,253 | 1,834 | -78% | 1 | 1 | 0% | 1,281 | 1,321 | +3% | 0 | 0 | — |
case-18 | fail→pass | 11,367 | 1,602 | -86% | 1 | 1 | 0% | 2,186 | 1,279 | -41% | 0 | 0 | — |
case-19 | fail→fail | 16,143 | 2,193 | -86% | 1 | 1 | 0% | 2,257 | 1,289 | -43% | 0 | 0 | — |
case-20 | fail→pass | 8,767 | 4,847 | -45% | 1 | 1 | 0% | 1,778 | 1,872 | +5% | 0 | 0 | — |
case-21 | fail→pass | 9,580 | 5,034 | -47% | 1 | 1 | 0% | 1,677 | 1,952 | +16% | 0 | 0 | — |
case-22 | fail→fail | 11,100 | 7,241 | -35% | 1 | 1 | 0% | 2,038 | 2,189 | +7% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +45 percentage points is the difference between those two pass rates over the 20 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.