jinja-expertlisted
Install: claude install-skill air-gapped/skills
# Jinja Expert
**Boundary with `transformers-config-tokenizers-expert`** (same `dev` plugin).
Both skills touch `chat_template.jinja`, from opposite sides. This one owns the
template *as Jinja* — syntax, scoping, filters, whitespace, why the render is
wrong. That one owns *which file wins* and what the loader does with it:
`tokenizer_config.json` vs `chat_template.jinja` precedence, structural tokens,
which class actually instantiates. "My template renders the wrong text" is
here; "my template isn't the one being used" is there.
Jinja2 shows up in three mostly-disjoint ecosystems in 2026. Each has its
own dialect — different sandbox, different extensions, different filters,
different failure modes. Using chat-template idioms in an Ansible playbook
will silently misbehave. Using Ansible `!unsafe` in a chat template is a
syntax error. This skill is the map.
---
## Which dialect am I in?
Pick the row that matches the file under review. The rightmost column
points to the next file to read.
| Signal | Dialect | Go to |
|---|---|---|
| File named `chat_template.jinja`; `apply_chat_template`, `tokenizer_config.json`, vLLM/sglang in play; messages/tools/`add_generation_prompt` in scope | **HF chat template** (sandboxed, `loopcontrols`, `tojson ensure_ascii=False`) | `references/chat-template/` |
| File ends in `.j2`; inside an Ansible playbook/role/collection; `{{ ansible_managed }}`, `hostvars`, `lookup(...)`, `| default(omit)`; `when:` bare expressions | **Ansible Jinja** (re