Skip to content
Like what we’re building? Star on GitHub

Iterion .bot property reference

The same iterion dsl spec --write command generates Monaco's lexical keywords and properties per kind in iterDsl.generated.ts. The lexer supplies its keyword table; this registry supplies the properties. task dsl:check verifies that module alongside this reference.

Every declaration kind, node kind and block of the DSL, with the properties each accepts, the shape of every value and one line on what it means. This page is generated from the parser's property registry (pkg/dsl/spec) by iterion dsl spec --write (task dsl:gen): the registry is held to the real parser by a conformance test in both directions — every property listed here is accepted by the parser, every property the parser accepts is listed here — and task dsl:check fails when this page no longer matches the registry. The same registry gives an unknown property its remedy (iterion validate's fix: line: the closest accepted name, the block a name belongs to, the kind's own list) and feeds the property section of the authoring skills.

The readable grammar is dsl-grammar.md; the semantics of each property live in the DSL guide. The value forms:

FormWritten as
stringa quoted string: "…", a backtick raw string, or a | block scalar
identa bare name: a declared prompt, schema or node, or an accepted word
string|identeither of the two
int, number, boolan unquoted literal (3, 0.8, true)
one of …one of the listed bare words
ident list, string list, tool list, skill listan inline [a, b] list; tool refs may be dotted (mcp.server.*), a quoted element is the literal name
map{ KEY: "v" } inline, or an indented KEY: v block
with { … }with { key: "value", … }
block → kindan indented block whose lines are that kind's properties
<!-- dsl-spec:begin reference -->

Generated from the parser's property registry (pkg/dsl/spec) by iterion dsl spec --write; do not edit by hand. A conformance test holds the registry to the parser in both directions.

prompt

A named text block, referenced by system: / user: / instructions:; its body is free text with {{…}} references and {{include "file"}} directives. Blank lines in the body are dropped by the lexer; a bare header declares an empty prompt.

A top-level declaration: prompt <name>:.

Entries: indented text lines — Free text; the first line's indentation is stripped from every line.

schema

A structured-output shape; a bare header declares an empty schema.

A top-level declaration: schema <name>:.

Entries: field: string | bool | int | float | json | string[] | file [enum: "a", "b"] — One field per line; file is valid only on the output schema of a human node whose interaction collects operator bytes (C129); the enum constraint applies to strings.

cursor

A prompt-engineering dial: an enum (values:) or a numeric band map (bands:) over [0, 1], each entry carrying a prompt fragment (C083–C086).

A top-level declaration: cursor <name>:.

PropertyValueMeaning
descriptionstringFree-text description shown by the studio and the reports
valuesblock → cursor.valuesEnum form: one name: "fragment" per line, order preserved
bandsblock → cursor.bandsNumeric form: one "lo..hi": "fragment" per line

cursor.values

The enum values of a cursor.

A block opened by values: inside cursor.

Entries: name: "prompt fragment" — Order is the position a numeric invocation snaps to.

cursor.bands

The numeric bands of a cursor.

A block opened by bands: inside cursor.

Entries: "lo..hi": "prompt fragment" — The range is parsed by the compiler (C085 when malformed).

supervisor

A concurrent LLM watcher of agent nodes that enqueues steering messages the watched node reads at its next turn (docs/supervisors.md); run metadata, not a graph node.

A top-level declaration: supervisor <name>:.

PropertyValueMeaning
watchesident listAgent nodes the supervisor is armed for
modelstringModel id the backend serves, e.g. "anthropic/claude-opus-5"; empty takes the backend's default
systemidentPrompt declaration used as the system prompt
cooldownstringMinimum delay between two evaluations, e.g. "2m"
max_evalsintUpper bound on evaluations per run
monitorsstring listEvent patterns armed from the first event (the CLI --monitor grammar)

mcp_server

An MCP server the workflow may activate: stdio (command/args) or http/sse (url), optionally OAuth2.

A top-level declaration: mcp_server <name>:.

PropertyValueMeaning
transportone of stdio, http, sseHow the server is reached
commandstringstdio: the executable
argsstring liststdio: its arguments
urlstringhttp / sse: the endpoint
authblock → authOAuth2 authorization-code/PKCE settings

