# glaborie/aria architecture

> Architecture diagram of the GitHub repository glaborie/aria, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/glaborie/aria
- Repository: https://github.com/glaborie/aria

## Overview

ARIA is an autonomous research assistant: a user submits a query, the API starts a run, and an orchestrator plans and schedules agent tasks before returning a report. The sampled code supports the API/orchestration flow, researcher capabilities, Redis messaging, and Qdrant retrieval; paths for several other product subsystems are supported by the tree, but their internal wiring was not sampled. The OpenWebUI pipeline submits runs and polls for results. End-to-end task details and some integrations are therefore intentionally left out.

Main entry points: [`agents/orchestrator.py`](https://github.com/glaborie/aria/blob/master/agents/orchestrator.py) (Task orchestrator), [`api/routes.py`](https://github.com/glaborie/aria/blob/master/api/routes.py) (Run and status routes), [`agents/researcher.py`](https://github.com/glaborie/aria/blob/master/agents/researcher.py) (Researcher agent), [`pipelines/aria_pipeline.py`](https://github.com/glaborie/aria/blob/master/pipelines/aria_pipeline.py) (WebUI pipeline)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and sessions"]
  node_pipeline["WebUI pipeline<br/>[aria_pipeline.py]"]
  node_api_app["FastAPI app<br/>[main.py]"]
  node_routes["Run and status routes<br/>[routes.py]"]
  node_run_store["Run session store<br/>[session_store.py]"]
end

subgraph group_coordination["Agent coordination"]
  node_orchestrator["Task orchestrator<br/>[orchestrator.py]"]
  node_task_dag["Task DAG<br/>[task_dag.py]"]
  node_skill_registry["Skill registry<br/>[registry.py]"]
  node_redis_broker["Redis message broker<br/>[broker.py]"]
  node_message_types["Agent messages<br/>[messages.py]"]
end

subgraph group_research["Research and memory"]
  node_researcher["Researcher agent<br/>[researcher.py]"]
  node_research_skills["Research skills"]
  node_web_search["Web search<br/>[search.py]"]
  node_rag["RAG retrieval<br/>[rag.py]"]
  node_qdrant[("Qdrant vector store")]
  node_longterm["Long-term memory<br/>[longterm.py]"]
end

subgraph group_reporting["Analysis and reporting"]
  node_analyst["Analyst agent<br/>[analyst.py]"]
  node_writer["Writer agent<br/>[writer.py]"]
  node_structured_output["Structured output"]
end

subgraph group_controls["Safety and telemetry"]
  node_guardrails["Guardrails"]
  node_tracing["Tracing<br/>[tracing.py]"]
end

node_user(("Research user"))
node_openwebui(("OpenWebUI"))
node_tavily["Tavily"]

node_user -->|"submits query"| node_routes
node_routes -->|"creates run"| node_run_store
node_routes -->|"starts run"| node_orchestrator
node_orchestrator -->|"plans tasks"| node_task_dag
node_orchestrator -->|"runs tasks"| node_researcher
node_orchestrator -->|"runs tasks"| node_analyst
node_orchestrator -->|"runs tasks"| node_writer
node_orchestrator -->|"reads skills"| node_skill_registry
node_api_app -->|"initializes"| node_orchestrator
node_api_app -->|"connects"| node_redis_broker
node_researcher -->|"registers skills"| node_research_skills
node_researcher -->|"searches web"| node_web_search
node_web_search -->|"queries"| node_tavily
node_researcher -->|"retrieves passages"| node_rag
node_rag -->|"queries vectors"| node_qdrant
node_researcher -->|"recalls and stores"| node_longterm
node_orchestrator -->|"unmasks report PII"| node_guardrails
node_routes -->|"updates status and result"| node_run_store
node_routes -->|"returns run status"| node_user
node_openwebui -->|"sends message"| node_pipeline
node_pipeline -->|"submits and polls"| node_routes
node_routes -->|"returns result"| node_pipeline

click node_pipeline "https://github.com/glaborie/aria/blob/master/pipelines/aria_pipeline.py"
click node_api_app "https://github.com/glaborie/aria/blob/master/api/main.py"
click node_routes "https://github.com/glaborie/aria/blob/master/api/routes.py"
click node_run_store "https://github.com/glaborie/aria/blob/master/api/session_store.py"
click node_orchestrator "https://github.com/glaborie/aria/blob/master/agents/orchestrator.py"
click node_task_dag "https://github.com/glaborie/aria/blob/master/agents/task_dag.py"
click node_skill_registry "https://github.com/glaborie/aria/blob/master/skills/registry.py"
click node_redis_broker "https://github.com/glaborie/aria/blob/master/bus/broker.py"
click node_message_types "https://github.com/glaborie/aria/blob/master/bus/messages.py"
click node_researcher "https://github.com/glaborie/aria/blob/master/agents/researcher.py"
click node_research_skills "https://github.com/glaborie/aria/blob/master/skills/researcher_skills.py"
click node_web_search "https://github.com/glaborie/aria/blob/master/tools/search.py"
click node_rag "https://github.com/glaborie/aria/blob/master/tools/rag.py"
click node_longterm "https://github.com/glaborie/aria/blob/master/memory/longterm.py"
click node_analyst "https://github.com/glaborie/aria/blob/master/agents/analyst.py"
click node_writer "https://github.com/glaborie/aria/blob/master/agents/writer.py"
click node_structured_output "https://github.com/glaborie/aria/blob/master/tools/structured_output.py"
click node_guardrails "https://github.com/glaborie/aria/tree/master/guardrails"
click node_tracing "https://github.com/glaborie/aria/blob/master/observability/tracing.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_pipeline,node_api_app,node_routes,node_run_store,node_user,node_openwebui toneBlue
class node_orchestrator,node_task_dag,node_skill_registry,node_redis_broker,node_message_types toneAmber
class node_researcher,node_research_skills,node_web_search,node_rag,node_qdrant,node_longterm toneMint
class node_analyst,node_writer,node_structured_output toneRose
class node_guardrails,node_tracing,node_tavily toneIndigo
```

## Components

### API and sessions

- [WebUI pipeline](https://github.com/glaborie/aria/blob/master/pipelines/aria_pipeline.py): `pipelines/aria_pipeline.py`
- [FastAPI app](https://github.com/glaborie/aria/blob/master/api/main.py): `api/main.py`
- [Run and status routes](https://github.com/glaborie/aria/blob/master/api/routes.py): `api/routes.py`
- [Run session store](https://github.com/glaborie/aria/blob/master/api/session_store.py): `api/session_store.py`

### Agent coordination

- [Task orchestrator](https://github.com/glaborie/aria/blob/master/agents/orchestrator.py): `agents/orchestrator.py`
- [Task DAG](https://github.com/glaborie/aria/blob/master/agents/task_dag.py): `agents/task_dag.py`
- [Skill registry](https://github.com/glaborie/aria/blob/master/skills/registry.py): `skills/registry.py`
- [Redis message broker](https://github.com/glaborie/aria/blob/master/bus/broker.py): `bus/broker.py`
- [Agent messages](https://github.com/glaborie/aria/blob/master/bus/messages.py): `bus/messages.py`

### Research and memory

- [Researcher agent](https://github.com/glaborie/aria/blob/master/agents/researcher.py): `agents/researcher.py`
- [Research skills](https://github.com/glaborie/aria/blob/master/skills/researcher_skills.py): `skills/researcher_skills.py`
- [Web search](https://github.com/glaborie/aria/blob/master/tools/search.py): `tools/search.py`
- [RAG retrieval](https://github.com/glaborie/aria/blob/master/tools/rag.py): `tools/rag.py`
- **Qdrant vector store**
- [Long-term memory](https://github.com/glaborie/aria/blob/master/memory/longterm.py): `memory/longterm.py`

### Analysis and reporting

- [Analyst agent](https://github.com/glaborie/aria/blob/master/agents/analyst.py): `agents/analyst.py`
- [Writer agent](https://github.com/glaborie/aria/blob/master/agents/writer.py): `agents/writer.py`
- [Structured output](https://github.com/glaborie/aria/blob/master/tools/structured_output.py): `tools/structured_output.py`

### Safety and telemetry

- [Guardrails](https://github.com/glaborie/aria/tree/master/guardrails): `guardrails`
- [Tracing](https://github.com/glaborie/aria/blob/master/observability/tracing.py): `observability/tracing.py`

### Other components

- **Research user**
- **OpenWebUI**
- **Tavily**

## Connections

- Research user → Run and status routes: submits query
- Run and status routes → Run session store: creates run
- Run and status routes → Task orchestrator: starts run
- Task orchestrator → Task DAG: plans tasks
- Task orchestrator → Researcher agent: runs tasks
- Task orchestrator → Analyst agent: runs tasks
- Task orchestrator → Writer agent: runs tasks
- Task orchestrator → Skill registry: reads skills
- FastAPI app → Task orchestrator: initializes
- FastAPI app → Redis message broker: connects
- Researcher agent → Research skills: registers skills
- Researcher agent → Web search: searches web
- Web search → Tavily: queries
- Researcher agent → RAG retrieval: retrieves passages
- RAG retrieval → Qdrant vector store: queries vectors
- Researcher agent → Long-term memory: recalls and stores
- Task orchestrator → Guardrails: unmasks report PII
- Run and status routes → Run session store: updates status and result
- Run and status routes → Research user: returns run status
- OpenWebUI → WebUI pipeline: sends message
- WebUI pipeline → Run and status routes: submits and polls
- Run and status routes → WebUI pipeline: returns result
