LLAJinja is a Skill that runs other Skills written as Jinja templates. No extensions or plugins required. Works in any Harness or AI dev tool that supports skill loading (Claude Code, OpenCode, Codex, Pi ...)
⚠️ Work in progress: this library is under active development. Feedback is appreciated.
Declare the variables your Skill needs with input.<name>. If a value isn't provided when the skill runs, LLAJinja asks the harness to prompt the user for it.
Split a multi-step skill into smaller, sequential steps. Use them when one step depends on the result of another and you want the agent to work through them one at a time in one session:
{% stage name %} stage text {% endstage %}
An agent block asks the harness to spawn a new agent:
{% agent name input={} output={} nested="optional-nested-skill" %}
Agent instructions ...
{% endagent %}
Parameters:
input: a mapping of variables passed to the sub-agent (or to its nested skill).output: a mapping of output keys to human-readable descriptions. LLAJinja turns this into the JSON schema the agent must return, and each key can then be referenced later in the template as name.output_key.nested (optional): a Jinja-templated skill that the sub-agent runs in its own LLAJinja session.Sub-agents can be chained together and combined in control flow to build workflows. The state of each agent is saved to the runtime log, so a workflow can be resumed or replayed as many times as needed.
Jinja's built-in extendsand include tags are supported, so you can assemble a skill from multiple template files.
Jinja2 Python library. Either make sure it's available on your PATH, or point to a Python interpreter that has it installed in your prompt, AGENTS.md, or SKILL.md.llajinja run your-skill☝️Run Harnesses in a sandbox (built-in or your own): Jinja's ImmutableSandboxedEnvironment that used in here is not a complete security boundary, and yours templates or skills generate by AI should be treated as untrusted.
Note: LLAJinja currently discovers skills only in the same
skillsfolder it lives in. This means you can't mix global and project-level templated skills yet.
The idea of driving an agent harness through a skill comes from LLAssemblyCLI and is described in this article.
LLAJinja applies this to Jinja templates: it keeps a runtime log of each template's current state and replays it whenever the harness asks for the next step.
Execution state is stored in /tmp/llajinja by default. To use a different location, set the LLAJINJA_WORKFLOW_PATH environment variable.
LLAJinja is a Skill that runs other Skills written as Jinja templates. No extensions or plugins required. Works in any Harness or AI dev tool that supports skill loading (Claude Code, OpenCode, Codex, Pi ...)
⚠️ Work in progress: this library is under active development. Feedback is appreciated.
Declare the variables your Skill needs with input.<name>. If a value isn't provided when the skill runs, LLAJinja asks the harness to prompt the user for it.
Split a multi-step skill into smaller, sequential steps. Use them when one step depends on the result of another and you want the agent to work through them one at a time in one session:
{% stage name %} stage text {% endstage %}
An agent block asks the harness to spawn a new agent:
{% agent name input={} output={} nested="optional-nested-skill" %}
Agent instructions ...
{% endagent %}
Parameters:
input: a mapping of variables passed to the sub-agent (or to its nested skill).output: a mapping of output keys to human-readable descriptions. LLAJinja turns this into the JSON schema the agent must return, and each key can then be referenced later in the template as name.output_key.nested (optional): a Jinja-templated skill that the sub-agent runs in its own LLAJinja session.Sub-agents can be chained together and combined in control flow to build workflows. The state of each agent is saved to the runtime log, so a workflow can be resumed or replayed as many times as needed.
Jinja's built-in extendsand include tags are supported, so you can assemble a skill from multiple template files.
Jinja2 Python library. Either make sure it's available on your PATH, or point to a Python interpreter that has it installed in your prompt, AGENTS.md, or SKILL.md.llajinja run your-skill☝️Run Harnesses in a sandbox (built-in or your own): Jinja's ImmutableSandboxedEnvironment that used in here is not a complete security boundary, and yours templates or skills generate by AI should be treated as untrusted.
Note: LLAJinja currently discovers skills only in the same
skillsfolder it lives in. This means you can't mix global and project-level templated skills yet.
The idea of driving an agent harness through a skill comes from LLAssemblyCLI and is described in this article.
LLAJinja applies this to Jinja templates: it keeps a runtime log of each template's current state and replays it whenever the harness asks for the next step.
Execution state is stored in /tmp/llajinja by default. To use a different location, set the LLAJINJA_WORKFLOW_PATH environment variable.