auth

OAuth2 settings of an MCP server (only authorization-code/PKCE is wired).

A block opened by auth: inside mcp_server.

PropertyValueMeaning
typestring"oauth2"
auth_urlstringAuthorization endpoint
token_urlstringToken endpoint
revoke_urlstringRevocation endpoint (optional)
client_idstringOAuth client id
scopesstring listScopes requested

group

A reusable node cluster with parameters, whose body holds agent/judge/router/human/tool/compute declarations and edges; instantiated by use, expanded at compile time (C141 warns on a use of an empty group). Prompts read {{params.name}}.

A top-level declaration: group <name>(<param>, …):.

Entries: node declarations and edges (src -> dst) — Nodes are addressed as <prefix>.<node> once instantiated.

use

One instance of a group; the with map binds its parameters. No body.

A top-level declaration: use <group> as <prefix> [with { <param>: "value", … }].

Entries: use g as p with { param: "value" } — A single line, no indented body.

vars

Typed run parameters, overridable with --var and presets.

A block opened by vars: inside the top level, workflow.

Entries: name: type [enum: "a", "b"] [= default] — type is string, bool, int, float, json or string[]; the enum constraint applies to strings; a json/string[] default is a quoted JSON text.

presets

Named bundles of var values selected with --recipe / --preset.

A block opened by presets: inside the top level.

Entries: name: (indented) var: literal — Each entry is a preset name with one var: literal line per value.

attachments

Operator-supplied files and images the run receives.

A block opened by attachments: inside the top level, workflow.

Entries: name: file | image — An entry may open an indented sub-block; an entry's sub-block is a attachment.

attachment

The optional sub-block of one attachment.

An entry opened by attachments: inside attachments.

PropertyValueMeaning
descriptionstringFree-text description shown by the studio and the reports
accept_mimestring listMIME types accepted
requiredboolThe run cannot start without it

secrets

Secrets the run resolves by name from the team's or the local store (docs/secrets.md).

A block opened by secrets: inside the top level.

Entries: name: "value" — The value on the header line is optional: a bare name: (with or without a sub-block) resolves the stored secret by name; an entry's sub-block is a secret.

secret

The optional sub-block of one secret.

An entry opened by secrets: inside secrets.

PropertyValueMeaning
valuestringInline value — prefer the stored secret, resolved by name
asident — value, fileHow the secret is materialised: value (env/template) or file
mount_pathstringas: file — the path inside the sandbox
envstring|identEnvironment variable that receives the value
optionalboolA missing secret does not fail the launch
hostsstring listHosts the secret may be sent to
descriptionstringFree-text description shown by the studio and the reports

agent

An LLM node with tools, structured I/O and any backend.

A node: agent <name>: at the top level or inside a group.

