Skip to content

Steps

Steps are the work a workflow does. They run in the order you write them. This page shows each step type with a small example.

Step type What it does
read_data Reads work items from Jira or Azure DevOps.
ai_task Runs an AI agent with a prompt. No repository is checked out.
coding_task Runs an AI agent inside a cloned repository. The agent commits and opens a pull request.
send_teams_card Posts a card to a Microsoft Teams channel.
send_message Sends a message to a Microsoft Teams chat.
transform Picks one value out of a JSON output.
echo Returns its own settings. Useful for testing.

Every step needs a name and a type. Most steps also have a config block for their settings.

Reads items and returns them as a list. It needs a connection.

- name: fetch-stories
type: read_data
provider: jira
connection: Jira
config:
query: project = DEMO AND status = "To Do" ORDER BY priority DESC

For Jira, query is JQL. For Azure DevOps, query is WIQL, and organization and project are also required:

- name: fetch-work-items
type: read_data
provider: azure_devops
connection: Azure DevOps
config:
organization: your-org
project: your-project
query: SELECT [System.Id] FROM WorkItems WHERE [System.State] = 'New'

When more steps follow, each item in the list gets its own child run. See Fan-out.

Runs an AI agent. config.prompt is required.

- name: summarize
type: ai_task
config:
prompt: |
Summarize this ticket in three bullet points:
{{steps.fetch-stories.output}}

Two things to know:

  • Tools are off by default. Without a system_prompt, the agent is told to answer with text only and not to run commands. If the step must call an API or write files, set system_prompt under config.llm_config.
  • Connections become tokens. List connection names under connections. The agent receives one access token for each. The token name is the connection name in capitals, with _ACCESS_TOKEN added. For example, Jira becomes JIRA_ACCESS_TOKEN.
- name: comment-on-ticket
type: ai_task
connections: [Jira]
config:
llm_config:
system_prompt: |
Use your tools. Call the Jira REST API with curl and post the comment yourself.
prompt: |
Post a one-line comment on this ticket: {{steps.fetch-stories.output}}
Use the token in JIRA_ACCESS_TOKEN. Never print the token.

An ai_task cannot have a repos setting. Use coding_task for work in a repository.

To ask a person a question from this step, see Teams cards.

Runs an AI agent in a cloned repository. It needs config.prompt, config.repos, and one connection to GitHub or Azure DevOps.

- name: fix-typo
type: coding_task
connection: GitHub
config:
repos:
- https://github.com/your-org/your-repo
prompt: |
Fix the spelling mistakes in README.md.

After the agent finishes the change, it commits, pushes a branch named anthara/<short-name>, and opens a draft pull request.

Commits are made under the workflow’s slug. For example, the slug ci-fix commits as Anthara CI-FIX.

Posts a card to a Teams channel. All three settings are required.

- name: announce
type: send_teams_card
config:
title: Nightly check finished
message: The nightly check finished with no findings.
teams_channel_id: "19:replace-with-your-channel-id@thread.v2"

Sends a message to a Teams chat through a Microsoft Teams connection. The message is sent as the person who owns the connection.

- name: notify-chat
type: send_message
provider: microsoft_teams
connection: Microsoft Teams
config:
chatId: "19:replace-with-your-chat-id@thread.v2"
message: The workflow finished.

Picks one value out of a JSON output. input is the JSON text. path is the field to pick.

- name: pick-key
type: transform
config:
input: "{{steps.summarize.output}}"
path: issueKey

Without path, the step returns the whole input.

Returns its own config. Use it to check a template without starting an agent.

- name: show-input
type: echo
config:
message: "Ticket is {{inputs.ticketKey}}"

Use {{ }} inside any text in a step’s config.

Template Gives you
{{inputs.ticketKey}} The trigger input named ticketKey.
{{steps.fetch-stories.output}} The full output of the step named fetch-stories.
{{steps.summarize.output.issueKey}} One field of a JSON output.
{{steps.summarize.output.items[0].id}} One field of a list item in a JSON output.

Templates are filled in when the step runs. If a template names an input, a step, or a field that does not exist, the step fails.

An ai_task output is stored as JSON. If the agent’s answer is not JSON, Anthara wraps it as {"output": "<the answer>"}. To read fields from a later step, ask the agent to end with a single JSON object.

llm_config sets limits for the AI agent. Put it at the top level to cover every agent step. Put it under a step’s config to change it for that step only.

llm_config:
max_turns: 40
max_budget_usd: 5
Key Meaning If you leave it out
model The model the agent uses. claude-sonnet-4-6
max_turns The most turns the agent may take. A whole number above zero. 300
max_budget_usd The most the step may spend, in US dollars. A number above zero. 50
effort How much reasoning effort to use, such as low, medium, or high. The model’s default
system_prompt Standing instructions for the agent. See ai_task above

Any other key is rejected when you save the workflow. This protects you from a misspelled limit that would otherwise be ignored.

If your organization routes workflows through the LLM Proxy, model must name a model that an admin registered. See Models.