Skip to content

Each node type

A node’s shape selects its type. Every node accepts shape, label, class and max_visits; every attribute lists those and the graph-level attributes. Unknown attributes are errors.

Shape Type Required attributes Optional attributes
box or omitted Agent Exactly one of prompt or prompt_file outputs, fidelity, thread, profile, turn settings
parallelogram Command Either probes, or script with facts timeout with script
insulator Wait duration none
folder Worktree action="create" or action="remove" none
component Fan-out At least two bare outgoing branch edges max_parallel, default 4
tripleoctagon Fan-in none prompt or prompt_file, fidelity
Msquare Terminal none outcome, default success

Renders its prompt and calls a harness. prompt holds the text inline; prompt_file="prompts/review.md" names a companion file relative to the graph file. Never declare both. Sidecars are reread before later visits; an invalid edit reports a diagnostic and falls back to the validated prompt.

outputs declares comma-separated name:kind entries with kinds choice, text, json and work. See context for each kind’s contract.

script runs one literal shell command through bash -c in the primary working folder, inheriting the server environment. It is not a prompt template. facts declares comma-separated dotted names and kinds, such as check.ready:bool, check.count:number and check.detail:text. timeout defaults to ten minutes and accepts durations such as 30s.

The final stdout line must be one JSON object containing exactly the declared keys with matching types. Earlier lines are free-form output. A timeout, non-zero exit or malformed final object fails the stage and sets <node>.failed to true; successful execution sets it false and saves the facts. Scripts cannot overwrite built-in probe facts or reserved failure paths.

probes="pr,threads" reads built-in observations once per repository folder. Do not add facts, script or timeout to a probe node.

Probe Observation
pr Current branch’s pull request, checks, review state and merge state.
threads Review threads on that pull request.
diff Changes in the working branch.
worktree Whether attached checkouts can be removed without losing work.

Plain folders supply no repository observations. Failed probe attempts retry inside the same node and record retry progress; they spend no new node visits and take no graph failure edge per attempt.

duration accepts values such as 15m, 30s or 1h. Waiting keeps the interface responsive, spends no agent visit budget, and the operator can skip the remaining time. The transcript records that choice.

action="create" makes one isolated checkout per repository folder under the Orbital worktree directory, on one generated branch. Plain folders stay in place. The run’s folder paths track the checkouts, and a partial creation failure retains completed work for retry.

action="remove" measures all checkouts first and removes none if any would lose dirty files or unpushed work. It writes run-wide worktree.clean and worktree.status. Removal does not delete branches.

component starts each bare outgoing edge as a branch, up to max_parallel at a time. Every branch must reach the same tripleoctagon join, and branches cannot contain cycles, nested fan-outs or edges escaping the branch.

A join with a prompt runs one synthesis turn on the run’s default harness. Without a prompt it is only a barrier. See history and threads for branch context rules.

outcome accepts success, failed and aborted. Outgoing edges are ignored with a warning. Graphs loaded from disk accept the legacy value abandoned and normalise it to aborted; saving a custom graph in the browser rejects the legacy spelling. Use aborted in new graphs. The ticket workflow keeps the legacy spelling.

Any node with an import attribute is a placeholder, whatever its shape. It is replaced with the imported graph before validation. Node IDs acquire the placeholder prefix, incoming edges target the imported entry, and imported terminals become named exits. A placeholder can carry a class but cannot override prompt, harness or other execution settings. See sub graphs.

hexagon is reserved for a future human gate and cannot run; validation reports it as an unknown shape. There is no decision node. kind is rejected; use shape. The retired cylinder probe shape is rejected; use parallelogram with probes. session, edge when and order, and on_failure are not supported replacements for current syntax.

Inline attribute expressions on this page are syntax fragments. Use the complete attribute wrapper and the linked runnable examples as validation contexts.