Skip to content
Worfilo

Documentation

Templates and expressions

Updated September 17, 2026

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 payload that started the run.
  • {{ 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.

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:

API node inputs
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:

Set node values
{
  "summary": "Ticket from {{ trigger.customer }}: {{ trigger.message }}",
  "ticket": "{{ trigger }}"
}

Expression fields

If conditions and Switch cases are bare expressions without braces, evaluated to a value:

nodes.classify.output.structured.urgency == 'high'

Reading agent output

An Agent node returns text, and structured when an output schema is set. Branch on structured fields rather than parsing text.

Build it on the canvas

Create a free account, describe the workflow or wire it yourself, and run it in the browser.