NovalinkIn dev

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.

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 and run your first workflow in the browser, or run Novalink on your own machine.