workflows/orchestrate

Source: src/workflows/orchestrate.ts

orchestrate: 1 → ?. An agent decides the split, then the split runs.

How that decision is read - and why it is a parsed convention rather than a tool call - lives in plan.ts. What is left here is the shape: plan, fan out over it, optionally synthesise.

orchestrate

function

export async function orchestrate(options: OrchestrateOptions): Promise<OrchestrateResult> { /* … */ }

Asks an agent to split the work, then runs the split it asked for.

This is a dynamic fan-out: unlike {@link fanOut}, nobody wrote the tasks in advance. Everything else is the same machinery - bounded concurrency, one subagent per branch, no shared state - because a plan the model wrote deserves no more trust than a plan the caller wrote, and a good deal less latitude.

OrchestrateOptions

type

export type OrchestrateOptions = PlanOptions & {
	/** Subtasks in flight at once, as in {@link fanOut}. Defaults to 4. */
	concurrency?: number;
	/** When given, this agent turns the subtask results into one answer. */
	reduceWith?: Agent;
};

{@link PlanOptions}, plus how the planned subtasks are run and folded.

OrchestrateResult

type

export type OrchestrateResult = WorkflowResult & {
	/** What the planner asked for, after validation. Empty when planning failed. */
	plan: PlannedTask[];
	/** The planner's own turn. Kept whatever happened next. */
	planning: Result;
	/** One result per planned subtask, in plan order. */
	results: Result[];
	/** The synthesis, present only when `reduceWith` was given. */
	answer?: Result;
};

The plan, what it produced, and optionally the one answer it was folded into.

As a Result: the synthesis when reduceWith was given, otherwise the planner’s turn with the subtasks’ outputs, labelled, where its own would be. usage covers planning, subtasks and synthesis over the whole run; ok is false when the planning failed, produced nothing runnable, or a subtask failed. steps is the planner’s turn, every subtask, then the synthesis.