Browse the docs
Documentation
Templates and expressions: pass data between nodes
Nodes read each other's data through sandboxed Jinja templates. Validation rejects references to nodes that are not upstream, so a typo fails while you edit instead of halfway through a run.
What a template can read
{{ trigger.<field> }}: the inputs that started the run, such as a test input on the Manual Trigger, a schedule's inputs or an API call'sinput.{{ nodes.<id>.output }}: what an upstream node returned on the port that fired.{{ nodes.<id>.ports.<port> }}and{{ nodes.<id>.status }}: per-port output and the node's status.{{ run.id }}and{{ run.started_at }}.{{ args.<field> }}: inside an HTTP Request node attached as a tool, the arguments the agent called it with.
Add a variable without typing braces
Under every template field, Insert variable lists the run inputs the workflow already knows and drops {{ trigger.<name> }} where your cursor is. Choose New variable to add one: the name is selected, so you can type over it straight away. Typing {{ also suggests run inputs and upstream nodes.
Each variable a prompt reads then shows up on the Manual Trigger's Test inputs and in the Playground's Inputs form, as a row waiting for a value.
Endpoint placeholders are not templates
A saved endpoint on a custom API uses single braces, such as /items/{item_id}. Each placeholder becomes an input on the API node. Fill that input with a value or a template:
item_id: {{ trigger.item_id }}
title: {{ nodes.summarise.output.text }}The endpoint defines the shape of the request once; the workflow supplies the values with templates.
Template fields
Fields such as an agent's user prompt or an HTTP node's URL are rendered as text. A field that is exactly one expression keeps the raw value instead, so an object stays an object:
{
"summary": "Ticket from {{ trigger.customer }}: {{ trigger.message }}",
"ticket": "{{ trigger }}"
}Expression fields
Reading agent output
An Agent node returns text, and structured when an output schema is set. Branch on structured fields rather than parsing text.
Keep reading
- Agent node: Claude with tools and structured outputThe Agent node calls Claude with your prompt, uses attached HTTP, app, API and MCP tools in a loop, and returns text plus structured output to branch on.
- Set node: build new values with templatesThe Set node builds a new object from named values and templates, to reshape data between AI workflow steps and keep agent prompts small.
- Building AI agent workflows on the canvasHow Worfilo workflows are structured: triggers, nodes, ports, data edges and tool edges, branching and merging, and how the executor decides what runs.
Build it on the canvas
Create a free account, describe the workflow or wire it yourself, and run it in the browser.