DAG Nodes
Workflows in the HQ visual editor are built from typed nodes connected by edges. Each node has its own execution semantics and configuration surface.
Available node types
Section titled “Available node types”| Type | Purpose |
|---|---|
| Start | Entry sentinel. Receives the trigger payload. |
| End | Exit sentinel. Marks where a graph run finishes. |
| Skill | Executes a skill (LLM task) on a minion. |
| Review | Human or minion approval gate with revision loop. |
| Fan-out | Expands a sub-graph over an input array. |
| Join | N-input barrier that aggregates upstream outputs. |
| Conditional | Routes execution down one branch based on a condition. |
| Transform | LLM-driven contract bridge between two edge contracts. |
| Script | Run an inline Python or Node.js script — deterministic, no LLM. |
How nodes fit together
Section titled “How nodes fit together”flowchart LR S(("Start")) --> A["Skill: fetch"] A --> C{{"Conditional"}} C -->|ok| T["Transform"] C -->|error| E(("End")) T --> F[["Fan-out"]] F --> J(("Join")) J --> R{"Review"} R -->|approved| E R -. revision .-> AStart and End are sentinels — the editor inserts them automatically and they do not appear in the node palette. Every other node type is drag-and-drop from the palette on the left of the editor.
Common fields
Section titled “Common fields”Every node has these fields in the property panel (rendered by the common header, not by the type-specific section):
| Field | Description |
|---|---|
id | Stable identifier, unique within the graph (and within each template). |
label | Human-readable display name on the canvas. |
assigned_role | "pm" or "engineer" — the role responsible for the node (defaults vary by type). |
For type-specific configuration, see each node’s page.