Skip to main content
Every task declares a type that selects the tool it runs. This page covers the core task types; iteration lives on the Loops page.

type: agent

Runs an agent with a prompt.

Agent task consistency runs

You can enable consistency checking on agent tasks by setting consistency_run to a value greater than 1. This runs the agent multiple times with the same prompt and selects the most consistent output:
This is particularly useful for:
  • Critical calculations where consistency is important
  • Data analysis tasks that may have slight variations in output
  • Queries involving complex logic where you want to verify the agent’s reasoning
Consistency prompt configuration:
  • Automation-level: Add consistency_prompt at the root to apply to all agent tasks
  • Task-level: Add consistency_prompt to a specific task to override the Automation prompt
  • Default: If not specified, uses the built-in evaluation prompt optimized for data analysis (view the default prompt source)
Available template variables:
  • {{ submission_1 }} - First output
  • {{ submission_2 }} - Second output
  • {{ task_description }} - The task prompt
Note: Custom prompts completely replace the default. To adapt the default for your domain, copy the source and modify the specific rules you need.

SQL output mode

Set output.mode: sql to use an agent as a SQL generator. The agent stops once it has SQL — skipping the natural-language answer — and the SQL text becomes the task’s result. SQL compiled from the semantic model or matched from a verified query is returned without running it; SQL the agent wrote itself gets a LIMIT 0 check first. Pair it with cache to save the SQL to a file and an execute_sql task to run it:
Automations that the agent would otherwise delegate to can’t be used in SQL mode.

type: execute_sql

Executes a SQL query either referenced by filename or provided inline. You can use either sql_file to reference a SQL file, or sql_query to provide the SQL inline. Note: These options are mutually exclusive—only one should be used at a time. Specifying both in a single task is not allowed.

type: formatter

Formats the provided template using the outputs of other tasks, then passes the rendered template as output.

type: workflow

Runs another Automation as a sub-step. Use this to break up complex Automations into smaller, easily testable chunks. The variables key allows parameterization by overriding the sub-Automation’s Automation-level variables. This is particularly useful when embedding an Automation task into a loop:

type: semantic_query

Runs a query against your semantic model — measures, dimensions, filters, and ordering by name, with the SQL compiled for you. See Using the Semantic Model for every property.
Looker and Omni integrations add looker_query and omni_query task types — see Looker.

type: conditional

Runs a different set of tasks depending on earlier results. Each branch’s if is a Jinja expression (without the surrounding braces) evaluated against the outputs of previous tasks; the first truthy branch runs. An expression that renders empty, false, 0, or none is falsy.

type: http_request

Makes an outbound HTTP request — for example, to post results to another system’s API. url, headers, body, and form values are Jinja templates rendered against earlier task outputs, and {{ secrets.NAME }} resolves any project secret listed in secrets. Requests to private, loopback, and link-local addresses are always blocked.

type: airway

Runs an Airway ELT pipeline (.airway.yml) as a step. The step completes only once the pipeline’s load has committed, so a following execute_sql task reads fully loaded tables.

Common task options

Any task can also take:

Caching a task’s output

cache is useful for LLM-generated artifacts you want to review and pin — for example, SQL from an agent in SQL output mode. After the first run, edits you make to the cached file are used on every later run.
The visualize task type has been retired. Automations that still use it fail with an “unknown task type” error — use an agent task instead.

Next steps

Loops

Iterate over values with loop_sequential

Variables

Parameterize tasks with typed inputs