Data Structure

Each block returns a specific output structure. Use the actual source block name and exact field path; connecting blocks does not flatten their output wrappers.

Standard outputs

BlockOutput references
Agent<agent.content>, <agent.model>, <agent.tokens>, <agent.toolCalls>, <agent.toolResults>
API<api.data>, <api.status>, <api.headers>
Function<function.result>, <function.stdout>
Evaluator<evaluator.content>, <evaluator.model>, <evaluator.tokens>, <evaluator.cost>, and lowercase metric names
Condition<condition.conditionResult>, <condition.selectedPath>, <condition.selectedOption>
Router<router.prompt>, <router.selectedPath>, <router.model>, <router.tokens>, <router.cost>

Token usage commonly contains prompt, completion, and total. Cost metadata, when provided, is an object with input, output, and total, not an array of tool-call costs.

Routing outputs

Condition preserves available upstream output fields and adds its routing fields. conditionResult indicates that a connected path was selected, including an Else path; it is not the raw result of the first expression. selectedOption is the selected condition ID. When no connected path is selected, the routing fields are false/null.

Router returns its original prompt and a selectedPath; it does not expose a selected_path field or generated content.

A selected path has this shape:

{
  "blockId": "destination-block-id",
  "blockType": "agent",
  "blockTitle": "Follow-up Agent"
}

Structured and nested values

With a valid Agent Response Format, schema fields are exposed at the output root, such as <agent.sentiment>, alongside execution metadata. Without that configuration, do not assume arbitrary fields exist on the Agent output.

Evaluator metrics are exposed as lowercase root-level names. Its content contains the model's evaluation response; do not rely on a prose explanation being generated.

API response bodies remain under data, and Function return values remain under result:

<api.data.results[0].id>
<function.result.calculations.total>
<agent.tokens.total>

Inspect an actual run before wiring custom nested fields. For blocks that support error paths, connect recovery logic to the error output; failure output differs from the successful output contract. Condition blocks do not support this recovery path.