PropertyValueMeaning
descriptionstringFree-text description shown by the studio and the reports
modelstringModel id the backend serves, e.g. "anthropic/claude-opus-5"; empty takes the backend's default
backendstringExecution backend: claw, claude_code, codex, pi, kimi or grok
providerstringProvider hint for credential resolution, e.g. "anthropic"
commandstringExecutable that drives a CLI backend, overriding its default binary
inputidentSchema the node's input is validated against
outputidentSchema the node's structured output must match
publishidentArtifact name the output is published under (read back as {{artifacts.<name>}})
artifact_labelstool listLabels stamped on the published artifact; a quoted element is the literal label
systemidentPrompt declaration used as the system prompt
useridentPrompt declaration used as the user message
sessionone of fresh, inherit, inherit_if_available, fork, artifacts_only, persistHow the node's LLM session relates to the previous node's
session_slotidentNamed durable session slot; requires session: persist
toolstool listTools the node may call; restricts claw (C135 on a name it lacks), inert on a CLI backend
tool_policytool listTool-policy entries applied on top of tools
capabilitiestool listBoard capabilities opened to the node: board.create, board.move, board.read, … (C080/C081)
skillsskill listSkill-library skills mirrored into the run's .claude/skills
tool_max_stepsintUpper bound on tool-call rounds in one execution
max_tokensintOutput-token cap per call
reasoning_effortone of low, medium, high, xhigh, max, ultracodeReasoning effort; ultracode is xhigh plus multi-agent orchestration, reliable on Opus 4.8 and the Claude 5 family (Opus 5, Fable 5.1) only (C089 warns elsewhere); a quoted string is env-substituted at runtime
timeoutstringDuration the node may run, e.g. "20m"
readonlyboolDeclares the node mutates no workspace file, so it may run beside another branch
full_accessboolGrants the backend its full tool access
imagesstring listImage paths sent with the prompt
interactionone of none, human, llm, llm_or_human, review, asyncHow the node asks the operator (ADR-081)
interaction_promptidentPrompt the llm interaction mode answers with in the operator's place
interaction_modelstringModel the llm interaction mode uses
awaitone of wait_all, best_effortConvergence rule when several incoming branches reach the node
compressident — on, ultra, offCommand-output compression: on, ultra or off (C102)
auto_memoryident — on, offThe backend's own auto-memory: on or off (C131/C132)
permissionident — off, ask, denyTool-permission gate: off, ask or deny (C110–C112)
needsident | ident listResource(s) leased from the workflow's resources: block for the node's duration
fallbacksblock → fallbackOrdered, NAMED alternative routes taken when the primary fails (ADR-087); a chain with no route is refused
mcpblock → mcpMCP servers active for the node
compactionblock → compactionContext-compaction thresholds of the node's session
memoryblock → memoryiterion's shared-memory tools and scopes for the node
sandboxone of none, auto, or a block → sandboxSandbox for this scope: a bare mode (none, auto) or an indented block — the inline form, which needs image: or build: (C044)
cursorsblock → cursorsPrompt-engineering dials activated on the node (docs/cursors.md)

judge

An LLM node producing verdicts; same surface as an agent, typically without tools.

A node: judge <name>: at the top level or inside a group.

PropertyValueMeaning
descriptionstringFree-text description shown by the studio and the reports
modelstringModel id the backend serves, e.g. "anthropic/claude-opus-5"; empty takes the backend's default
backendstringExecution backend: claw, claude_code, codex, pi, kimi or grok
providerstringProvider hint for credential resolution, e.g. "anthropic"
commandstringExecutable that drives a CLI backend, overriding its default binary
inputidentSchema the node's input is validated against
outputidentSchema the node's structured output must match
publishidentArtifact name the output is published under (read back as {{artifacts.<name>}})
artifact_labelstool listLabels stamped on the published artifact; a quoted element is the literal label
systemidentPrompt declaration used as the system prompt
useridentPrompt declaration used as the user message
sessionone of fresh, inherit, inherit_if_available, fork, artifacts_only, persistHow the node's LLM session relates to the previous node's
session_slotidentNamed durable session slot; requires session: persist
toolstool listTools the node may call; restricts claw (C135 on a name it lacks), inert on a CLI backend
tool_policytool listTool-policy entries applied on top of tools
capabilitiestool listBoard capabilities opened to the node: board.create, board.move, board.read, … (C080/C081)
skillsskill listSkill-library skills mirrored into the run's .claude/skills
tool_max_stepsintUpper bound on tool-call rounds in one execution
max_tokensintOutput-token cap per call
reasoning_effortone of low, medium, high, xhigh, max, ultracodeReasoning effort; ultracode is xhigh plus multi-agent orchestration, reliable on Opus 4.8 and the Claude 5 family (Opus 5, Fable 5.1) only (C089 warns elsewhere); a quoted string is env-substituted at runtime
timeoutstringDuration the node may run, e.g. "20m"
readonlyboolDeclares the node mutates no workspace file, so it may run beside another branch
full_accessboolGrants the backend its full tool access
imagesstring listImage paths sent with the prompt
interactionone of none, human, llm, llm_or_human, review, asyncHow the node asks the operator (ADR-081)
interaction_promptidentPrompt the llm interaction mode answers with in the operator's place
interaction_modelstringModel the llm interaction mode uses
awaitone of wait_all, best_effortConvergence rule when several incoming branches reach the node
compressident — on, ultra, offCommand-output compression: on, ultra or off (C102)
auto_memoryident — on, offThe backend's own auto-memory: on or off (C131/C132)
permissionident — off, ask, denyTool-permission gate: off, ask or deny (C110–C112)
needsident | ident listResource(s) leased from the workflow's resources: block for the node's duration
fallbacksblock → fallbackOrdered, NAMED alternative routes taken when the primary fails (ADR-087); a chain with no route is refused
mcpblock → mcpMCP servers active for the node
compactionblock → compactionContext-compaction thresholds of the node's session
memoryblock → memoryiterion's shared-memory tools and scopes for the node
sandboxone of none, auto, or a block → sandboxSandbox for this scope: a bare mode (none, auto) or an indented block — the inline form, which needs image: or build: (C044)
cursorsblock → cursorsPrompt-engineering dials activated on the node (docs/cursors.md)

