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.
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.
Single Approver
Multi-Approver
Any user with the automation:execute permission can approve or reject. The workflow resumes immediately on the first response.
Field
Description
Message
Displayed to the approver (supports template variables)
Timeout
Minutes to wait before auto-action (0 = wait forever)
Require approval from specific users or a minimum number of approvers.
Field
Description
Assigned Approvers
Specific user IDs who can approve
Min Approvals
Number of approvals needed to proceed
Timeout
Minutes to wait before auto-action
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}}.
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:
Field
Description
Notify on Error
Send a notification when the error handler activates
Available error context variables:
Variable
Description
{{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
Example: SSH Failure → Slack Alert
An SSH action tries to restart a service. The Error Handler catches the failure and sends a Slack message:
Copy
SSH action failed on {{incident.host}}: {{error.message}}Exit code: {{error.exitCode}}
Iterates over a collection and executes the configured action for each item. Useful for operations that need to run across multiple targets.Configuration:
Field
Description
Default
Collection
Template variable path to iterate over
required
Item Variable
Variable name for the current item
item
Max Items
Maximum items to process (1–100)
100
Continue on Error
Keep iterating even if one item fails
false
Action Type
What to execute for each item
required
Connection
Target system for the action
required
Available loop variables:
Variable
Description
{{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.
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.
Waits for parallel branches to complete before continuing.
All Mode
Any Mode
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.
Continues as soon as any one incoming branch completes. Remaining branches continue running but their results don’t affect the main flow.Use this for redundancy patterns — for example, trying multiple remediation approaches and proceeding with whichever succeeds first.
Configuration:
Field
Description
Join Mode
all (wait for everything) or any (first completion)
Timeout
Maximum seconds to wait for branches (0 = wait forever)
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:
Field
Description
Target Workflow
The published workflow to invoke
Input Mapping
Map variables from the current execution to the subworkflow’s input
Wait for Completion
Wait for the subworkflow to finish before continuing
Circular references are detected at publish time. You cannot create a subworkflow chain where Workflow A calls B which calls A (directly or indirectly).
Example: Shared Notification Block
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.