Automations

Build event-driven, no-code workflows with a visual node-graph editor: triggers, actions, conditions, data transforms, and schedulers.

Overview

The Automation Engine lets you automate repetitive work without writing code. You build automations as a visual graph of connected nodes: a trigger fires when something happens, data flows through transform and condition nodes, and action nodes make changes back in Pomavo.

Every automation is scoped to your organization and, optionally, to a single project. Automations run asynchronously in the background, so they never slow down the action that triggered them.

Automations are built in the visual editor under Automations in the sidebar. Each automation has a name, an enabled/disabled toggle, an optional project scope, and a graph.

Automations are built by connecting nodes in the visual editor.

How It Works

A trigger fires

Something happens in Pomavo, a ticket is created, a field changes, a comment is added, a sprint starts. The matching trigger node starts a run.

Data flows downstream

The trigger emits typed outputs, for example the ticket and the comment. Edges carry those values into the inputs of downstream nodes.

Conditions gate the path

Condition and logic nodes decide which branches continue. A branch whose condition is false is skipped, along with everything downstream of it.

Actions make changes

Action nodes transition tickets, add comments, change fields, move tickets between sprints, create or clone tickets, and more.

The Node Graph

Nodes are organized into categories in the left-hand palette. You can also search for a node by name and drop it onto the canvas.

The Type System

Every node port has a type. The editor validates connections as you draw them, so you can only connect compatible ports. Types include:

  • Primitives: string, number, boolean, date
  • Objects: ticket, user, state, transition, iteration, project, link, comment, tag
  • Generics: list<T> for collections, and type variables (T) for nodes that work with any type

When a node outputs an object, such as a ticket, it carries the full object rather than just an ID, so downstream nodes can read any of its properties.

Some nodes have dynamic ports whose outputs depend on their input. The classic example is Extract Properties: connect a ticket and it offers title, state, fields, and so on; connect a link and it offers the link's properties instead. The editor resolves these ports live as you wire the graph.

Merged Input + Config

Many nodes accept a value either from a wired input or from an inline config control. When the input is not connected, the config control appears inline so you can type a constant value. As soon as you wire the input, the control hides and the wired value is used. This keeps simple automations compact while still allowing fully dynamic graphs.

Conditions and Branching

Condition nodes evaluate to true or false. The If/Else node routes its value to either a true or a false output; only the active branch continues. Logical nodes - AND, OR, NOT, and Is Null - combine boolean signals. The DSL Condition node evaluates a search-query expression against a ticket, and DSL Query returns every ticket matching a query, perfect for fan-out.

Loops: ForEach and Collect

To act on many items, use the list nodes:

  • ForEach: iterates over a list<T> and runs everything downstream once per item. Iterations run in parallel for throughput.
  • Collect: gathers a value from each iteration back into a single ordered list<T>.
  • Length: returns the number of items in a list.

A common pattern: DSL Query for all tickets in the active sprint → ForEachAdd Comment posts a comment on every matching ticket.

Rate Limits

Automation runs are governed by your organization's quota tier. Each run counts toward the automation_runs metric. If you exhaust your tier's limit within the rolling window, further runs are skipped until the window resets.

Next Steps