router

A routing node: fan_out_all, fan_out_each, condition, round_robin or llm (docs/routers.md). Never takes await.

A node: router <name>: at the top level or inside a group.

PropertyValueMeaning
descriptionstringFree-text description shown by the studio and the reports
modeone of fan_out_all, fan_out_each, condition, round_robin, llmRouting mode
modelstringllm mode only (C023 otherwise): Model id the backend serves, e.g. "anthropic/claude-opus-5"; empty takes the backend's default
backendstringllm mode only (C023 otherwise): Execution backend: claw, claude_code, codex, pi, kimi or grok
providerstringProvider hint for credential resolution, e.g. "anthropic"
systemidentllm mode only (C023 otherwise): Prompt declaration used as the system prompt
useridentllm mode only (C023 otherwise): Prompt declaration used as the user message
multiboolllm mode only (C023 otherwise): the model may select several outgoing edges
reasoning_effortone of low, medium, high, xhigh, max, ultracodellm mode only (C023 otherwise): Reasoning effort; ultracode is xhigh plus multi-agent orchestration, reliable on Opus 4.8 and the Claude 5 family (Opus 5, Fable 5.1) only (C089 warns elsewhere); a quoted string is env-substituted at runtime
overstringfan_out_each: expression naming the collection to iterate
asidentfan_out_each: alias each item is bound to ({{each.<as>}})
keyidentfan_out_each: item field that names each branch
depends_onidentfan_out_each: item field naming the branch this one waits for (requires key)
needsident | ident listResource(s) leased from the workflow's resources: block for the node's duration

human

A pause point the operator answers (interaction human, the default), an LLM answers (llm / llm_or_human), or a review gate (review).

A node: human <name>: at the top level or inside a group.

PropertyValueMeaning
descriptionstringFree-text description shown by the studio and the reports
inputidentSchema the node's input is validated against
outputidentSchema the node's structured output must match
publishidentArtifact name the output is published under (read back as {{artifacts.<name>}})
artifact_labelstool listLabels stamped on the published artifact; a quoted element is the literal label
instructionsidentPrompt shown to the operator as the question
systemidentPrompt declaration used as the system prompt
modelstringModel id the backend serves, e.g. "anthropic/claude-opus-5"; empty takes the backend's default
interactionone of none, human, llm, llm_or_human, review, asyncHow the node asks the operator (ADR-081)
interaction_promptidentPrompt the llm interaction mode answers with in the operator's place
interaction_modelstringModel the llm interaction mode uses
min_answersintAnswers required before the node resumes
awaitone of wait_all, best_effortConvergence rule when several incoming branches reach the node
review_urlstringreview: the PR/MR the gate reviews (a {{…}} reference is accepted)
posturestring|ident — human_required, agent_verdict_okreview: who may merge — human_required (default) or agent_verdict_ok; not validated at compile, another word reads as the default
merge_strategystring|ident — squash, mergereview: squash (default) or merge; not validated at compile
merge_intostring|identreview: current (default), none or a branch name
max_turnsintreview: conversation turns before the gate escalates

tool

