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.
read_data
Section titled “read_data”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 DESCFor 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.
ai_task
Section titled “ai_task”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, setsystem_promptunderconfig.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_TOKENadded. For example,JirabecomesJIRA_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.
coding_task
Section titled “coding_task”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.
send_teams_card
Section titled “send_teams_card”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"send_message
Section titled “send_message”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.transform
Section titled “transform”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: issueKeyWithout 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}}"Pass data between steps
Section titled “Pass data between steps”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.
Model settings
Section titled “Model settings”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.