Workflow Builder
Overview
The Workflow Builder lets you create, manage, and run automated multi-step processes using a visual drag-and-drop editor. You can chain together tasks like running scripts, querying cloud resources, sending notifications, and more - all without writing code. Workflows can be triggered manually, on a schedule, via webhook, or in response to events.
Why Use the Workflow Builder
- Automate infrastructure operations - Build repeatable processes for common tasks like health checks, scaling, and incident response
- Visual orchestration - Design workflows on a canvas by connecting task nodes, so you can see the full process at a glance
- Flexible triggers - Run workflows on demand, on a schedule, through HTTP webhooks, or automatically when events occur
- AI-assisted creation - Describe what you want in plain language and let NuBi AI generate a workflow for you
- Test safely - Use dry runs to validate your workflow without affecting any real systems
Key Concepts
- Workflow - An automated process made up of triggers and tasks. Each workflow has a name, status, optional tags, and a visual graph that defines the execution flow.
- Trigger - The starting point of a workflow that defines how and when it runs. A workflow can have multiple triggers. Types include Manual, Schedule, Webhook, and Event.
- Task - A single step in a workflow that performs an operation (also called an "Action" or "Node" in the interface). Tasks are connected to form a sequence of steps. Each task has a type, configurable parameters, and can reference outputs from earlier tasks.
- Node - The visual representation of a trigger or task on the canvas. You can drag, connect, and configure nodes.
- Connection - A line between two nodes that defines the execution order. Connections flow from one node to the next.
- Execution - A single run of a workflow. Each execution has a status, start/end time, and per-task results.
- Dry Run - A test execution that validates your workflow without making any real changes to your systems.
- Template Expression - Dynamic values using
{{ }}syntax that reference outputs from previous tasks or shared configurations. For example,{{ Task.output.value }}or{{ Configs.key_name }}. - Config - A shared key-value pair managed centrally and referenced across workflows using
{{ Configs.key_name }}. - Status - The current state of a workflow:
- Active - Running on its configured triggers
- Inactive - Not running
- Paused - Triggers suspended, can be resumed
- Draft - Under construction, not yet activated
Getting Started
Accessing the Workflow Builder
- Click Workflow in the left navigation sidebar
- You arrive at the Workflow listing page, which shows all your workflows with their status, triggers, tags, and last execution details

Creating Your First Workflow
- On the workflow listing page, click Create Workflow in the top-right corner

- In the modal that appears, click Make a Workflow
- The Workflow Editor opens with an empty canvas and a prompt: "Add Your Workflow Trigger Node"
- Select a trigger type - for your first workflow, choose Manual Trigger so you can run it on demand
- A trigger node appears on the canvas
- Click the trigger node to configure it. In the sidebar that opens, you can optionally define input parameters as JSON
- Click Add Action in the bottom toolbar to add a task
- Browse or search the task categories, then click the task you want (for example, Execute script under Scripting)
- A new task node appears on the canvas
- Connect the trigger to the task by dragging from the trigger node's output port to the task node's input port
- Click the task node to configure its parameters in the sidebar
- Click the Save icon in the bottom toolbar to save your workflow
- Click Run to execute your workflow
You can also let AI build your workflow. Click Create Workflow, then choose Ask nubi AI to generate. Describe what you want in plain language, review the AI's plan, and approve it to generate the workflow automatically.
Building Workflows
The Workflow Editor
The editor is where you design and configure your workflows visually.

Header bar:
- Back arrow - Returns to the workflow listing page
- Workflow title - Click the pencil icon to rename your workflow inline
- Editor / Executions tabs - Switch between designing and viewing run history (available after saving)
Canvas:
- A drag-and-drop visual editor with a dot grid background
- Drag nodes to reposition them on the canvas
- Use the scroll wheel to zoom in and out
- Click and drag the background to pan
- Use the MiniMap (bottom-right) for an overview of large workflows
- Use the zoom controls (bottom-left) to zoom in, zoom out, or fit the view
Bottom toolbar (appears once you have nodes on the canvas):
- Add Action - Add a new task to the workflow
- Run - Save and execute the workflow (available after first save)
- Dry Run - Validate the workflow without making real changes
- AI Chat - Open the NuBi AI sidebar for conversational editing
- Save - Save the current workflow
- Settings - Open workflow settings
- Status dropdown - Set the workflow to Active, Inactive, Paused, or Draft