The deterministic node, no LLM. One of three recipes: command: runs through bash -c, script: through the interpreter language: names, action: calls a connector operation (ADR-098). With output: a command prints schema-shaped JSON on stdout. A Verified Action adds goal + postcondition + policy + recovery (ADR-044), which an action: refuses (C262/C263).

A node: tool <name>: at the top level or inside a group.

PropertyValueMeaning
descriptionstringFree-text description shown by the studio and the reports
commandstringShell command, run through bash -c (exclusive with script)
scriptstringInline script run by the interpreter language: names
languageident — js, node, py, python, python3, sh, bashInterpreter for script:
inputidentSchema the node's input is validated against
outputidentSchema the node's structured output must match
publishidentArtifact name the output is published under (read back as {{artifacts.<name>}})
artifact_labelstool listLabels stamped on the published artifact; a quoted element is the literal label
awaitone of wait_all, best_effortConvergence rule when several incoming branches reach the node
sandboxone of none, auto, or a block → sandboxSandbox for this scope: a bare mode (none, auto) or an indented block — the inline form, which needs image: or build: (C044)
compressident — on, ultra, offCommand-output compression: on, ultra or off (C102)
permissionidentParsed for symmetry but NOT enforced on a tool node (C112 warns): the command runs directly, the gate is an agent's
needsident | ident listResource(s) leased from the workflow's resources: block for the node's duration
parallel_safeboolDeclares the node safe to run beside a mutating branch
goalstringVerified action: what the command is for, in one line
postconditionstringVerified action: command whose exit code is the truth oracle at every rung
policyident — required, recover, best_effortVerified action: required (default), recover or best_effort (C103–C106)
recoveryblock → recoveryVerified action: the self-heal ladder's bounds
actionidentConnector operation to call, connector.resource.verb — exclusive with command:/script: (ADR-098, C260)
connectionidentThe connection binding that authenticates the action (C261)
paramsblock → paramsThe action's arguments, by the operation's own parameter keys
retrystringAction: how many EXTRA attempts, e.g. 3; a duration is refused and empty means none (C265). Inert without action: (C266)
timeoutstringAction: bound on one call, e.g. "30s" (C265). Inert without action: (C266)

params

The arguments of a connector action, keyed by the operation's own parameter names.

A block opened by params: inside tool.

Entries: key: "value" — A {{…}} template is rendered and then coerced to the type the operation declares, so an integer field receives a number.

recovery

Bounds of a Verified Action's recovery ladder (idempotent-skip → recipe → self-repair → agent → policy).

A block opened by recovery: inside tool.

PropertyValueMeaning
max_repair_attemptsintSelf-repair rungs before the agent rung
max_agent_attemptsintAgent rungs before the policy decides
modelstringModel id the backend serves, e.g. "anthropic/claude-opus-5"; empty takes the backend's default
agent_toolstool listTools the recovery agent may call

compute

A deterministic expression node: each expr entry is evaluated by the bounded expression language into an output field.

A node: compute <name>: at the top level or inside a group.

PropertyValueMeaning
descriptionstringFree-text description shown by the studio and the reports
inputidentSchema the node's input is validated against
outputidentSchema the node's structured output must match
publishidentArtifact name the output is published under (read back as {{artifacts.<name>}})
artifact_labelstool listLabels stamped on the published artifact; a quoted element is the literal label
awaitone of wait_all, best_effortConvergence rule when several incoming branches reach the node
exprblock → exprOne field: "expression" per output field

expr

The expressions of a compute node.

A block opened by expr: inside compute.

Entries: field: "expression" — An expression over vars, input, outputs, artifacts, loop and run — not a {{template}}.

subbot

Runs another .bot as a nested child run; its outputs read back as {{outputs.<subbot>.<field>}} (C119).

A node: subbot <name>: at the top level or inside a group.

PropertyValueMeaning
descriptionstringFree-text description shown by the studio and the reports
sourcestringPath of the child .bot, relative to this file
withwith { … }Child vars; {{…}} references are allowed in the values
outputidentSchema the node's structured output must match
needsident | ident listResource(s) leased from the workflow's resources: block for the node's duration
isolatedboolAsserts the child runs in its own workspace

