Skip to main content

Class: WorkflowBuilder

Defined in: packages/agentos/src/orchestration/builders/WorkflowBuilder.ts:201

Fluent builder for deterministic DAG workflows.

Steps are appended in declaration order and connected sequentially. Branch and parallel primitives fan out and automatically rejoin at the next declared step.

Call .compile() to validate the graph (must be acyclic) and obtain a CompiledWorkflow ready for invoke(), stream(), or resume().

Constructors​

Constructor​

new WorkflowBuilder(name): WorkflowBuilder

Defined in: packages/agentos/src/orchestration/builders/WorkflowBuilder.ts:220

Parameters​

name​

string

Human-readable workflow name.

Returns​

WorkflowBuilder

Methods​

branch()​

branch(condition, routes): this

Defined in: packages/agentos/src/orchestration/builders/WorkflowBuilder.ts:318

Append a conditional branch to the workflow.

The condition function is evaluated at runtime against GraphState and must return one of the keys of routes. Each route becomes its own branch node; all branches become the collective tail that the next declared step connects from.

Parameters​

condition​

(state) => string

Routing function; return value must match a key in routes.

routes​

Record<string, StepConfig>

Map of route key → step config for each branch arm.

Returns​

this


compile()​

compile(options?): CompiledWorkflow

Defined in: packages/agentos/src/orchestration/builders/WorkflowBuilder.ts:367

Compile the workflow into an executable CompiledWorkflow.

Compilation steps:

  1. Validate that .input() and .returns() schemas were declared.
  2. Lower each InternalStep into GraphNode + GraphEdge IR objects, threading tailNodeIds to connect steps sequentially.
  3. Connect all final tail nodes to END.
  4. Run GraphCompiler.compile() to produce a CompiledExecutionGraph.
  5. Run GraphValidator.validate() with { requireAcyclic: true } — throws on cycle.
  6. Wrap in a CompiledWorkflow with a GraphRuntime backed by the given store.

Parameters​

options?​

Optional compilation options.

checkpointStore?​

ICheckpointStore

Custom checkpoint persistence backend; defaults to InMemoryCheckpointStore.

deps?​

NodeExecutorDeps

Runtime-execution dependencies forwarded to the underlying NodeExecutor. Wire in toolOrchestrator for tool nodes, loopController + providerCall for gmi nodes, extensionExecutor for extension nodes, etc. Without these, the matching node types fail with success: false.

See

WorkflowRuntimeDeps

Returns​

CompiledWorkflow

Throws​

When .input() or .returns() was not called.

Throws​

When the compiled graph contains a cycle (should never happen via this API).


input()​

input(schema): this

Defined in: packages/agentos/src/orchestration/builders/WorkflowBuilder.ts:236

Declare the input schema for this workflow.

Accepts a Zod schema or any plain object; the value is forwarded to GraphCompiler which lowers it to JSON Schema via lowerZodToJsonSchema.

Parameters​

schema​

any

Input schema (Zod instance or plain JSON Schema object).

Returns​

this


parallel()​

parallel(steps, join): this

Defined in: packages/agentos/src/orchestration/builders/WorkflowBuilder.ts:333

Append a parallel fan-out to the workflow.

All steps execute concurrently (subject to runtime scheduling). After all branches complete, their outputs are merged using the join.merge reducers. The parallel branch nodes collectively become the new tail.

Parameters​

steps​

StepConfig[]

Array of step configs to execute concurrently.

join​

Fan-in configuration including merge strategy and reducers.

merge​

Record<string, BuiltinReducer | ReducerFn>

quorumCount?​

number

strategy​

"all" | "any" | "quorum"

timeout?​

number

Returns​

this


returns()​

returns(schema): this

Defined in: packages/agentos/src/orchestration/builders/WorkflowBuilder.ts:246

Declare the return (output artifacts) schema for this workflow.

Parameters​

schema​

any

Output schema (Zod instance or plain JSON Schema object).

Returns​

this


step()​

step(id, config): this

Defined in: packages/agentos/src/orchestration/builders/WorkflowBuilder.ts:293

Append a single named step to the workflow.

The step is connected from all current tail nodes and becomes the new single-element tail after it is added.

Parameters​

id​

string

Unique step identifier within this workflow.

config​

StepConfig

Execution and policy configuration for the step.

Returns​

this


then()​

then(id, config): this

Defined in: packages/agentos/src/orchestration/builders/WorkflowBuilder.ts:304

Alias for step() — reads more naturally when chaining sequential steps.

Parameters​

id​

string

Unique step identifier.

config​

StepConfig

Execution and policy configuration.

Returns​

this


transport()​

transport(type, config?): this

Defined in: packages/agentos/src/orchestration/builders/WorkflowBuilder.ts:275

Attach a transport backend to this workflow.

When type is 'voice', the compiled workflow will route graph I/O through the voice transport adapter at runtime. The config values override per-field defaults from agent.config.json.

The transport config is stored as _transportConfig on the builder instance and is available for inspection or forwarding to the runtime.

Parameters​

type​

"voice"

Transport kind; currently only 'voice' is supported.

config?​

Omit<VoiceTransportConfig, "type">

Optional voice pipeline overrides (STT, TTS, voice, etc.).

Returns​

this

this for fluent chaining.

Example​

const wf = workflow('voice-flow')
.input(inputSchema)
.returns(outputSchema)
.transport('voice', { stt: 'deepgram', tts: 'openai', voice: 'alloy' })
.step('listen', { tool: 'listen_tool' })
.compile();