Skip to main content

Overview

Workflows are built from 10 node types, each serving a distinct purpose. Drag them from the palette onto the canvas and connect them with edges to define your automation logic.
Node TypeColorPurposeOutput Handles
TriggerAmberEntry point — defines when the workflow starts1 (bottom)
ActionBlueExecutes a task on a target system2 (success, error)
ConditionIndigoBranches based on a boolean expression2 (true, false)
DelayCyanPauses execution for a specified duration1 (bottom)
ApprovalEmeraldWaits for human approval before continuing2 (approved, rejected)
Error HandlerRoseCatches and handles upstream failures1 (bottom)
ForEachOrangeIterates over a collection2 (success, error)
ParallelVioletSpawns multiple concurrent branchesMultiple
JoinVioletWaits for parallel branches to complete1 (bottom)
SubworkflowPinkInvokes another published workflow2 (success, error)

Trigger

The entry point of every workflow. Exactly one Trigger node is required per workflow. Trigger Types:
TypeFires When
incident.createdA new incident is created
incident.acknowledgedAn incident is acknowledged
incident.resolvedAn incident is resolved
incident.escalatedAn incident escalates to the next level
incident.reassignedAn incident is reassigned to a different team
webhookAn external HTTP POST hits the workflow’s webhook URL
scheduleA cron expression matches the current time
manualSomeone clicks Execute in the UI
Trigger Conditions let you filter which events activate the workflow. For example, “only trigger on critical incidents from the payment service.”
For a detailed guide on configuring each trigger type, including conditions, webhooks, and cron expressions, see the Triggers guide.

Action

Executes a task on a target system via an agent and connection. This is the most common node type. Configuration:
FieldDescription
Action TypeWhat to execute (e.g., ssh.executeCommand, http.request, slack.sendMessage)
ConnectionWhich target system to use
Agent / PoolWhich agent executes the action (or auto-select from pool)
ParametersAction-specific settings (command, URL, message, etc.)
TimeoutMaximum execution time in seconds
Max RetriesNumber of retry attempts on failure (0 = no retry)
Retry DelaySeconds to wait between retries
Output Handles:
  • Success (bottom-left) — Execution succeeded (exit code 0 or HTTP 2xx)
  • Error (bottom-right) — Execution failed (non-zero exit, timeout, or error)
Action outputs are available as template variables: {{nodes.<nodeId>.output.stdout}}, {{nodes.<nodeId>.output.statusCode}}, etc.
For a complete reference of all 25+ action types and their parameters, see the Actions guide.

Condition

Branches the workflow based on a boolean expression. The workflow follows the True or False edge based on the evaluation result. Configuration:
FieldDescriptionExample
FieldThe value to evaluate (supports template variables){{incident.severity}}
OperatorComparison operatorequals
ValueThe value to compare againstcritical
Available Operators:
OperatorDescriptionRequires Value
equalsExact string/value matchYes
notEqualsNot equalYes
containsSubstring or element in collectionYes
notContainsNot containedYes
startsWithString starts with prefixYes
endsWithString ends with suffixYes
greaterThanNumeric greater thanYes
greaterThanOrEqualNumeric greater than or equalYes
lessThanNumeric less thanYes
lessThanOrEqualNumeric less than or equalYes
inValue is in a comma-separated listYes
notInValue is not in a listYes
existsValue is not null/undefinedNo
notExistsValue is null/undefinedNo
isEmptyString/array/object is emptyNo
isNotEmptyNot emptyNo
matchesRegex pattern matchYes
Output Handles:
  • True (bottom-left) — Condition evaluated to true
  • False (bottom-right) — Condition evaluated to false
A condition node checks {{incident.severity}} equals critical:
  • True path → Restart service + page on-call engineer
  • False path → Send Slack notification only

Delay

Pauses the workflow execution for a specified duration before continuing to the next node. Configuration:
FieldDescriptionRange
DurationHow long to pause0 – 2,592,000 seconds (30 days)
Use cases:
  • Wait 5 minutes after restarting a service to verify it’s healthy
  • Add a cooldown period between retry attempts
  • Delay notifications to avoid alert fatigue during incident storms
Delay nodes are non-blocking to the engine — the execution is scheduled to resume at the specified time, freeing resources for other workflows.

Approval

