Workflow structure
<woml>
<woml> is required and accepts no attributes. It contains optional <imports> followed by exactly one runnable workflow or reusable definition.
<workflow>
| Attribute | Required | Meaning |
|---|---|---|
id | Yes | Stable lowercase kebab-case workflow identity. |
name | No | Human-readable name used by the terminal. |
description | No | Human-readable summary used by tools and output. |
version | No | Author-owned workflow version; it does not select the WOML grammar. |
It contains exactly one <steps> plus optional singleton <config>, <lifecycle>, and <triggers>. Those four children may appear in any source order; WOML recognizes them by name. Omit <triggers> for a call-only workflow. An empty <triggers /> is invalid.
tags, workflow-level timeout, and workflow-level concurrency attributes are not accepted. Runtime policy belongs in <config>.
<config>
<config> is optional, self-closing, may occur once, and must contain at least one attribute.
| Attribute | Type | Meaning |
|---|---|---|
concurrency | Positive integer, maximum 1,000,000 | Maximum actively executing runs for this workflow ID across processes sharing the state store. |
rate-limit | count/duration | Strict rolling-window limit on first execution starts. |
timeout | 1ms through 365d | Total run deadline after first execution starts; durable waits and lifecycle time count. |
queue | Lowercase dot/underscore/kebab name, max 128 characters | Durable FIFO scheduling lane. It is not a messaging queue. |
<config concurrency="4" rate-limit="100/1m" timeout="10m" queue="orders" />Queue time is excluded from the workflow deadline. Retry delays, approval waits, synchronous child waits, and lifecycle finalization after execution starts are included. Waiting releases concurrency capacity and reacquires it when work becomes ready.