Workflows

Execution graphs with names and versions — repeatable work as a deployable unit.

A workflow is an execution graph promoted to a product: named, parameterized, versioned, and runnable by anyone or anything with the scope to invoke it. The weekly brief, the invoice chase, the contract intake — each starts life as a run that worked, gets saved as a graph template, grows typed parameters (which client, which date range, which tone), and becomes a workflow your team and your systems call like a function. Versioning is where workflows earn their keep. Every edit creates a new version; versions are immutable once published; each version carries its own eval suite from the evals pillar, and promotion from draft to live requires the suite to pass. Rollback is instant because the old version never stopped existing. Invocation is flexible — dashboard button, CLI, API call, schedule, or webhook — but execution is uniform: every invocation is a run with a trace, attributed to the workflow version that produced it, so the question 'did the new version cause this' is answerable by filtering. Workflows compose: a step in one workflow can invoke another, with the kernel checking scopes across the boundary and the trace showing the full nested execution. Inputs and outputs are typed with JSON schemas, validated at the edge, so callers fail fast on bad input instead of discovering it three steps deep.

[ 01 ]Key features

Immutable versions

Published versions never change; edits create new ones. Rollback is selecting a version that still exists, instantly.

Eval-gated promotion

Each version carries an eval suite; draft-to-live promotion requires a passing run — quality regressions stop at the gate.

Typed inputs and outputs

JSON-schema validation at invocation — bad input fails immediately at the edge, not three steps into execution.

Composable with scope checks

Workflows invoke workflows; the kernel re-checks scopes at every boundary and traces show the nested execution whole.

[ 02 ][ invoke ]

POST /v1/workflows/wf_weekly_brief/invoke
{
  "version": "live",
  "input": {
    "client": "client:meridian",
    "range": "2026-06-01..2026-06-07",
    "tone": "formal"
  }
}
→ { "run": "run_22d8e0a1", "version": "v7" }