Tags

Connection tags are visual representations of the data available from connected blocks, providing an easy way to reference data between blocks and outputs from previous blocks in your workflow.

What Are Connection Tags?

Connection tags are interactive elements that appear when blocks are connected. They represent the data that can flow from one block to another and allow you to:

  • Visualize available data from source blocks
  • Reference specific data fields in destination blocks
  • Create dynamic data flows between blocks

Connection tags make it easy to see what data is available from previous blocks and use it in your current block without having to remember complex data structures.

Using Connection Tags

There are two primary ways to use connection tags in your workflows:

Drag and Drop

Click on a connection tag and drag it into input fields of destination blocks. A dropdown will appear showing available values.

  1. Hover over a connection tag to see available data
  2. Click and drag the tag to an input field
  3. Select the specific data field from the dropdown
  4. The reference is inserted automatically

Angle Bracket Syntax

Type <> in input fields to see a dropdown of available connection values from previous blocks.

  1. Click in any input field where you want to use connected data
  2. Type <> to trigger the connection dropdown

  3. Browse and select the data you want to reference
  4. Continue typing or select from the dropdown to complete the reference

Tag Syntax

Connection tags use a simple syntax to reference data:

<blockName.path.to.data>

Where:

  • blockName is the name of the source block
  • path.to.data is the path to the specific data field

For example:

  • <agent1.content> - References the content field from a block with ID "agent1"
  • <api2.data.users[0].name> - References the name of the first user in the users array from the data field of a block with ID "api2"

Dynamic Tag References

Connection tags are evaluated at runtime, which means:

  1. They always reference the most current data
  2. They can be used in expressions and combined with static text
  3. They can be nested within other data structures

Examples

// Reference in text
"The user's name is <userBlock.name>"

// Reference in JSON
{
  "userName": "<userBlock.name>",
  "orderTotal": <apiBlock.data.total>
}

// Reference in code
const greeting = "Hello, <userBlock.name>!";
const total = <apiBlock.data.total> * 1.1; // Add 10% tax

When using connection tags in numeric contexts, make sure the referenced data is actually a number to avoid type conversion issues.

Common Questions

The executor uses a chain of resolvers. Each reference like <blockName.path> is matched against resolvers in order: loop references, parallel references, workflow variables, environment variables, and finally block output references. The first resolver that recognizes the reference handles it.
Block names are normalized by converting to lowercase and removing spaces before matching. So <My Agent.content> and <myagent.content> resolve to the same block. However, the field path after the block name (e.g., content, data.users) is case-sensitive.
Yes, but environment variables use double-brace syntax instead of angle brackets: {{MY_VAR}}. These are resolved by a dedicated environment variable resolver during execution.
If the referenced block exists in the workflow but did not produce output (for example, it was on an unselected condition branch), the reference resolves to an empty value. In most blocks this becomes an empty string; in Function blocks it becomes null.
Yes. Use bracket notation for array indices within the dot path, for example <api1.data.users[0].name>. The resolver supports multiple levels of array indexing like items[0][1] as well.
In Function blocks, resolved values are formatted as code literals (strings are quoted, objects are JSON, null stays as null) so they can be used directly in JavaScript or Python code. In other block types, objects are JSON-stringified and primitives are converted to plain strings.
Yes. You can embed tag references anywhere in a text string, such as "Hello, <agent1.content>! Your order total is <api1.data.total>." The resolver replaces each tag in place while leaving the surrounding text intact.

On this page