Workflows
Automate actions when events happen in TofuPilot. Send emails, call APIs, create Linear issues, and more — triggered by test runs, units, or schedules.
Overview
A Workflow automates actions when events happen in TofuPilot. Each one follows this flow:
Trigger — an event fires (test run created, schedule, manual).
Action — steps execute in sequence (send email, call API, create issue).
Create a Workflow
Go to Workflows and click New Workflow. This creates a draft workflow and opens the visual editor.
Select a trigger to define what starts the workflow.
Optionally add a control flow node to filter or branch executio.
Chain more actions as needed — see Add Actions for the full list.
Workflows follow a status lifecycle: Draft → Active → Paused → Archived.
Configure Triggers
A trigger defines what starts a workflow. Each workflow has exactly one trigger.
| Trigger | Fires when |
|---|---|
| Run created | A test run is created |
| Unit created | A unit is created |
| Batch created | A batch is created |
| Part created | A part is created |
| Revision created | A revision is created |
| Schedule | Time-based (daily/weekly/monthly), with timezone and day selection |
| Manual | On demand from the editor |
Each trigger type exposes variables from the event (run name, unit serial, part number, etc.) that you can reference in downstream actions.
Rate limits: 100 automatic triggers per minute and 10 manual triggers per minute per organization.
Add Control Flow
Control flow nodes let you add conditional logic to your workflow.
- Filter — single condition gate that stops downstream execution if not met.
- If/Else — two-path branching based on a true/false condition.
- Switch — multi-path branching with up to 20 cases plus a default path.
Conditions support operators like equals, contains, starts with, greater than, regex match, and is null. Combine multiple conditions with AND/OR logic.
Add Actions
Actions are the steps your workflow executes after a trigger fires.
Send Email
Send to up to 50 recipients with variable interpolation in subject and body.
HTTP
HTTP Request
Call external APIs (GET/POST/PUT/PATCH/DELETE) with configurable headers, body, timeout, and retries.
Discord
Send Message
Send a message via webhook URL.
Odoo
Create Record
Create a record in Odoo.
Update Record
Update an existing Odoo record.
Post Message
Post a message on an Odoo record.
Linear
Create Issue
Create an issue with optional assignee, labels, and estimate.
Add Comment
Comment on an existing Linear issue.
Utilities
Delay
Pause execution for 1 second to 1 hour.
Math Operation
Compute a value with add, subtract, multiply, divide, or modulo.
Celebrate
Trigger confetti in the UI.
HTTP Request limits: 30-second timeout, 1 MB max body size, up to 3 retries. Email limit: 50 recipients max.
Use Variables
Variables let you pass data between nodes.
- Trigger variables — fields from the event that started the workflow (e.g., run name, unit serial number, part number).
- Control flow variables — results from conditional nodes: whether a filter condition was met, which branch was taken in an If/Else or Switch.
- Action output variables — results from upstream action nodes (e.g., HTTP response status, created record ID).
Reference any upstream variable using the syntax {{nodeId.fieldKey}}.
Missing variables render as [not set] at execution time.
Use the Editor
Build workflows visually by dragging and connecting nodes on a canvas.
- Click + below any node or use the bottom toolbar to add nodes.
- Click a node to configure it in the right panel.
- Connect nodes by dragging between handles.
- Add notes to annotate your workflow.
- Use Organize actions to auto-layout, and Cmd+Z to undo.
View Execution History
Switch to the Executions tab to see past runs. Click any execution to see its status, runtime, trigger source, and per-node results directly on the flow visualization.
Versioning
Changes are auto-saved and versioned automatically as you edit. While in Draft, click Save as new version to create a named snapshot. Browse and preview past versions from the version badge in the header, and restore any previous version if needed.
How is this guide?