Skip to content

Graph & wires

A workflow is a directed graph of nodes joined by wires. Press ▶ Run and threadle executes it in dependency order.

A workflow: a prompt feeds an agent, which feeds an approval gate, which feeds an output. The agent also has a session wired out of it.

The shape almost every workflow starts as. The agent’s session is wired out to the side — that’s what makes the next run continue the same conversation.


  1. Drop nodes from the palette, or drag a wire onto empty canvas and pick from the menu.
  2. Connect output → input. Incompatible pairs are refused while you drag.
  3. Optionally declare params and graph settings (ply, spend ceiling).
  4. Run, and watch the bottom dockRun log for what happened, Issues for what blocks a start, Loose ends for soft hygiene.

The runner is wave-based, not line-by-line:

  1. Sort the graph topologically. A cycle is a hard error — a workflow that can never finish never starts.
  2. Collect every node whose predecessors have all completed. That’s the wave.
  3. Execute up to ply of them concurrently.
  4. Check the graph spend ceiling.
  5. Repeat until nothing is left.

A node executes once, when its inputs are ready. Multiple wires into one input are joined with blank lines unless you put a knot there — and only if that handle still has capacity. Built-ins like Delay are 1 in · 1 out; a knot is multi-in · 1 out; custom named ports default to one wire unless the manifest sets maxConnections.


StatusMeaning
idleNot in this run, skipped, or starved
queuedScheduled, waiting its turn
runningExecuting now (the node glows, its inbound wire marches)
successProduced output
errorFailed — see Errors & retries

Right-click any node:

ControlEffect
MuteSkip entirely; downstream starves
BypassDon’t execute; pass inbound text straight through
RetryExtra attempts with backoff on failure
Continue on errorMark errored but keep the run alive
Run from this nodePartial run: this node and all descendants
Test this nodePartial run: only this node

Nodes outside a partial run’s scope don’t re-execute. They contribute their last known result, read-only:

NodeContributes
Promptits text
Outputstored content
Contextits materialized payload
Agentthe tail of its linked session
Sessionthe session reference

That’s what makes it safe to fix stage four of a pipeline and re-run only the tail.


Most full-graph ▶ Run presses start a server job (same as ). Partial runs and graphs that need interactive gates stay in the tab.

In-tab (gates / partial)Server job (▶ / ≫ / run --detach)
Approval, live handoff, tripwire parkInteractive dockRequires approve-all
Context nodesCan materialize during the runMust already have a payload
Result sessionsWired onto the canvasStatuses and outputs persisted to the graph
Survives closing the tabNoYes — reopen the workflow to resume watching

See Running and Detached runs.


A ▦ group frame is visual by default — dragging it carries its members. A frame linked to a saved sub-workflow is executable: wires into it resolve to the subgraph’s entry nodes, wires out come from its exit nodes. See Frames & sub-workflows.