Nodes & data flow

How a node reads its input, the interpolation scope, and the output shapes you pipe between nodes.

How data flows

Each node reads a scope built from its upstream node's output. Reference values with ${...}. A bare ${path} returns the raw value (arrays/objects flow intact); a mixed template coerces to a string.

Per-node output shapes

NodeOutputRead as
agent{ agent_output, status, error }${agent_output}
plugin.action / skill{ plugin_output / skill_output, upstream }${plugin_output.field}
condition{ condition_result }(routing is automatic)
set_variablewrites ${vars.name}${vars.name}

Always-available roots: ${input} (the whole upstream payload), ${vars.*}, ${trigger.*} (the trigger payload), ${error} (on an error branch), ${upstream.*}.

Prefer the reader pattern over parsing agent text: when an agent scores/stores items via its tools, read them back with a query node (e.g. content.list) rather than reading ${agent_output} as JSON.