JSON panel:
- Click the JSON toggle on the right edge of the canvas to view and edit the workflow definition as raw JSON
- Click Apply to sync your JSON changes back to the visual editor

Adding Tasks
- Click Add Action in the bottom toolbar
- The task browser opens with searchable categories
- Browse a category or type in the Search actions bar to find a task
- Click a task to add it to the canvas

Tasks are organized into the following categories:
| Category | Description |
|---|---|
| Cloud | Cloud provider operations (AWS, Azure, GCP) |
| Kubernetes | Kubernetes cluster operations |
| Database | Database operations (Redis, etc.) |
| Scripting | Custom script execution |
| Integrations | HTTP requests and external integrations |
| Notifications | Slack, MS Teams, and Google Chat messages |
| Observability | Log and metric queries |
| Tickets | Ticket creation and management |
| AI/LLM | AI summaries, investigations, and routing |
| Data | Data transformation and processing |
| Core | Workflow control flow (conditions, loops, sub-workflows, approvals) |
| CI/CD | CI/CD pipeline operations (ArgoCD) |
| Source Control | Source control operations (GitHub) |
| Message Queue | Message queue operations (RabbitMQ) |
| Networking | Network operations |
| Cryptography | Cryptographic operations |
| Events | Event handling operations |
Configuring a Task
- Click a task node on the canvas to open the Action Details sidebar
- In the Parameters tab, fill in the required fields. Form fields are generated automatically based on the task type and include dropdowns, text fields, code editors, JSON editors, and more
- Use the Settings tab for advanced options like conditional execution, timeouts, retry policies, and variables
- Task configuration saves automatically as you type - there is no separate save button for individual task settings

You can reference outputs from earlier tasks in any text field using template expressions. The sidebar shows available outputs from previous tasks on the left, and you can drag them directly into fields.
Connecting Tasks
Connections define the order in which tasks execute.
- Hover over a node's output port (the small circle at the bottom or right of the node) - it highlights when ready
- Click and drag from the output port toward the target node
- Drop on the target node's input port (the small circle at the top or left) to create the connection
- The connection appears as a line between the two nodes
To delete a connection, hover over the edge and click the delete button that appears.
The Workflow Builder prevents circular dependencies. If you try to create a connection that would form a loop, both nodes flash briefly and the connection is rejected.
Configuring Triggers
Click a trigger node on the canvas to open the Trigger Configuration sidebar. Configuration options depend on the trigger type.

Manual Trigger
Runs the workflow when you click Run in the editor or select Manual run from the listing page.
- Input Parameters (JSON) - Optionally define a JSON object with parameters that will be available to tasks at runtime
- Leave the field as
{}if no inputs are needed
Schedule Trigger
Runs the workflow automatically on a recurring schedule.
- Cron Expression (required) - Define the schedule in standard 5-field cron format (minute hour day month weekday)
- Overlap Policy - What happens when a new run is due while the previous run is still active:
- Skip (default) - Skip the new run
- Buffer One - Queue one pending run
- Buffer All - Queue all pending runs
- Allow All - Run all concurrently
- Cancel Other - Cancel the previous run
- Terminate Other - Terminate the previous run
- Catchup Window - How far back to look for missed runs after an outage (default:
60s). Uses Go duration format (e.g.,10m,1h,24h)
All scheduled times use the UTC timezone.

