Imports
When the same logic shows up in more than one flow — a prompt-cleaning step, a scoring sub-routine, a shared agent — build it once as its own flow and import it into the others. Shared logic then lives in one place, and a fix propagates by re-pinning instead of by hunting down copies.
Importing a flow
Open the Imports drawer on a flow's detail page and Add import: pick a flow from your workspace, then pick one of its published versions. The pin is explicit — a specific version, not a range — so an import can't change underneath you when the source flow is edited. The picker only offers flows that are safe to add (same workspace, visible to you, and not cyclic).
Once imported, the flow shows up in the palette as a node you place on the canvas. Its inputs and outputs become the node's ports, so you wire it in like any other node.
Keeping imports current
Each import row shows its pinned version, with an upgrade hint when a newer version exists. Click the version chip to re-pin to a different published version. Re-pinning is deliberate, so nothing upgrades on its own.
Extract a subflow
Going the other direction: select a group of nodes on the canvas and extract them to a subflow. In one step, Workbench creates a new child flow from the selection, publishes it as 0.1.0, pins it back into the parent as an import, and replaces the selection with the import node. It's the fastest way to turn a chunk of a working flow into a reusable building block — refactor-by-selection.
Imports are same-workspace and cycle-checked, so the graph of flows-importing-flows can't loop back on itself.