Templating
DocumentstemplatingTemplating is an Agent Skill for documents published in the decocms/studio repository on GitHub: a SKILL.md instruction file an AI agent can load to do this task.
Render any text file (HTML, markdown, config, SQL, email) from a mustache template plus JSON data. Use when an output's shape is fixed ahead of time and only the values change.
How to use this skill
Bring this guide into your coding agent with a prompt tailored to the tool you use.
- Open your project in Codex.
- Copy and paste the prompt below.
- Review files and risks before approving any action.
Inspect the Agent Skill at https://github.com/decocms/studio/blob/HEAD/packages/sandbox/image/skills/templating/SKILL.md and all supporting files. Report provenance, permissions, scripts, dependencies, and security risks. Propose an exact installation into .agents/skills/templating, but wait for my approval before writing files or running scripts.
Copying this prompt does not install or run the skill. Review third-party files before use.
templating — fill data into text-file templates
Render any text file (HTML, markdown, config, SQL, email, …) from a mustache template plus JSON data. Use this whenever the shape of an output is known ahead of time and only the values change — it is faster and less error-prone than writing the file by hand.
Other skills build on this one (e.g. slides composes presentation decks
from slide templates).
Quick reference
| Task | Command |
|---|---|
| Render with inline data | create-from-template --template t.html --data '{"name":"Ada"}' --output out.html |
| Render with a data file | create-from-template --template t.html --data @data.json --output out.html |
| Fail on missing keys | add --strict |
| Overwrite existing output | add -f |
Use partials ({{>name}}) | add --partials-dir ./partials |
The command prints the absolute output path on success and exits non-zero
with a message on any error (bad JSON, missing template, existing output
without -f, missing keys under --strict).
Template syntax (mustache)
| Syntax | Meaning |
|---|---|
{{name}} | Insert value, HTML-escaped |
{{{name}}} | Insert value raw (no escaping) — for trusted HTML fragments |
{{#items}}…{{/items}} | Repeat block for each array item; also renders for truthy values |
{{.}} | The current item inside a list block |
{{^items}}…{{/items}} | Render block only when the value is empty/falsy/missing |
{{user.name}} | Dotted path lookup |
{{>header}} | Include partial header (resolved from --partials-dir as header or header.html) |
{{!comment}} | Comment, never rendered |
Example:
<ul>
{{#items}}<li><b>{{label}}</b>: {{value}}</li>{{/items}}
{{^items}}<li>No items</li>{{/items}}
</ul>
create-from-template --template list.template.html \
--data '{"items":[{"label":"CPU","value":"42%"}]}' \
--output list.html
Workflow tips
- Keep data in a JSON file (
--data @data.json) when it is more than a couple of fields — easier to iterate on than a long inline string. - Use
--strictwhile developing a template to catch typos in key names; drop it when optional keys are intentional. - Templates are plain text files — author your own anywhere (the org home
folder under
org/home/templates/is a good durable place for organization-wide templates).