Common cron examples:
| Expression | Schedule |
|---|---|
0 9 * * 1-5 | Every weekday at 9:00 AM |
*/15 * * * * | Every 15 minutes |
0 0 * * 0 | Every Sunday at midnight |
0 12 1 * * | First day of every month at noon |
Webhook Trigger
Runs the workflow when an HTTP request is sent to a generated webhook URL.
- Enter an Integration Name (letters, numbers, dots, hyphens, and underscores only)
- The webhook URL is displayed once the integration is linked - click the copy icon to copy it
- Send HTTP requests to this URL to trigger the workflow
A webhook trigger requires a workflow_webhook integration configured in Settings → Integrations. If you haven't set one up, the sidebar will guide you to create one.
Event Trigger
Runs the workflow when a specific event is detected.
- Event Type / Aggregation Key - Select the event type to listen for from the dropdown
- Filter Expression (optional) - Use template syntax to narrow down which events trigger the workflow, e.g.,
{{ event.source == "my-source" }}
Using Conditions and Branching
You can make tasks run conditionally or branch your workflow using special task types.
Conditional execution on any task:
- Click a task node and open the Settings tab
- In the Conditional Execution (if) field, enter a template expression
- The task is skipped if the expression evaluates to false
Switch (Conditional) node:
- Add a Conditional task from the Core category
- Define a switch variable and case values
- Connect different downstream tasks to each case branch
- Conditional connections appear as colored, thicker lines with a condition label
Using Template Expressions
Template expressions let you use dynamic values in task parameters. They use the {{ }} syntax.
Common patterns:
| Expression | Description |
|---|---|
{{ Task.output.value }} | Reference an output from a previous task |
{{ Configs.key_name }} | Reference a shared configuration value |
{{ variable == "value" }} | Conditional expression for branching or filtering |
{{ event.source == "my-source" }} | Filter expression for event triggers |
Where you can use them:
- Any text or textarea field in task parameters
- Conditional execution fields
- Event filter expressions
- Output parameter definitions
How to insert them:
- Type the expression directly using
{{ }}syntax - Or drag an output field from the Previous tasks outputs panel in the task configuration sidebar
Managing Workflows
Editing a Workflow
- On the workflow listing page, click Edit on the workflow row
- The Workflow Editor opens with the saved nodes and connections
- Modify triggers, add or remove tasks, update connections, or reconfigure settings
- Click the Save icon in the bottom toolbar to save your changes
Changing Workflow Status
From the editor:
- Click the Status dropdown in the bottom Toolbar
- Select the desired status: Active, Inactive, Paused, or Draft
- Save the workflow for the change to take effect
From the listing page (Pause/Resume):
- Click the three-dots menu on a workflow row and select Pause to suspend its triggers
- Click the three-dots menu on a paused workflow and select Resume to reactivate its triggers

Pause and Resume are only available for workflows with Schedule, Webhook, or Event triggers.
Deleting a Workflow
- On the workflow listing page, click the three-dots menu on the workflow row
- Select Delete
- Confirm in the dialog that appears
Deleting a workflow cannot be undone. All execution history for the workflow will be lost.
Filtering and Searching Workflows
The listing page provides several ways to find workflows:
- Search by Workflow Name - Type a name to filter the list
- Search by Tags - Filter by tag labels
- Status dropdown - Filter by Active, Inactive, Paused, or all
- Last Exec. Status dropdown - Filter by last execution result (Running, Completed, Failed, etc.)
- Trigger Type dropdown - Filter by Manual, Schedule, or Webhook triggers
Managing Configurations
Configurations are shared key-value pairs that can be referenced across all workflows using {{ Configs.key_name }}.
- On the workflow listing page, click Configs
- The Configuration Manager opens, showing all existing configs
- Click Add to create a new config with a key, value, type, and labels
- Edit or delete existing configs from the actions column
Running and Monitoring
Running a Workflow Manually
From the editor:
- Click Run in the bottom toolbar
- The workflow is saved automatically, then execution starts
- The Run button shows "Running..." and nodes update with real-time status colors
- A status message appears when execution completes
From the listing page:
- Click the three-dots menu on a workflow row
- Select Manual run
- Review or edit the input parameters JSON in the modal
- Click Trigger Workflow

Using Dry Run
- Click Dry Run in the bottom toolbar
- The workflow is validated without making any real changes
- A result modal shows per-task status and outputs
- Use this to verify your workflow logic before running it for real
Viewing Execution History
- In the editor, click the Executions tab in the header
- The view switches to a three-panel layout:
- Left panel - List of executions with status, time, and duration
- Center panel - Read-only canvas showing nodes colored by their execution status
- Right panel - Detailed information about the selected execution or task
- Click an execution in the left panel to view it
- Click a node on the canvas to see that specific task's input, output, and error details
You can filter executions by status using the dropdown at the top of the execution list.

Understanding Execution Status
| Status | Meaning |
|---|---|
| Running | Execution is currently in progress |
| Completed | All tasks finished successfully |
| Failed | One or more tasks encountered an error |
| Canceled | Execution was manually canceled |
| Terminated | Execution was forcefully terminated |
| Timed Out | Execution exceeded the configured timeout |
| Completed with Errors | Execution finished but some tasks had errors |
Node colors on the execution canvas match these statuses: green for completed, red for failed, blue for running, orange for timed out, and grey for canceled or skipped.
Debugging Failed Executions
- Open the Executions tab and select the failed execution
- Look for nodes colored red (failed) or yellow (completed with errors) on the canvas
- Click the failed node to see its details in the right panel
- Expand the Error section to see the error message
- Expand the Input and Output sections to inspect the data that was passed to and from the task
- Check the Logs section for additional diagnostic information

