Skip to content

Every attribute on nodes

Unknown attributes are errors everywhere. A complete graph declares at least graph [version="1", entry="hello"]. Entry must name a node or an import placeholder. Node IDs are unique; imported IDs acquire a dotted prefix during loading.

Attribute Meaning and default
version Required version string. Use 1 for a new graph.
entry Required first node ID.
description Optional description shown with the graph.
inputs, defaults Declared inputs and literal default values. See context.
max_visits Positive whole-number agent visit budget, default 200. Commands and waits do not spend it.
default_fidelity History detail, default compact. See history and threads.
permissions auto-accept by default, or full.
harness, model, effort, connection, provider Turn configuration, inherited unless overridden.
profile, profile_<name>, model_stylesheet Reusable turn configuration.

The graph also accepts every harness-specific attribute listed below.

Attribute Meaning
shape Node type. See each node type.
label Optional non-empty display text. Changes no identity and no routing.
class Names separated by commas or spaces, for model stylesheet selection.
max_visits Positive whole number counting every visit to that node, of any kind. No limit unless declared. Exceeding it holds for the operator.
Attribute Node type Constraint
prompt, prompt_file Agent, fan-in Exactly one on an agent; either or neither on a fan-in. prompt_file resolves relative to the graph file.
outputs Agent Comma-separated name:kind with kinds choice, text, json, work.
fidelity Agent, fan-in Overrides graph default_fidelity for arrivals at this node.
thread Agent Session name shared across agent nodes. Forbidden inside parallel branches.
profile Agent Selects a graph profile.
probes Command Comma-separated pr, threads, diff, worktree. Excludes script, facts and timeout.
script, facts Command Appear together. facts declares dotted name:kind with kinds bool, number, text.
timeout Command with script Duration, default ten minutes.
duration Wait Required duration such as 15m.
action Worktree Required create or remove.
max_parallel Fan-out Positive integer, default 4.
outcome Terminal success by default; also failed and aborted.
import Import placeholder Path to a complete graph, relative to the file naming it.
Attribute Default and constraint
condition Omitted means fallback, or a branch start on a fan-out.
weight Numeric, default 0. Conditioned edges are tried highest first and cannot share a weight.
fidelity Overrides target node and graph history detail for this arrival.
loop_restart false by default; true clears iteration context and sessions.
repair_budget, repair_round Must appear together. See error handling.
exit Only on edges leaving import placeholders. A normal node cannot use it.

Model, connection and provider are non-empty names interpreted by the harness. Supported harness names are claude, codex and opencode. Effort accepts minimal, low, medium, high, xhigh, max and ultra, and each harness accepts only its declared subset. Unsupported resolved settings are rejected before turns start. Claude and Codex support no connection or provider pin; OpenCode supports both.

A graph attribute such as profile_review="harness=codex effort=high" declares a named profile, and profile="review" selects it at graph or agent level. Fields are harness, model, effort, connection and provider. Unknown, duplicated or malformed fields are errors, and unused profiles warn.

model_stylesheet holds CSS-like rules, for example * { effort: medium; } .review { effort: high; }. Selectors match all nodes, a node kind, a class, or a node ID with #, and specificity rises in that order. Later equal-specificity rules win. Unknown properties fail loading; unmatched rules warn.

Each setting resolves independently through the node’s harness-specific value, the node’s unqualified value, the node’s profile, the stylesheet’s harness-specific value, the stylesheet’s unqualified value, the graph’s harness-specific value, the graph’s unqualified value, the graph’s default profile, then the harness default. Overriding effort therefore keeps the inherited model. How to use different models works through an example.

These are accepted on graphs, agent nodes and stylesheet rules. Invalid names or values are rejected even when that harness is not selected.

Attribute Values
claude_model, codex_model, opencode_model Non-empty model name.
claude_effort, codex_effort Effort supported by that harness.
claude_setting_sources Comma-separated user, project, local. Empty disables filesystem settings.
codex_sandbox_mode read-only, workspace-write, danger-full-access.
codex_approval_policy never, on-request, on-failure, untrusted.
opencode_connection, opencode_provider Non-empty configured connection or provider name.

Permissions defaults to auto-accept; full requests unrestricted approval. This is harness configuration, not an instruction inside the prompt. The transcript records the resolved turn settings.

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