emit

Publishes a named run-scoped event with an immutable payload (ADR-051).

A node: emit <name>: at the top level or inside a group.

PropertyValueMeaning
descriptionstringFree-text description shown by the studio and the reports
eventstringEvent name
withwith { … }Payload fields

wait

Blocks its branch until the named event fires; the timeout is mandatory (ADR-051, C196–C198).

A node: wait <name>: at the top level or inside a group.

PropertyValueMeaning
descriptionstringFree-text description shown by the studio and the reports
eventstringEvent name awaited
timeoutstringDuration after which the wait fails, e.g. "30s" (mandatory)
outputidentSchema the node's structured output must match

await_answers

Parks its branch until every pending ask_user_async question of from: (or the whole run) is answered; output {answers: […]} (ADR-081, C241/C242).

A node: await_answers <name>: at the top level or inside a group.

PropertyValueMeaning
descriptionstringFree-text description shown by the studio and the reports
fromstring|identNode whose async questions are awaited; omit for the whole run
timeoutstringDuration after which the node fails, e.g. "30m" (mandatory)

fail

A named terminal failure with a typed code and a message (C247 checks the UPPER_SNAKE code, C248 refuses a reserved one).

A node: fail <name>: at the top level or inside a group.

PropertyValueMeaning
descriptionstringFree-text description shown by the studio and the reports
codestring|identError code, UPPER_SNAKE (bare or quoted)
messagestringMessage; {{…}} references are rendered
resumableboolLeaves the run failed_resumable instead of failed

workflow

The graph: entry, edges (src -> dst [when …|else] [as loop(N)] [with {…}]), and the run-wide settings; a bare header declares an empty workflow (C008).

A top-level declaration: workflow <name>:.