Retrying an Execution
- In the Executions tab, select the execution you want to retry
- Click the Retry button in the execution list header
- A new execution is created with the same inputs and is automatically selected
Advanced Features
Workflow Settings
Access workflow-level settings by clicking the Settings icon in the bottom toolbar.

Execution Settings:
| Setting | Default | Description |
|---|---|---|
| Timeout | 300 seconds (5 min) | Maximum time the workflow can run before timing out |
| Max Interval | 60 seconds (1 min) | Maximum time between retry attempts |
| Retries | 3 | Number of retry attempts on failure (0–5) |
Quick presets are available for timeout (1m, 5m, 15m, 30m, 1h) and max interval (30s, 1m, 5m, 10m).
Workflow Parameters:
- Input Parameters - Define parameters that users provide when triggering the workflow. Each parameter has an ID, type, description, and optional default value
- Output Parameters - Define output values using template expressions (e.g.,
{"final_message": "Processed {{ Task.output.count }} items"}) - Tags - Add labels to categorize and organize workflows. Tags support plain strings or
key:valueformat

Input Parameter Types
| Type | Description |
|---|---|
| String | Text value |
| Integer | Whole number |
| Boolean | True or false |
| JSON | Arbitrary JSON data |
| Array | Ordered list of items |
Task-Level Advanced Settings
Each task has additional settings available in the Settings tab of the task configuration sidebar:
| Setting | Description |
|---|---|
| Conditional Execution (if) | Template expression - the task is skipped if it evaluates to false |
| Timeout | Task-specific timeout that overrides the workflow default |
| Set State | Persistent JSON state that survives workflow retries |
| Set Variables | Key-value pairs available to subsequent tasks |
| Matrix | Execute the task multiple times with different parameter combinations |
| Hooks | Pre- and post-execution hook configuration |
| Failure Policy | What to do on failure, including retry configuration |

