Skip to content
Worfilo

Documentation

Building workflows on the canvas

Updated September 17, 2026

A workflow is a versioned JSON graph, and the canvas is only its editor. Understanding a few rules about ports and edges explains everything the executor does.

The graph

Every workflow has exactly one trigger, some nodes and the edges between them. Node ids are lowercase slugs such as classify_ticket, and templates use them to read upstream output. Renaming a node id in the editor rewrites every template that references it.

Ports and data edges

Nodes have named input and output ports. Most have one in and one out, but some differ: If fires true or false, Switch fires one port per case plus default, and nodes that can fail may fire error.

The executor follows one rule: an outgoing edge is active only if its source port fired, and dead otherwise. A node whose incoming edges are all dead is skipped, and its own edges die too. Branching, skip cascades and error ports all come from that rule.

Joining branches

When branches meet again, route them into a Merge node. It waits until every incoming edge is settled, then passes on the first value that arrived, a list of all of them, or an object keyed by source node.

Tool edges

A dashed tool edge from an HTTP Request, Connector or API node into an agent's tools port hands the agent a callable tool instead of scheduling the node. The agent decides when to call it, and a failing tool returns an error result the model can recover from rather than failing the run.

The palette

The palette (⌘ K to search) lists every node type by category. Below them, Connected apps lists your connections, My APIs the APIs you added, and MCP tools the servers you connected. Choosing one adds a Connector, API or MCP node with the account, API or server already picked, and names the node after it, so templates read {{ nodes.github.output }} rather than a generic id.

Validation

The editor validates as you work: missing required config, references to nodes that are not upstream, cycles, and nodes the trigger cannot reach are flagged on the node before you run.

Testing a single node

After one full run, you can re-run a single node against the previous run's upstream outputs, with unsaved config changes. It is the fastest way to iterate on a prompt.

Build it on the canvas

Create a free account, describe the workflow or wire it yourself, and run it in the browser.