Master the expression system, built-in transformation functions, the Set Variables node, and the Run Inspector to build and debug clean data pipelines between steps.
The expression system
Every value you configure in a node's input fields can reference outputs from upstream nodes using the double-brace expression syntax: `{{steps.nodeName.output.fieldName}}`. Expressions are evaluated at runtime with the actual values produced by each step. The data-picker (the `{}` icon next to any input field) lets you browse the output schema of every upstream node and insert an expression with a single click, eliminating typos. Nested fields are accessed with dot notation: `{{steps.api_call.output.body.data.items[0].id}}`. Array indices and nested objects are fully supported.
Transforming data with built-in functions
Expressions support a library of built-in transformation functions you can call inline. String functions include `upper`, `lower`, `trim`, `replace`, `split`, and `substring`. Number functions include `round`, `floor`, `ceil`, `abs`, and `format`. Array functions include `length`, `first`, `last`, `filter`, `map`, and `join`. Date functions include `now`, `format`, `addDays`, and `diff`. Chain multiple functions together: `{{upper(trim(steps.form.output.email))}}` will trim whitespace and uppercase the email address in a single expression. The function reference is available in the expression editor's inline documentation panel.
The Set Variables node
When you need to compute a derived value, combine multiple fields, or prepare data for a downstream step, use the Set Variables node. It accepts one or more named variables, each defined by an expression. The resulting variables are exposed as outputs of the Set Variables node, just like any other node's outputs. This is useful for constructing a complex JSON object that an API call expects, building a formatted string from multiple fields, or normalizing inconsistent data shapes from different sources into a common structure before passing them to the LLM node.
Debugging data flow
The Run Inspector shows the exact input and output of every node for every run, making data-flow debugging straightforward. If a downstream node is receiving unexpected values, click the upstream node in the Run Inspector to see what it actually output, then compare that to what you expected. Common issues include: accessing a field that does not exist in the response (returns undefined, which may silently pass or fail depending on the downstream node), array index out-of-bounds, and type mismatches (a string where a number is expected). Use the Add Log node to emit custom debug messages to the run log during development.