Pipeline step kinds
Step kinds
Section titled “Step kinds”Trigger
Section titled “Trigger”The entry point of a pipeline. Every pipeline has exactly one trigger step.
Configuration: none by default. Accepts manual runs and event/schedule triggers.
Prompt agent
Section titled “Prompt agent”Dispatches an agent with a prompt.
| Config field | Type | Description |
|---|---|---|
agent |
String? |
Agent ID (or null to use pipeline input) |
prompt |
String |
Instruction text. Supports {{inputKey}} placeholders. |
mode |
Mode |
Chat, plan, or review |
timeout |
int? |
Wall-clock timeout in seconds |
retry |
StepRetryPolicy? |
Retry configuration |
continueOnFail |
bool |
Whether downstream steps proceed on failure |
outputKey |
String? |
Key for writing output to state |
outputSchema |
String? |
JSON Schema for validating output |
Bash script
Section titled “Bash script”Runs a shell command.
| Config field | Type | Description |
|---|---|---|
script |
String |
Shell command to execute |
workingDir |
String? |
Working directory |
env |
Map<String, String>? |
Additional environment variables |
timeout |
int? |
Wall-clock timeout in seconds |
retry |
StepRetryPolicy? |
Retry configuration |
continueOnFail |
bool |
Whether downstream steps proceed on failure |
Dispatch reviewers
Section titled “Dispatch reviewers”Fans out PR review to matched reviewer agents.
| Config field | Type | Description |
|---|---|---|
prUrl |
String |
PR URL (can reference {{inputKey}}) |
reviewerRoles |
List<String> |
Roles to dispatch (e.g. [“reviewer”, “security”]) |
Router / Conditional
Section titled “Router / Conditional”Routes to different downstream steps based on a condition.
| Config field | Type | Description |
|---|---|---|
condition |
String |
Expression that evaluates to a route key |
routes |
Map<String, String> |
Route key to downstream step ID |
Each outgoing edge from the router has a routeKey. The engine evaluates the condition and follows the matching edge.
Waits for all upstream steps to complete before proceeding.
Configuration: none. The join step implicitly waits for all connected upstream steps.
Use join to synchronize parallel branches before continuing.
Sub-pipeline
Section titled “Sub-pipeline”Executes another pipeline template as a step.
| Config field | Type | Description |
|---|---|---|
templateId |
String |
The template to execute |
inputs |
Map<String, dynamic>? |
Inputs to pass to the sub-pipeline |
The sub-pipeline runs as a child run with parentPipelineRunId set.
StepRetryPolicy
Section titled “StepRetryPolicy”| Field | Type | Description |
|---|---|---|
maxAttempts |
int |
Maximum retry attempts |
backoff |
RetryBackoff |
linear or exponential |
initialDelayMs |
int |
Initial delay before first retry |
Step result types
Section titled “Step result types”A step body returns a StepResult:
| Result | Description |
|---|---|
ok |
Success with optional output |
route |
Router result that follows a specific edge |
suspendUntilEvent |
Pause until a domain event arrives |
suspendUntilTasks |
Pause until child tasks complete |
terminal |
End the pipeline run immediately |
failed |
Step failed with an error |
PipelineNodeConfig
Section titled “PipelineNodeConfig”Per-step configuration carried inside the step definition:
prompt,script,agentId,teamId: what to executeinputKey,outputKey: state data flow keysoutputSchema: JSON Schema for output validationreducer: how to merge parallel branch outputsretry:StepRetryPolicycontinueOnFail: proceed on failuretimeout: wall-clock timeoutdispatchMode: mode for agent dispatchesextras: arbitrary extra configuration