How blocks pass data
Most blocks need a value that an earlier block produced. A block gets it by referencing that block's output by name. This page covers three things: what an output is and where it lives, how a block references one, and the types of values you'll find inside.
In this workflow, Classify reads the message from Start, and Reply reads the classification from Classify.
What an output is
When a block runs, Sim keeps its result under the block's name for the rest of the run. That stored result is the block's output, and any later block can read it.
An output is usually a set of named values, not a single thing. You read one by its key: <classify.content> is the content value of the block named classify.
Different blocks produce different values. An Agent keeps its content; an API keeps the data it received; a Table block keeps a rowCount and the rows it read, reached with <table1.rowCount>.
A block's output is not the same as the workflow's output. Every block has its own, kept under its own name. The workflow's output is simply one of them: whatever the last block produced.
How a block references an output
A block's inputs are its parameters: the fields you fill in, like an Agent's model and prompt. In any parameter you can insert a connection tag to pull in an earlier output instead of typing a fixed value. The <start.input> in Classify's prompt means "use whatever Start received here."
A block can reference any output that already exists by the time it runs, meaning any block before it on its path (see how workflows run). You rarely type a tag by hand: wherever a parameter accepts one, the builder lists the available outputs and you pick the value you want.
Data types
Each value inside an output has a type, shown next to it in the output panel. The type tells you what you can do with the value: index into an array, read a field from an object, compare a number.
| Type | What it is | Example |
|---|---|---|
string | Text | "Billing issue" |
number | A numeric value | 248 |
boolean | true or false | true |
object | A set of named fields | { category: "billing", urgency: "high" } |
array | An ordered list of values | ["billing", "urgent"] |
null | No value | null |
A file shows up as an object carrying the file's details, like its name and URL. When a value isn't the type the next step needs, reshape it in a Function block, which runs a short snippet of code and stores the result as its own output.