PropertyValueMeaning
entryidentNode the run starts at; a dotted name addresses a group instance's node
varsblock → varsWorkflow-scoped vars (merged with the file's)
attachmentsblock → attachmentsWorkflow-scoped attachments
budgetblock → budgetRun caps, each overridable by the matching run flag
resourcesblock → resourcesNamed semaphores and pools nodes lease with needs:
mcpblock → mcpMCP servers active for the run
compactionblock → compactionDefault compaction thresholds
sandboxone of none, auto, or a block → sandboxSandbox for this scope: a bare mode (none, auto) or an indented block — the inline form, which needs image: or build: (C044)
worktreeident — auto, noneauto runs the workflow in a fresh git worktree, finalised into a branch; none runs in place
default_backendstringBackend for nodes that name none
compressident — on, ultra, offCommand-output compression: on, ultra or off (C102)
auto_memoryident — on, offThe backend's own auto-memory: on or off (C131/C132)
loop_budget_guardident — on, offDecline a loop's back-edge the budget cannot fund: on (default) or off (C133)
repo_devboxident — on, offLoad the target repo's devbox.json toolchain: on (default) or off (C134)
workspace_checkpointident — on, offMid-run preservation of a copy-based sandbox's workspace as a checkpoint branch pushed to the run's own remote: on (default) or off (C139)
permissionident — off, ask, denyTool-permission gate: off, ask or deny (C110–C112)
allowstring listPermission rules always allowed, Tool(pattern) syntax
askstring listPermission rules that pause for approval
denystring listPermission rules always blocked
tool_policytool listRun-wide tool-policy entries
capabilitiestool listRun-wide board capabilities
skillsskill listRun-wide skill-library skills
interactionone of none, human, llm, llm_or_human, review, asyncDefault interaction mode for the run's nodes that set none

budget

Run caps; a zero or absent cap is the engine default, and each is overridable per run without editing the .bot.

A block opened by budget: inside workflow.

PropertyValueMeaning
max_parallel_branchesintConcurrent branches (0 = engine default)
max_durationstringWall-clock cap, e.g. "4h"
max_cost_usdnumberSpend cap in USD
max_tokensintTotal token cap
warn_tokensintAdvisory: crossing it emits budget_warning
max_iterationsintTotal node executions; also the fuel of an unbounded loop (C097)

resources

Named resources nodes lease with needs:.

A block opened by resources: inside workflow.

Entries: name: <int> | ["member-a", "member-b"] — A count is a semaphore; a quoted list is a pool whose members are leased one at a time.

compaction

When and how a session's context is compacted.

A block opened by compaction: inside workflow, agent, judge.

PropertyValueMeaning
thresholdnumberContext fraction (0–1) that triggers compaction
preserve_recentintRecent messages kept verbatim

memory

iterion's shared-memory tools for a node (docs/memory-and-knowledge.md); distinct from auto_memory.

A block opened by memory: inside agent, judge.

PropertyValueMeaning
enabledboolOpen the memory tools to the node
scopestringMemory scope the tools read and write
autoloadstring listDocuments injected at node start
readboolAllow memory_read
writeboolAllow memory_write
pre_compact_injectboolRe-inject memory before a compaction
project_rootboolKey the space on the repository root rather than the working directory (legacy; exclusive with visibility) — profile 1 only (removed in profile 2)
visibilitystring — bot, project, cross_project, user, org, globalWho sees the space (C170); quoted

mcp

Which MCP servers are active; an empty block wires nothing (C135 stays an error).

A block opened by mcp: inside workflow, agent, judge.

PropertyValueMeaning
autoload_projectboolWorkflow scope: load the repository's .mcp.json servers (default true)
inheritboolNode scope: inherit the workflow's active servers (default true)
serversident listmcp_server declarations activated
disableident listServers removed from the ambient set

sandbox

Per-run container isolation (docs/sandbox.md): the short form names a mode, the block form is inline and needs image: or build: (C044).

A block opened by sandbox: inside workflow, agent, judge, tool.

PropertyValueMeaning
modeident — none, auto, inlinenone, auto (devcontainer.json or the published slim image) or inline (C044 on another word)
imagestringContainer image (exclusive with build)
buildblock → sandbox.buildDockerfile build, local docker only (V2-6)
userstringContainer user
workspace_folderstringMount point of the workspace inside the container
host_stateident — auto, noneMount ~/.iterion and ~/.claude into the container: auto or none
post_createstringCommand run once after the container starts
envmapEnvironment variables
mountsstring|ident listExtra bind mounts
networkblock → sandbox.networkEgress policy (open by default)

sandbox.build

A Dockerfile build of the sandbox image (docker driver only).

A block opened by build: inside sandbox.

PropertyValueMeaning
dockerfilestringDockerfile path
contextstringBuild context
argsmapBuild arguments

sandbox.network

Network egress of the sandbox, enforced by a CONNECT proxy on the host.

A block opened by network: inside sandbox.

PropertyValueMeaning
modeident — open, allowlist, denylistopen (no proxy), allowlist or denylist (C044 on another word)
presetstring|identRule preset, e.g. "iterion-default"
inheritident — replace, appendHow a node's rules compose with the workflow's: omit to merge (the default), or replace / append (C044 on another word)
rulesstring|ident listHosts and globs; a leading ! negates

cursors

Cursor activation on a node: the reserved enabled: key plus one setting per declared cursor.

A block opened by cursors: inside agent, judge.

PropertyValueMeaning
enabledboolGate for the whole block (an explicit block opts in)

Entries: cursor_name: ident | number | "string" — A value name, a position in [0, 1], or a quoted string for ${VAR} substitution.

fallback

One named route of a fallbacks: chain (ADR-087/ADR-091), tried in declaration order.

An entry opened by fallbacks: inside agent, judge.

PropertyValueMeaning
backendstringExecution backend: claw, claude_code, codex, pi, kimi or grok
modelstringModel id the backend serves, e.g. "anthropic/claude-opus-5"; empty takes the backend's default
providerstringProvider hint for credential resolution, e.g. "anthropic"
onident list over usage_window, auth, unavailable, transient_exhausted, anyFailure classes that take this route (default usage_window, unavailable; never any or auth by default)
meteredboolThe route spends a metered API key (credential hint)
actionident — skipskip: complete the node with a zero-value output stamped _skipped instead of failing
whenstringExpression over vars that gates the route
<!-- dsl-spec:end -->