Pauses the workflow and waits for a human to approve or reject before continuing. This is essential for high-risk automations where you want a human in the loop.
Any user with the automation:execute permission can approve or reject. The workflow resumes immediately on the first response.
FieldDescription
MessageDisplayed to the approver (supports template variables)
TimeoutMinutes to wait before auto-action (0 = wait forever)
Output Handles:
  • Approved (bottom-left) — Approval granted
  • Rejected (bottom-right) — Approval denied or timed out
Approvers can add a note when approving or rejecting. The note is recorded in the execution log and accessible via {{nodes.<nodeId>.output.responseNote}}.

Error Handler

Catches failures from upstream nodes and executes remediation logic. Connect an Error Handler to any node’s error output to define what happens when things go wrong. Configuration:
FieldDescription
Notify on ErrorSend a notification when the error handler activates
Available error context variables:
VariableDescription
{{error.message}}Error message from the failed node
{{error.nodeId}}ID of the node that failed
{{error.actionType}}Action type that failed (e.g., ssh.executeCommand)
{{error.exitCode}}Exit code of the failed action
{{error.statusCode}}HTTP status code (for HTTP actions)
{{error.output}}Full output from the failed action
An SSH action tries to restart a service. The Error Handler catches the failure and sends a Slack message:
SSH action failed on {{incident.host}}: {{error.message}}
Exit code: {{error.exitCode}}

ForEach

Iterates over a collection and executes the configured action for each item. Useful for operations that need to run across multiple targets. Configuration:
FieldDescriptionDefault
CollectionTemplate variable path to iterate overrequired
Item VariableVariable name for the current itemitem
Max ItemsMaximum items to process (1–100)100
Continue on ErrorKeep iterating even if one item failsfalse
Action TypeWhat to execute for each itemrequired
ConnectionTarget system for the actionrequired
Available loop variables:
VariableDescription
{{foreach.item}}Current item value
{{foreach.index}}Current iteration index (0-based)
{{foreach.total}}Total number of items
ForEach loops have a maximum nesting depth of 2. You cannot nest more than 2 ForEach nodes inside each other. The maximum items per loop is 100.

Parallel & Join

Parallel

Spawns multiple concurrent branches. Connect multiple nodes to the Parallel node’s outputs to create branches that execute simultaneously. Configuration: No configuration required — the branch structure is defined by the edges you draw.
A single workflow supports up to 15 parallel branches. Each branch executes independently on separate agents if available.

Join

Waits for parallel branches to complete before continuing.
Waits for all incoming branches to complete. The workflow continues only when every branch has finished (success or failure).Use this when all parallel operations must complete before proceeding — for example, restarting multiple services before running a health check.
Configuration:
FieldDescription
Join Modeall (wait for everything) or any (first completion)
TimeoutMaximum seconds to wait for branches (0 = wait forever)

Subworkflow

Invokes another published workflow as a step in the current workflow. This enables modular workflow design — build reusable automation blocks and compose them into larger flows. Configuration:
FieldDescription
Target WorkflowThe published workflow to invoke
Input MappingMap variables from the current execution to the subworkflow’s input
Wait for CompletionWait for the subworkflow to finish before continuing
Output Handles:
  • Success (bottom-left) — Subworkflow completed successfully
  • Error (bottom-right) — Subworkflow failed
Circular references are detected at publish time. You cannot create a subworkflow chain where Workflow A calls B which calls A (directly or indirectly).
Create a “Notification Workflow” that sends alerts to Slack, creates a Jira ticket, and updates the status page. Then invoke it as a subworkflow from any incident response workflow, passing the incident data via input mapping.

Quick Reference

Node TypeWhen to UseKey ConfigOutputs
TriggerStarting point of every workflowTrigger type, conditions1
ActionExecute any taskAction type, connection, paramsSuccess / Error
ConditionBranch on dataField, operator, valueTrue / False
DelayPause executionDuration (seconds)1
ApprovalHuman decision gateMessage, approvers, timeoutApproved / Rejected
Error HandlerHandle failuresNotify flag1
ForEachProcess collectionsCollection, item var, max itemsSuccess / Error
ParallelRun branches concurrently(edges define branches)Multiple
JoinWait for branchesMode (all/any), timeout1
SubworkflowReuse workflow logicTarget workflow, input mappingSuccess / Error