Join Node - Synchronize Parallel Branches in ConvyAI Agentic Flow
Overview
The Join node synchronizes the execution of parallel branches in an Agentic Flow, merging them back into a single sequential path. When a flow splits into multiple branches executed in parallel, the Join node waits for a configured number of branches to converge before resuming execution toward downstream nodes.
Positioning
The Join node has multiple inputs and one exit. It is available in the Logic & Control category of the designer, and can be dragged onto the canvas like any other node. The hint shown on the node reads: "Synchronizes parallel branches and proceeds on a sequential path."
Configuration
| Field | Description |
|---|---|
| Branch count | Number of incoming branches the node must receive before completing its execution. |
The Join node has no timeout, outcome policy, or local error handling configuration - these are governed by the flow's central error-handling rules.
Runtime behavior
Each incoming branch is held by the node with a behavior equivalent to the Wait for Event node, until the configured number of branches has arrived. Once that number is reached, the node emits a grouping and execution resumes on the downstream nodes, which receive the synchronized state as input.
After a grouping is emitted, the node's counter resets and it goes back to listening: branches arriving afterward are not discarded - they contribute to forming the next grouping. As a result, the node produces a number of groupings (and corresponding downstream executions) equal to the total number of incoming branches divided by the configured branch count.
Branches are paired into groupings in chronological order of arrival: the first branches to arrive form the first grouping, and so on.
If the total number of incoming branches is not an exact multiple of the configured branch count, the excess branches wait indefinitely without completing a grouping. Groupings already completed proceed normally, but the flow as a whole remains in a waiting state. This is a symptom of a mismatch between the configured branch count and the number of branches the flow actually produces - keeping the two consistent is the designer's responsibility.
Debug and replay visualization
In live debug or replay, a Join node appears executed once per branch that converged on it at runtime. Opening the node's detail panel shows a selector for choosing which Execution Path to display among those that reached the node.
Selecting a path updates the list of preceding nodes in the left panel to show the nodes traversed by that specific branch. By default, the most recently executed Execution Path is shown, consistent with the rest of the canvas.
For a node downstream of a Join, the list of preceding nodes shows a badge with the Execution Paths handled by the Join, the same way it already works for nodes with multiple executions. Changing the selected Execution Path on the Join updates the list of downstream nodes accordingly; this also works correctly with Join nodes nested inside one another.
Smart Completion and downstream variables
When a node downstream of a Join references a variable via $, Smart Completion exposes the variables produced by all branches synchronized by the Join, not only those of the last executed branch. This keeps downstream nodes fully configurable, even though the debug panel only displays one Execution Path at a time.
Key concepts
| Term | Definition |
|---|---|
| Grouping | The synchronization unit produced by the Join node each time the configured number of branches converges on it. |
| Execution Path | One of the branch traversals that reached a Join node at runtime; selectable in the debug/replay detail panel to inspect the corresponding upstream and downstream nodes. |