Automation Runtime for Intelligent Actions.
Build AI-powered workflows with ARIA.
Your workflows are source-controlled, CI-friendly, and live in YAML files. Define them, run them locally, and inspect every result from saved run artifacts.
- Source-controlled workflows: prompts, steps, inputs, and providers live in YAML.
- Full step transparency: see every intermediate result, not just the final answer.
- Extensible runtime: add your own extension when a built-in step is not enough.
- Provider flexibility: OpenAI and local Ollama today, with more providers to come.
- Small runtime: no hosted service, web UI, marketplace, or agent framework.
With the install script:
curl -fsSL https://raw.githubusercontent.com/thrapai/aria/master/install.sh | bashWith optional docling support:
curl -fsSL https://raw.githubusercontent.com/thrapai/aria/master/install.sh | ARIA_PACKAGE='thrapai-aria[docling]' bashWith pipx:
pipx install thrapai-ariaFor docling support:
pipx install "thrapai-aria[docling]"Create a workflow:
aria initRun it:
ollama pull gemma3:4b
aria run workflow.yml --input path=notes.txtARIA prints final outputs as JSON and writes run artifacts under .aria/runs/<timestamp>/.
Check the installed version:
aria versionSee upgrade commands:
aria update --method pipxversion: "1"
name: summarize_file
providers:
ollama:
type: ollama
base_url: http://localhost:11434
inputs:
path:
type: file
required: true
steps:
- id: read
uses: file.read
with:
path: "{{ inputs.path }}"
- id: summarize
uses: ai.generate
with:
model: ollama:gemma3:4b
prompt: |
Summarize this file in five concise bullet points:
{{ steps.read.output.content }}
- id: save
uses: file.write
with:
path: summary.txt
content: "{{ steps.summarize.output.text }}"
outputs:
summary: "{{ steps.summarize.output.text }}"
summary_file: "{{ steps.save.output.path }}"Templates can read workflow inputs and previous step outputs:
{{ inputs.path }}
{{ steps.read.output.content }}ai.generatefile.readfile.writeutils.json.parseutils.text.chunkdocling.convert- optional
Extension examples live in docs/extensions/.
ARIA currently supports openai and ollama provider types. A provider entry is an
alias that can be used in ai.generate model strings as provider:model.
export OPENAI_API_KEY="..."providers:
openai:
type: openai
api_key_env: OPENAI_API_KEY
# Optional:
# api_key_file: .openai-key
# base_url: https://api.openai.com/v1If no providers.openai entry is configured, openai:<model> still works and
reads OPENAI_API_KEY from the environment.
ollama pull gemma3:4bproviders:
ollama:
type: ollama
base_url: http://localhost:11434If no providers.ollama entry is configured, ollama:<model> still works and
uses http://localhost:11434.
Provider names may be custom aliases when the entry declares a supported type:
providers:
local:
type: ollama
base_url: http://localhost:11434
steps:
- id: summarize
uses: ai.generate
with:
model: local:gemma3:4b
prompt: "Summarize: {{ inputs.text }}"Use providers as provider:model, for example openai:gpt-4.1-mini,
ollama:gemma3:4b, or local:gemma3:4b.
uv sync --extra dev
uv run --extra dev python -m pytest
uv run --extra dev ruff check
uv run --extra dev ruff format --checkSee CONTRIBUTING.md for contribution and release notes.
MIT
