DSL Syntax

Workflows are declared as YAML. A file may be wrapped under a workflow: key, which is unwrapped automatically. The compiler enforces an acyclic DAG with a single entry node.

Top-level

name: my-flow
version: "1.0.1"
description: An example workflow
inputs: { goal: "write a hello world" }
nodes: [...]
outputs: { result: "{{approve.output}}" }
metadata: { tags: [prod] }

Node fields

FieldPurpose
idUnique node id
typeOne of the 13 node types
depends_onUpstream node ids (DAG edges)
configNode-specific config (validated by schema)
conditionPer-node guard expression
on_errorabort / retry / skip / fallback_branch / delegate_replan
retryRetry policy
timeout_secondsPer-node timeout
sensitivitypublic / internal / confidential / restricted
disabledSkip the node

Compile-time checks

  • Unique node ids
  • depends_on targets exist
  • The graph is an acyclic DAG (DFS coloring)
  • Exactly one entry node (no depends_on)
  • Node types are in the closed set of 13
  • {{node_id.field}} template references resolve to real node ids

depends_on and condition

- id: b
  type: Tool
  depends_on: [a]
  condition: "a.output.score > 0.5"