One node at a time
A workflow runs one node at a time, starting atstart and following edges:
- An edge without a router has exactly one target. Writing
to: [a, b]without a router is rejected. - An edge with a router lists every node the router may choose; at run time the router picks one.
- The run stops when it reaches a node listed in
end.
Memory
As nodes run, each output is added to the run’s memory, tagged with the name of the node that produced it. The workflow’s input messages are in memory too, under the nameinput.
What a node sees is a selection from that memory:
- No
input_filter: everything in memory so far: the input and every earlier output. input_filter: [a, b]: only the outputs of nodesaandb(andinputif listed).
The output of a run
A run’s output is the output of the last node that ran. That has two consequences:- If the last step does something for its side effect, such as saving a row or sending an email, its confirmation becomes the run’s output. Add a final
passthroughnode that re-emits the result you want returned. - With a router, different runs can end on different nodes; make sure each possible last node returns something useful.
Variables
Variables passed with a run ("variables": {...}) are available to every node, all the way through: <name> placeholders in agents, and input fields of function nodes and functions. A run also gets a _wf_execution_id variable; for background runs it is the execution id, which is useful for saving results against the run that produced them.
Limits
Failure
If a node raises an error, the run stops and returns the error. Design for it:- Make functions fail loudly with a clear message when their input is wrong, rather than returning a half-result that a later step misreads.
- Use routers to skip optional steps (for example, a file that was not uploaded) instead of letting them fail. See Routing and iteration.

