Connections

Connections determine when blocks run. Connection tags read values from blocks that have already run. This page covers tag syntax and common output shapes; data flow explains how those values become available.

Tag syntax

<blockName.path.to.data>
  • blockName is the source block's name. Matching ignores case, whitespace, and periods: a block named My Agent resolves through <myagent.content>.
  • The field path is case-sensitive.
  • variable, loop, and parallel are reserved prefixes for workflow variables and container context.

Type < in a supported field to open the reference picker, or drag an available output into the field:

Nested and array fields

Use dots for object fields and brackets for array indices:

<agent.tokens.total>
<api.data.results[0].id>
<api.data.users[0].name>

Multiple array indices, such as items[0][1], are supported. Check the output panel for the actual structure; a path depends on what the source block produced.

Using tags in text and code

Text fields can combine a reference with static text:

Customer <start.customerId> requested: <start.message>

In a Function block, use referenced values in code:

const name = <start.name>
const total = <api.data.total>
return { greeting: `Hello, ${name}!`, totalWithTax: total * 1.1 }

Function references preserve value types for JavaScript or Python: strings remain strings, objects remain objects, and null remains null. In ordinary text fields, objects are JSON-stringified and primitives become text. Confirm a value is numeric before calculating with it; convert numeric text explicitly when needed.

When a known source block did not run on the selected path, its reference resolves empty: usually "", or null in Function code. An unknown block name can remain unsubstituted, while an invalid field can fail resolution. These are different problems; inspect the source output and the run's active path.

Common block outputs

These abbreviated examples use blocks named Agent, API, Function, Condition, Router, and Evaluator. Replace that name with your source block's normalized name. Additional and optional fields depend on the block and runtime.

{
  "content": "The generated response",
  "model": "claude-sonnet-5-5",
  "tokens": { "input": 120, "output": 85, "total": 205 },
  "toolCalls": { "list": [], "count": 0 }
}

Read text with <agent.content> and tool activity with <agent.toolCalls.list> or <agent.toolCalls.count>. A successful structured response exposes its fields at the top level, except names overwritten by standard metadata. See Agent response format for naming guidance, provider support, and malformed-output behavior.

{
  "data": { "message": "Response body" },
  "status": 200,
  "headers": { "content-type": "application/json" }
}

data can be any response-body type. These normal outputs describe a successful request. Non-2xx responses, network failures, and timeouts use the API block's error path.

{
  "result": "Function return value",
  "stdout": "Code output",
  "files": []
}

result can be any return-value type. stdout contains bounded diagnostic output; see Function output limits. Remote execution includes files metadata; local JavaScript can omit that field.

{
  "conditionResult": true,
  "selectedPath": {
    "blockId": "2acd9007-27e8-4510-a487-73d3b825e7c1",
    "blockType": "agent",
    "blockTitle": "Follow-up Agent"
  },
  "selectedOption": "condition-1"
}

conditionResult reports the rule result. selectedOption identifies the selected branch; selectedPath describes its next block and can be null when no destination is connected.

{
  "context": "I need help resetting my password",
  "model": "claude-sonnet-5-5",
  "tokens": { "input": 120, "output": 85, "total": 205 },
  "selectedRoute": "customer-service",
  "reasoning": "The request needs account support",
  "selectedPath": {
    "blockId": "2acd9007-27e8-4510-a487-73d3b825e7c1",
    "blockType": "agent",
    "blockTitle": "Customer Service Agent"
  }
}

context is the analyzed input, selectedRoute identifies the chosen route, and reasoning explains the decision. selectedPath describes the destination. A no-match routing error uses Router's error behavior.

{
  "content": "The original content being evaluated",
  "model": "claude-sonnet-5-5",
  "tokens": { "input": 120, "output": 85, "total": 205 },
  "metric1": 8.5,
  "metric2": 7.2
}

content is the evaluated input. Metric names are lowercased. Missing scores or an unparseable response can produce 0; see Evaluator outputs for numeric coercion and validation guidance.