Creation Methods
You can create workflows five ways:Workflow Agent
Describe the workflow you want in plain English. The Workflow Agent interprets your intent, selects the right triggers and actions, wires up template variables, and generates a complete workflow on the canvas.1
Open the workflow builder
Navigate to Workflows → All Workflows in the Kestrel dashboard and click Create Workflow.
2
Describe your workflow
Type a natural language description of what you want automated. Be specific about the trigger, the actions, and where results should go.
3
Review and adjust
The Workflow Agent generates the workflow on the canvas. Review each step and iterate the prompt to adjust configuration, add, or remove steps as needed.
4
Save and enable
Click Save to activate the workflow. It will begin responding to its configured trigger immediately.
- “When a K8s incident is detected, run root cause analysis, send the RCA to #incidents in Slack, and create a Jira ticket with the details.”
- “When someone requests a new service in Slack, generate the K8s manifests, open a GitOps PR in GitHub, and sync with ArgoCD.”
- “When a Vercel deployment fails, pull the build logs, run an AI investigation, and notify the team in Slack.”
- “When a Railway service crashes, fetch the logs, investigate the root cause, roll back to the previous deployment, and alert #platform in Slack.”
- “When AWS costs spike, run a cost anomaly analysis and post a report to #finops in Slack.”
Drag-and-Drop Canvas
The visual canvas gives you full control over workflow construction. Add triggers and actions from the sidebar, connect them into a pipeline, and configure each step individually.Adding a Trigger
Every workflow starts with a trigger. Drag a trigger block from the sidebar onto the canvas and configure it:- Select the trigger type (e.g., Pod CrashLoopBackOff, IAM Security Event, Slack Request)
- Configure trigger-specific settings (clusters, namespaces, AWS accounts, severity thresholds)
- The trigger’s output variables become available to all downstream steps
Adding Actions
Drag action blocks onto the canvas and connect them to the trigger or to previous actions:- Select the action type (e.g., Kestrel RCA, Slack Message, GitHub PR)
- Configure action parameters — use the variable picker to reference data from previous steps
- Connect the action’s output port to the next step’s input port
Connecting Steps
Click an output port and drag to an input port to create a connection. Data flows top-to-bottom through the connections you define.Trigger Types
Kubernetes Signals
Triggered when Kestrel detects a K8s incident in a connected cluster. Configure filters by cluster, namespace, or incident type.AWS Cloud Signals
Triggered when Kestrel detects a cloud infrastructure incident. Filter by AWS account, region, or incident type.Schedule
Triggered on a recurring cadence rather than by an external event. Ideal for periodic cost reports, cleanup scans, and audits. Configure the interval (hourly, daily, weekly, or monthly), the time of day (UTC), and — for weekly/monthly schedules — the day of week or day of month.
Scheduled triggers expose
{{signal.schedule_interval}}, {{signal.fired_at}}, and {{signal.fired_date}} to downstream steps.
Slack Requests
Triggered when a user sends a/kestrel-workflow command in Slack. The user’s message is available as {{request.prompt}}.
PagerDuty
Triggered when a PagerDuty incident is created or updated. Filter by service, urgency, or severity.PostHog
Triggered by PostHog product analytics events. Filter by event type and properties.Vercel
Triggered by Vercel deployment and platform events. Filter by project and event type.Railway
Triggered by Railway deployment and platform events. Filter by project, environment, and event type.Fly.io
Triggered by Fly.io machine lifecycle changes. Fly.io has no outbound webhooks, so Kestrel detects these events by polling the Fly Machines API and diffing machine state on a configurable interval. Filter by app, region, and event type, and set the poll cadence (1m / 5m / 15m / 30m).Nebius AI Cloud
Triggered by Nebius GPU/compute and Managed Kubernetes node changes. Nebius has no outbound webhooks, so Kestrel detects these events by polling the Nebius compute and Managed Kubernetes APIs and diffing instance state and node conditions on a configurable interval. Filter by project, cluster, and event type, and set the poll cadence (1m / 5m / 15m / 30m).Jenkins
Triggered by Jenkins build lifecycle events, delivered by a webhook notification plugin (or a post-build curl step) authenticated with a per-tenant shared secret. Filter by job name (full path for folder-nested jobs) and build status.CircleCI
Triggered by CircleCI’s native outbound webhooks (workflow-completed / job-completed), signed with HMAC-SHA256 and verified by Kestrel. Filter by project slug, branch, and status.Terraform Cloud
Triggered by Terraform Cloud (HCP Terraform) run lifecycle and drift events, delivered by per-workspace notification configurations (webhooks) signed with HMAC-SHA512 and verified by Kestrel. Filter by workspace, event type, and run status.Pulumi Cloud
Triggered by Pulumi Cloud stack, update, deployment, drift, and policy events, delivered by organization or stack webhooks signed with HMAC-SHA256 (Pulumi-Webhook-Signature) and verified by Kestrel. Filter by stack (project/stack reference), project, and event type.
Custom Webhook
Triggered by an HTTP POST to a unique webhook URL. Accepts any JSON payload with optional HMAC signature verification. See Custom Integrations for details.Action Types
Actions are grouped by integration. Each action produces output variables that downstream steps can reference.Kestrel
Trigger K8s RCA & Generate Fix, Apply YAML Fix, Find Causal PRs/MRs, Trigger Cloud RCA & Generate Fix, Generate Runbook, Wait, Generate K8s Manifest, Apply K8s Manifest, Create GitOps PR, Generate Helm Values, Generate Cloud Resource, Execute Cloud CLI, Create IaC PR, Investigate Cloud, Investigate Kubernetes, AI Cost Analysis
GitHub
Create Pull Request, Create Issue, Trigger GitHub Action, Wait for GitHub Action Run, Get GitHub Action Status, Read File, Search Code, AI Code Investigation, AI Code Fix, Wait for PR Approval, Wait for PR Merge
GitLab
Create Merge Request, Create Issue, Trigger Pipeline, Wait for Pipeline, Get Pipeline Status, Wait for MR Approval, Wait for MR Merge
Slack
Send Message, Update Message, Request Justification
Confluence
Publish RCA, Publish Postmortem, Publish Runbook Entry, Update Page
Jira
Create Ticket, Add Comment, Transition Ticket
Linear
Create Issue, Add Comment, Update Issue, Search Issues
PagerDuty
Create Alert, Acknowledge Alert, Add Note to Alert, Resolve Alert, Escalate
ArgoCD
Trigger ArgoCD Sync, Wait for ArgoCD Sync, Get ArgoCD App Status
Jenkins
Trigger Build, Wait for Build, Get Build Status, Stop Build, Get Console Log, Investigate Jenkins
CircleCI
Trigger Pipeline, Wait for Pipeline, Get Workflow Status, Rerun Workflow, Cancel Workflow, Approve On-Hold Job, Get Job Test Results, Investigate CircleCI
Datadog
Query Metrics, Create Monitor, Send Event, Mute Monitor
Cloud Cost
Query Cost Explorer, Get Cost Anomalies, Get Cost Forecast, Get Budget Status, Get Rightsizing Recommendations, Get Savings Plans Recommendations, Get Reservation Recommendations, Get Commitment Utilization, Compare Cost Periods, Find Idle Resources, Get Compute Optimizer Recommendations, Get Trusted Advisor Cost Checks, Stop EC2 Instances, Delete Unattached EBS Volumes, Release Elastic IPs, Delete Old Snapshots
PostHog
Get Session Summary, Get Session Recording, Query Events, List Session Recordings, Get Error Issue
Vercel
Get Deployment, Get Build Logs, Rollback Production, Promote to Production, List Deployments, Investigate Vercel
Railway
Get Deployment, Get Deployment Logs, Rollback, Redeploy, Restart, List Deployments, Set Variables, Investigate Railway
Fly.io
Restart Machine, Start Machine, Stop Machine, Suspend Machine, Cordon Machine, Uncordon Machine, Get Machine, Get Machine Events, List Machines, Set Secrets, Investigate Fly
Nebius AI Cloud
Get Instance, Start Instance, Stop Instance, Restart Instance, List Instances, List Clusters, List Node Groups, Scale Node Group, Investigate Nebius
Terraform Cloud
List/Get Workspace, Lock/Unlock/Force-Unlock Workspace, List/Get Run, Create Run (Plan), Create Destroy Run, Apply Run, Discard Run, Cancel Run, Wait for Run, Get State Outputs, List Variables, Set Variable, Get Drift Assessment, Investigate Terraform
Pulumi Cloud
List/Get Stack, List/Get Update, Run Deployment, Get/Wait for/Cancel Deployment, Pause/Resume Deployments, Get Stack Outputs, Get Drift Status, Set/Delete Stack Tag, Investigate Pulumi
Approval Gates
Wait for Manual Approval, Wait for Slack Approval, Wait for PR/MR Approval, Refine RCA with Feedback
Custom HTTP & Webhooks
Create custom action blocks to call any API endpoint, and custom webhook triggers to start workflows from external systems. See Custom Integrations.
Template Variables
Template variables let you pass data between workflow steps. Use double curly braces to reference outputs from triggers and previous actions.Variable Syntax
Common Variables
Variable Picker
When configuring an action step, click the Variables button on any text field to open the variable picker. It shows all available variables from the trigger and preceding steps, grouped by source. The picker is DAG-aware — it only shows variables that will be available at runtime based on the step’s position in the workflow.Cooldown Configuration
Cooldowns prevent a workflow from firing repeatedly for the same event. Configure the cooldown period per workflow.Cooldowns are scoped to the specific trigger event. For K8s incidents, the cooldown applies per workload. For Slack requests, it applies per request.
Approval Gates
Insert approval gates between steps to require human sign-off before the workflow continues. Three approval methods are available:Wait for Manual Approval
The workflow pauses and shows a pending approval in the Kestrel dashboard. An authorized user clicks Approve or Reject.Wait for Slack Approval
The workflow posts an approval request to a configured Slack channel with Approve and Reject buttons. Any member of the channel can respond.Wait for PR/MR Approval
The workflow waits for the associated pull request or merge request to be approved or merged (webhook-driven). Merging the PR approves the step; closing it rejects it.Refine RCA with Feedback (human-in-the-loop)
A self-looping review gate for incident-response workflows. Place it after a Trigger K8s RCA or Trigger Cloud RCA step. It presents the root cause and proposed fix for review with three outcomes:- Approve — continues on the approved branch (e.g. apply the fix, publish the runbook).
- Reject — continues on the rejected branch.
- Request changes — you provide free-text guidance (“the real cause is the readiness probe timeout, not the image tag”), and the RCA agent re-runs with your feedback and comes back for review again. Feedback accumulates across rounds, so each pass builds on the last.
Poll Until (Loops)
The Poll Until block (Flow Control) repeatedly runs a single catalog action at a fixed interval and evaluates an exit condition against each iteration’s output. It’s the building block for “wait for X to reach state Y” automation — waiting for a sandbox to stop, a deployment to become healthy, a pipeline to finish, or a cloud resource to reach a target state. Drag Poll Until from the sidebar (next to Conditions) onto the canvas, then configure:- Action to Poll — any catalog action (searchable dropdown). Its config fields appear below and behave exactly like the standalone action block, including dynamic dropdowns (e.g. Cluster → Namespace scoping) and template variables.
- Output Field Path — which output field of the polled action to test, chosen from the action’s known outputs.
- Operator + Value —
equals,not_equals,contains,not_contains,exists,not_exists. Where the output has known discrete values (states, statuses) or refers to live resources (cluster IDs), the Value field is a dropdown. You can select multiple values:equals/containsare met when the output matches ANY selected value;not_equals/not_containsare met only when it matches NONE. - Poll Interval — how often to re-run the action (default 60s, minimum 30s).
- Timeout — how long to keep polling (default 60 minutes).
- met — the exit condition held on some iteration; downstream steps see the final iteration’s output.
- timeout — the timeout elapsed before the condition was met.
Polling is durable. The loop’s schedule is persisted server-side, so a server restart mid-interval resumes the countdown where it left off instead of restarting the interval — and in-flight loops survive redeployments.
For Each (Fan-Out)
The For Each block (Flow Control) resolves a list from an upstream step’s output at runtime and runs a single catalog action once per element, in order. It’s the building block for “do X for every Y” automation — creating a Jira ticket for each new audit finding, sending a message per failed service, or opening an issue for every flagged resource — without knowing the number of items in advance. Drag For Each from the sidebar (Flow Control) onto the canvas, then configure:- Items to Iterate Over — a template that resolves to a list, e.g.
{{step_outputs.action-1.outputs.new_findings}}from an Execute Script step that wrote an array to its outputs. JSON-encoded array strings and comma-separated strings also work. - Action per Item — any catalog action (searchable dropdown). Its config fields appear below and behave exactly like the standalone action block. Inside these fields, three extra template variables are available:
{{item}}— the current element (rendered as JSON when it’s an object){{item.<field>}}— a field of the current element, e.g.{{item.title}}{{item_index}}— the zero-based index of the current element
- Max Items — caps the fan-out (default 25, hard cap 100). Extra items are skipped and the aggregated output is marked
truncated. - Continue on Error — when enabled, a failed item doesn’t fail the whole block; remaining items still run.
items_total, items_processed, succeeded, failed, per-item results, and a flat summary string usable in downstream templates. Its outgoing edges fire after all items have been processed.
For Each runs items once each, immediately and sequentially. To repeatedly re-run an action until a condition holds, use Poll Until instead.
Generating Runbooks
The Generate Runbook action (Kestrel) distills a completed RCA and its fixes into a reusable, generalized runbook for that class of incident — symptom, diagnosis steps, remediation steps, verification, and rollback. It requires an upstream RCA step. The generated runbook is available to downstream steps as{{runbook_html}} / {{runbook_markdown}}, and Publish Runbook Entry (Confluence) consumes runbook_html automatically.
Testing Workflows
Before relying on a workflow in production, test it with a simulated trigger:- Open the workflow on the canvas
- Click Test Workflow
- Kestrel generates a sample trigger payload based on the trigger type
- Click Run Test to execute the workflow with the sample data
- Inspect the output of each step in the execution detail view
Example Workflows
K8s Incident → RCA → Slack → Jira
Workflow Agent prompt: “When a Kubernetes incident is detected in any cluster, run root cause analysis, send the root cause and recommended fix to #incidents in Slack, and create a Jira ticket in the INFRA project with the full investigation summary.”K8s Incident → RCA → Refine with Feedback → Apply → Publish Runbook
A full human-in-the-loop loop: detect the incident, run RCA, draft a reusable runbook, let an engineer iteratively refine the analysis, then apply the fix and publish the runbook. Workflow Agent prompt: “When a Kubernetes pod crashes, run root cause analysis, generate a runbook, then let me review and refine the analysis before applying — when I approve, apply the YAML fix and publish the runbook to Confluence; if I reject, notify #incidents.”
On Request changes, the reviewer’s free-text guidance re-runs the RCA agent and the gate re-opens — repeating until approve/reject or the round cap.
Slack Request → K8s Manifest → GitOps PR → ArgoCD Sync
Workflow Agent prompt: “When someone requests a new Kubernetes resource via /kestrel-workflow in Slack, generate the K8s manifests based on their request, create a pull request in acme/k8s-manifests on GitHub, wait for the PR to be merged, then trigger an ArgoCD sync.”Vercel Deployment Failure → Build Logs → Investigation → Slack
Workflow Agent prompt: “When a Vercel deployment fails, fetch the build logs, run an AI investigation to identify the root cause of the build failure, and send the findings to #deploys in Slack.”Railway Deployment Crash → Logs → Investigation → Rollback → Slack
Workflow Agent prompt: “When a Railway service crashes, fetch the deployment logs, run an AI investigation to find the root cause, roll the service back to its previous deployment, and post a summary to #platform in Slack.”Fly.io Machine Crash → Events → Investigation → Restart → Slack
Workflow Agent prompt: “When a Fly.io machine crashes, pull its recent events, run an AI investigation to find the root cause, restart the machine, and post a summary to #platform in Slack.”Nebius GPU Error → Investigation → Scale Node Group → Slack
Workflow Agent prompt: “When a Nebius GPU node reports an error, run an AI investigation to find the root cause, add a node to the affected node group, and post a summary to #ml-infra in Slack.”Jenkins Build Failure → Console Log → Investigation → Slack + Jira
Workflow Agent prompt: “When a Jenkins build fails, fetch the console log, run an AI investigation to identify the root cause of the failure, post the findings to #ci in Slack, and create a Jira ticket in the INFRA project.”CircleCI Workflow Failure → Rerun From Failed → Wait → PagerDuty
Workflow Agent prompt: “When a CircleCI workflow fails on main, rerun only the failed jobs, wait for the pipeline to finish, and page on-call via PagerDuty with an AI investigation summary if the rerun also fails.”PostHog Exception → Investigation → Slack
Workflow Agent prompt: “When PostHog captures a frontend exception, generate an AI summary of the user’s session including what they were doing before the error, and send the summary with the replay URL to #product-alerts in Slack.”Terraform Run Needs Attention → Plan Summary → Slack Approval → Apply
Workflow Agent prompt: “When a Terraform Cloud run on a production workspace finishes planning and needs confirmation, fetch the planned changes, ask for approval in #infra-approvals, and apply the run if approved or discard it if rejected.”Pulumi Update Failure → Investigation → Slack Approval → Retry
Workflow Agent prompt: “When a Pulumi Cloud update fails on a production stack, investigate the failure, post the findings to #infra-approvals in Slack and ask for approval, then retry the update if approved.”Cloud Cost Anomaly → AI Analysis → Slack Report
Workflow Agent prompt: “When an AWS cost anomaly is detected, query the cost breakdown for the affected account over the last 7 days, run an AI cost analysis to identify the root cause and recommend optimizations, and post the analysis to #finops in Slack.”Weekly Schedule → Cost Report → Savings Recommendations → Slack
Workflow Agent prompt: “Every Monday at 9am UTC, query last week’s AWS costs grouped by service, get savings plans recommendations, run an AI cost analysis, and post an executive summary to #finops in Slack.”Idle Resource Scan → Approval → Cleanup → Slack
Workflow Agent prompt: “Every day at 8am UTC, scan for idle resources (unattached EBS volumes and unassociated Elastic IPs), ask for approval in #finops, and if approved delete the unattached volumes (snapshot first) and release the idle Elastic IPs.”Forecast Overrun → Compare Periods → Rightsizing → Slack
Workflow Agent prompt: “When the AWS cost forecast projects a budget overrun, compare this month’s spend to last month to find the biggest movers, get rightsizing recommendations, and post the analysis to #finops in Slack.”Next Steps
- Custom Integrations — Build custom HTTP action blocks and webhook triggers for services not covered by built-in integrations
- Workflow Integrations Setup — Connect the integrations your workflows need
- Workflow Observability — Monitor execution metrics and debug failed runs