Control Flow Nodes
Branch, loop, compute, pause, and join workflow execution.
Control flow nodes shape how execution moves through your graph - branching on conditions, repeating over collections, computing reusable values, pausing for humans, and joining parallel branches.
Condition
Evaluates a boolean expression and routes execution down one of two output handles: true or false.
| Field | Type | Required | Description |
|---|---|---|---|
expression | Expression | Yes | A boolean expression, e.g. {{ nodes.step_1.output.count > 0 }}. |
Output: result (Boolean) - useful when you want both branches to converge later and still know which path ran.
Example patterns
{{ nodes.http_request_1.output.statusCode == 200 }}
{{ nodes.agent_call_1.output.structuredOutput.risk_level == "HIGH" }}Loop
Iterates over an array or repeats until a condition is met, executing its branch once per iteration.
| Field | Type | Required | Description |
|---|---|---|---|
collection | Expression | No | Array to iterate over (e.g. {{ nodes.query_tickets.output.items }}). When set, the other fields are ignored. |
maxIterations | Number | No | Cap on iterations when no collection is given (1-100). Defaults to 10. |
untilCondition | Expression | No | Boolean checked each iteration; exits early when true. Ignored when a collection is set. |
Inside the loop body, reference the current element and index:
{{ nodes.loop_1.output.item }}
{{ nodes.loop_1.output.index }}Bound your loops
Iterations are capped (max 100 per run) to keep runaway automations from hammering external systems. Prefer collection mode whenever you have data to iterate.
Evaluate Expressions
Computes a named set of expressions in one step - handy for derived values reused by many downstream nodes.
| Field | Type | Required | Description |
|---|---|---|---|
expressions | Object | Yes | Object mapping names to expressions, e.g. { "fullName": "{{ ... }}", "total": "{{ ... }}" }. |
Output: result (Object) with one property per expression name.
{{ nodes.evaluate_expressions_1.output.result.fullName }}Suspend
Pauses the run indefinitely - nothing after this node executes until someone resumes the run from the Runs panel, optionally providing a payload.
| Field | Type | Required | Description |
|---|---|---|---|
note | String | No | A human-readable note about what the run is waiting on. |
Use Suspend for approval gates and external actions that happen outside the platform.
Await Completion
A fan-in join: when execution arrives from multiple parallel branches, the node waits until all upstream paths have finished before continuing. It exposes status and completedAt so downstream steps can react to how the joined branches ended.
Use it together with multiple edges converging on one point - e.g. after fanning out per-region HTTP calls that must all finish before aggregating results.