Testing Individual Tasks
You can test a single task without running the entire workflow:
- Run Task - Execute just this task in isolation to verify its configuration
- Dry Run to Task - Run all previous tasks plus this task without making real changes
Results appear inline in the task configuration sidebar with a toggle between JSON and formatted views.
Some task types cannot be tested individually, including Sub-workflow, Conditional, For Each, Call Workflow, AI Router, Manual Approval, Wait, and AI Event Investigate.
Sub-Workflows and Loops
- Sub-workflow (Core → Sub-workflow) - Group multiple tasks into a single collapsible node for better organization
- For Each (Core → For Each) - Loop over a list of items, executing contained tasks for each item
- Call Workflow (Core → Call Workflow) - Invoke another saved workflow as a step in the current one
- Wait (Core → Wait) - Pause execution for a specified duration before continuing
- Manual Approval (Core → Manual Approval) - Pause execution until a user manually approves to continue
AI-Assisted Features
Generate a workflow with AI:
- Click Create Workflow on the listing page
- Choose Ask nubi AI to generate
- Describe what you want in natural language
- Review the AI's plan and approve it, or request changes
- The generated workflow loads in the editor ready for you to review and customize
Edit a workflow with AI Chat:
- In the editor, click the AI Chat icon in the bottom toolbar
- The NuBi AI sidebar opens on the left
- Describe the changes you want conversationally
- The AI modifies the workflow definition based on your instructions
Continue with AI:
- If a workflow was generated by AI, a Continue with AI button appears in the header, allowing you to resume the AI conversation
Task Types Reference
| Task Type | Category | Description |
|---|---|---|
| Execute script | Scripting | Run custom scripts (Bash, JavaScript, Python, and more) |
| HTTP request | Integrations | Make HTTP requests to external services |
| IM notification | Notifications | Send messages via Slack, MS Teams, or Google Chat |
| Create ticket | Tickets | Create tickets in configured ticket management systems |
| Transform data | Data | Transform and process data |
| AWS CLI | Cloud | Execute AWS CLI commands |
| Azure CLI | Cloud | Execute Azure CLI commands |
| GCP CLI | Cloud | Execute Google Cloud CLI commands |
| Kubectl | Cloud / Kubernetes | Execute kubectl commands |
| ArgoCD CLI | CI/CD | Execute ArgoCD CLI operations |
| Query logs | Observability | Query and analyze logs |
| Query metrics | Observability | Query metrics data |
| LLM summary | AI/LLM | Generate AI-powered summaries |
| LLM investigation | AI/LLM | AI-powered investigation and analysis |
| AI Router | AI/LLM | Route decisions using AI |
| AI Event Investigate | AI/LLM | AI investigation of events |
| Sub-workflow | Core | Group of nested tasks |
| Manual Approval | Core | Pause execution until manually approved |
| Conditional | Core | Branch execution based on conditions |
| For Each | Core | Loop over a list of items |
| Call Workflow | Core | Invoke another workflow |
| Wait | Core | Pause execution for a duration |
| RabbitMQ CLI | Message Queue | Execute RabbitMQ operations |
| Redis CLI | Database | Execute Redis operations |
| GitHub CLI | Source Control | Execute GitHub operations |
Trigger Types Reference
| Trigger Type | Description | Key Configuration |
|---|---|---|
| Manual Trigger | Start workflow on demand by clicking Run | Input parameters (JSON, optional) |
| Schedule | Run workflow on a recurring time-based schedule | Cron expression, overlap policy, catchup window |
| Webhook | Run workflow when an HTTP request hits a generated URL | Integration name (requires webhook integration in Settings) |
| Event Trigger | Run workflow when a matching event is detected | Event type, filter expression (optional) |
Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
| "Workflow name is required" when saving | Workflow has no name | Click the pencil icon in the header and enter a name |
| "At least one task is required" when saving | No action nodes on the canvas | Add at least one task using the Add Action button |
| Tasks have validation errors on save | Required fields are missing in task configuration | Click each flagged task and fill in the required parameters |
| "Cannot save: JSON is invalid" | The JSON panel has syntax errors | Switch to the JSON panel, fix the errors, and click Apply |
| "Cannot save: You have unapplied JSON changes" | JSON was edited but not applied | Click Apply in the JSON panel before saving |
| Connection rejected (nodes flash) | The connection would create a circular dependency | Reorganize your workflow so tasks flow in one direction without loops |
| "Integration name is required for webhook triggers" | Webhook trigger has no integration name | Enter an integration name in the trigger configuration |
| "Filter expression has unmatched template braces" | Event filter has malformed template syntax | Ensure your filter uses balanced {{ }} braces |
| "Invalid JSON format" when triggering | Input parameters are not valid JSON | Check your JSON syntax - ensure proper quoting and structure |
| "Duration must be in Go format" | Catchup window uses an invalid format | Use Go duration format like 10m, 1h, or 24h |
| Workflow execution timed out | Execution exceeded the configured timeout | Increase the timeout in Settings or optimize long-running tasks |
| Workflow execution failed | One or more tasks encountered errors | Open the Executions tab, select the execution, and click the failed node to see error details |
| "Failed to load AI-generated workflow" | AI generation encountered an issue | An empty workflow is created instead - try generating again or build manually |
| Config key already exists | Duplicate key in Configuration Manager | Use a unique key name for each configuration |
FAQ
Can a workflow have multiple triggers? Yes. You can add multiple trigger nodes to a single workflow. For example, a workflow can run on a schedule and also be triggered manually.
What happens if I edit a workflow while it's running? Editing and saving a workflow does not affect executions that are already in progress. Your changes apply to the next execution.
Can I use outputs from one task in another task's configuration?
Yes. Use template expressions like {{ Task.output.value }} in any text field. The task configuration sidebar shows available outputs from previous tasks that you can drag into fields.
What is the difference between Run and Dry Run? Run executes the workflow and performs all real actions (sending notifications, running scripts, etc.). Dry Run validates the workflow logic and shows what would happen, without making any actual changes to your systems.
How do I share configuration values across multiple workflows?
Use the Configuration Manager (click Configs on the listing page) to create shared key-value pairs. Reference them in any workflow using {{ Configs.key_name }}.
Can I pause a manually-triggered workflow? Pause and Resume are only available for workflows with Schedule, Webhook, or Event triggers. Manually-triggered workflows can be set to Inactive or Draft status instead.
What does the "Completed with Errors" status mean? The workflow finished running all tasks, but some tasks encountered errors along the way. Check the execution details to see which tasks had issues.