Frames & sub-workflows
Two nodes on the canvas never execute: the ▦ group frame and the ✎ note. Frames organize a graph. A frame that links to a saved graph also becomes a wiring shortcut.
▦ Group frames
Section titled “▦ Group frames”Select nodes and group them, or drop an empty frame from the palette and drag nodes into it.
| Control | Effect |
|---|---|
| double-click title | rename |
| drag corners | resize (min 180 × 120) |
| ◍ | cycle color. Gold · teal · terracotta · blue · gray |
| ⊟ / ⊞ | collapse / expand |
| drag the frame | members travel with it |
Membership is a tag on the member node, not just geometry. Dragging a node so its center lands inside a frame adopts it into the innermost containing frame. Dragging it out releases it. Tagged members always move with the frame even if they overhang its bounds. Collapsing hides the members and leaves a compact title bar. The wiring stays intact. Ungrouping dissolves the frame, leaves the members in place, and drops any wires that touched the frame shell.
A plain group frame has no handles. It is purely visual.
Save selection as sub-workflow
Section titled “Save selection as sub-workflow”Right-click a selection of two or more nodes → ⌗ save selection as sub-workflow.
What happens:
- A new graph of kind
subgraphis created, named<graph> · sub. - The selected nodes and the wires between them are copied into it, along with the workflow’s params so
{{param:…}}still resolves. - Back on the parent canvas, the selection is wrapped in a linked frame carrying the new
graphId. - The originals stay put and stay live. They keep running in place, now tagged as members of that frame.
Wires that crossed the selection boundary are not copied. They remain only in the parent graph, and the run log tells you how many.
Linked frames show ⌗ and a sub-workflow tag in their title bar, plus two extra buttons: ⌗ open (or double-click) navigates to the sub-workflow tab, and ↻ re-syncs the frame’s members and internal wires from it. Structure and params follow the source. Local layout of surviving members is kept. Boundary wires survive as long as their member node still exists.
Subgraphs appear in the palette’s workflows tab. Click to open, drag onto a canvas to embed as another linked frame.
Linked frames at run time
Section titled “Linked frames at run time”Unlike plain frames, a linked frame has input and output handles, and wiring to it skips the usual node-pair validation. Edges are resolved onto real members just before the run:
| Edge | Resolves to |
|---|---|
| node → frame | broadcast to every entry member |
| frame → node | fan-in from every exit member |
| frame → frame | zipped by y-order, so N×M never explodes into a cartesian product |
- Entry members are members no other member feeds.
- Exit members are members that feed no other member.
- Both are ordered top-to-bottom, then left-to-right.
- A frame wire with no member on one side is silently dropped.
Boundary problems surface before the run starts, as frame warnings in graph lint:
sub-workflow "Review" has no member nodessub-workflow "Review" has inbound wires but no entry membersub-workflow "Review" has outbound wires but no exit memberMuted and bypassed frames are not checked.
✎ Note
Section titled “✎ Note”A sticky for annotating the canvas. Double-click to edit, ◍ cycles the same five colors, drag the corners to resize (min 140 × 80).
Notes never execute, never wire, and are skipped by the runner entirely. Every bundled example ships with one explaining what it teaches.
Related
Section titled “Related”- Nodes overview
- Graph & wires
- Graph lint. Frame boundary warnings
- Run a workflow