# richardadeniji/axel architecture

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

- Interactive diagram: https://gitdiagram.com/richardadeniji/axel
- Repository: https://github.com/richardadeniji/axel

## Overview

AXEL is a personal AI assistant with CLI, desktop, and web interfaces; it supports conversational memory, voice interaction, calendar management, and automation/content tools. The principal path is user input through an interface to the agent, which consults memory and an Ollama-backed language model and can dispatch tools before returning a response. Calendar and voice have distinct workflows. The README is empty, and several modules were not sampled, so their documented-by-structure capabilities are shown without speculative call wiring.

Main entry points: [`src/agent/core.py`](https://github.com/richardadeniji/axel/blob/main/src/agent/core.py) (AXEL agent), [`src/main.py`](https://github.com/richardadeniji/axel/blob/main/src/main.py) (CLI entry), [`src/voice/voice_manager.py`](https://github.com/richardadeniji/axel/blob/main/src/voice/voice_manager.py) (Voice manager), [`src/ui/cli.py`](https://github.com/richardadeniji/axel/blob/main/src/ui/cli.py) (Command line)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_main["CLI entry<br/>[main.py]"]
  node_cli["Command line<br/>[cli.py]"]
  node_desktop["Desktop GUI<br/>[gui.py]"]
  node_web["Web GUI<br/>[web_gui.py]"]
  node_webclient["Web client<br/>[axel.js]"]
end

subgraph group_assistant["Assistant core"]
  node_agent["AXEL agent<br/>[core.py]"]
  node_ollama["Ollama client<br/>[ollama_client.py]"]
  node_prompt["Prompt templates"]
end

subgraph group_capabilities["Assistant capabilities"]
  node_registry["Tool registry<br/>[tools.py]"]
  node_content["Content pipeline<br/>[creator_tools.py]"]
  node_files["File handling<br/>[file_handler.py]"]
  node_video["Video editing<br/>[video_editor.py]"]
  node_tasks["Task manager<br/>[task_manager.py]"]
  node_calendar_cli["Calendar commands<br/>[main.py]"]
  node_calendar["Calendar manager<br/>[axel_calendar.py]"]
  node_voice_manager["Voice manager<br/>[voice_manager.py]"]
  node_wake["Wake detection<br/>[wake_word.py]"]
  node_stt["Speech recognition<br/>[stt.py]"]
  node_tts["Speech synthesis<br/>[tts.py]"]
end

subgraph group_persistence["State and storage"]
  node_sqlite_store["SQLite store<br/>[sqlite_store.py]"]
  node_vector_store["Vector store<br/>[vector_store.py]"]
  node_knowledge["Knowledge base<br/>[knowledge_base.py]"]
  node_database[("Local database<br/>[axel.db]")]
  node_vectors[("Vector data")]
end

node_user(("User"))
node_ollama_service(("Ollama service"))

node_user -->|"selects interface"| node_main
node_main -->|"starts"| node_cli
node_main -->|"starts"| node_desktop
node_main -->|"starts"| node_web
node_cli -->|"submits messages"| node_agent
node_desktop -->|"submits messages"| node_agent
node_webclient -->|"sends requests"| node_web
node_web -->|"handles requests"| node_agent
node_agent -->|"requests responses"| node_ollama
node_ollama -->|"generates text"| node_ollama_service
node_agent -->|"uses templates"| node_prompt
node_agent -->|"loads and saves conversations"| node_sqlite_store
node_agent -->|"reads and saves memories"| node_vector_store
node_sqlite_store -->|"reads and writes"| node_database
node_calendar_cli -->|"manages events"| node_calendar
node_calendar -->|"reads and writes"| node_database
node_agent -->|"dispatches tools"| node_registry
node_agent -->|"registers content tools"| node_content
node_voice_manager -->|"starts detection"| node_wake
node_voice_manager -->|"transcribes speech"| node_stt
node_voice_manager -->|"forwards recognized input"| node_cli
node_cli -->|"starts and stops listening"| node_voice_manager
node_vector_store -->|"reads and writes"| node_vectors

click node_main "https://github.com/richardadeniji/axel/blob/main/src/main.py"
click node_cli "https://github.com/richardadeniji/axel/blob/main/src/ui/cli.py"
click node_desktop "https://github.com/richardadeniji/axel/blob/main/src/ui/gui.py"
click node_web "https://github.com/richardadeniji/axel/blob/main/src/ui/web_gui.py"
click node_webclient "https://github.com/richardadeniji/axel/blob/main/src/ui/static/js/axel.js"
click node_agent "https://github.com/richardadeniji/axel/blob/main/src/agent/core.py"
click node_ollama "https://github.com/richardadeniji/axel/blob/main/src/llm/ollama_client.py"
click node_prompt "https://github.com/richardadeniji/axel/blob/main/src/llm/prompt_templates.py"
click node_registry "https://github.com/richardadeniji/axel/blob/main/src/automation/tools.py"
click node_content "https://github.com/richardadeniji/axel/blob/main/src/automation/creator_tools.py"
click node_files "https://github.com/richardadeniji/axel/blob/main/src/automation/file_handler.py"
click node_video "https://github.com/richardadeniji/axel/blob/main/src/automation/video_editor.py"
click node_tasks "https://github.com/richardadeniji/axel/blob/main/src/automation/task_manager.py"
click node_calendar_cli "https://github.com/richardadeniji/axel/blob/main/src/main.py"
click node_calendar "https://github.com/richardadeniji/axel/blob/main/src/axel_calendar.py"
click node_voice_manager "https://github.com/richardadeniji/axel/blob/main/src/voice/voice_manager.py"
click node_wake "https://github.com/richardadeniji/axel/blob/main/src/voice/wake_word.py"
click node_stt "https://github.com/richardadeniji/axel/blob/main/src/voice/stt.py"
click node_tts "https://github.com/richardadeniji/axel/blob/main/src/voice/tts.py"
click node_sqlite_store "https://github.com/richardadeniji/axel/blob/main/src/memory/sqlite_store.py"
click node_vector_store "https://github.com/richardadeniji/axel/blob/main/src/memory/vector_store.py"
click node_knowledge "https://github.com/richardadeniji/axel/blob/main/src/memory/knowledge_base.py"
click node_database "https://github.com/richardadeniji/axel/blob/main/data/axel.db"
click node_vectors "https://github.com/richardadeniji/axel/tree/main/data/vectorstore"

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_main,node_cli,node_desktop,node_web,node_webclient,node_user toneBlue
class node_agent,node_ollama,node_prompt toneAmber
class node_registry,node_content,node_files,node_video,node_tasks,node_calendar_cli,node_calendar,node_voice_manager,node_wake,node_stt,node_tts toneMint
class node_sqlite_store,node_vector_store,node_knowledge,node_database,node_vectors toneRose
class node_ollama_service toneIndigo
```

## Components

### User interfaces

- [CLI entry](https://github.com/richardadeniji/axel/blob/main/src/main.py): `src/main.py`
- [Command line](https://github.com/richardadeniji/axel/blob/main/src/ui/cli.py): `src/ui/cli.py`
- [Desktop GUI](https://github.com/richardadeniji/axel/blob/main/src/ui/gui.py): `src/ui/gui.py`
- [Web GUI](https://github.com/richardadeniji/axel/blob/main/src/ui/web_gui.py): `src/ui/web_gui.py`
- [Web client](https://github.com/richardadeniji/axel/blob/main/src/ui/static/js/axel.js): `src/ui/static/js/axel.js`

### Assistant core

- [AXEL agent](https://github.com/richardadeniji/axel/blob/main/src/agent/core.py): `src/agent/core.py`
- [Ollama client](https://github.com/richardadeniji/axel/blob/main/src/llm/ollama_client.py): `src/llm/ollama_client.py`
- [Prompt templates](https://github.com/richardadeniji/axel/blob/main/src/llm/prompt_templates.py): `src/llm/prompt_templates.py`

### Assistant capabilities

- [Tool registry](https://github.com/richardadeniji/axel/blob/main/src/automation/tools.py): `src/automation/tools.py`
- [Content pipeline](https://github.com/richardadeniji/axel/blob/main/src/automation/creator_tools.py): `src/automation/creator_tools.py`
- [File handling](https://github.com/richardadeniji/axel/blob/main/src/automation/file_handler.py): `src/automation/file_handler.py`
- [Video editing](https://github.com/richardadeniji/axel/blob/main/src/automation/video_editor.py): `src/automation/video_editor.py`
- [Task manager](https://github.com/richardadeniji/axel/blob/main/src/automation/task_manager.py): `src/automation/task_manager.py`
- [Calendar commands](https://github.com/richardadeniji/axel/blob/main/src/main.py): `src/main.py`
- [Calendar manager](https://github.com/richardadeniji/axel/blob/main/src/axel_calendar.py): `src/axel_calendar.py`
- [Voice manager](https://github.com/richardadeniji/axel/blob/main/src/voice/voice_manager.py): `src/voice/voice_manager.py`
- [Wake detection](https://github.com/richardadeniji/axel/blob/main/src/voice/wake_word.py): `src/voice/wake_word.py`
- [Speech recognition](https://github.com/richardadeniji/axel/blob/main/src/voice/stt.py): `src/voice/stt.py`
- [Speech synthesis](https://github.com/richardadeniji/axel/blob/main/src/voice/tts.py): `src/voice/tts.py`

### State and storage

- [SQLite store](https://github.com/richardadeniji/axel/blob/main/src/memory/sqlite_store.py): `src/memory/sqlite_store.py`
- [Vector store](https://github.com/richardadeniji/axel/blob/main/src/memory/vector_store.py): `src/memory/vector_store.py`
- [Knowledge base](https://github.com/richardadeniji/axel/blob/main/src/memory/knowledge_base.py): `src/memory/knowledge_base.py`
- [Local database](https://github.com/richardadeniji/axel/blob/main/data/axel.db): `data/axel.db`
- [Vector data](https://github.com/richardadeniji/axel/tree/main/data/vectorstore): `data/vectorstore`

### Other components

- **User**
- **Ollama service**

## Connections

- User → CLI entry: selects interface
- CLI entry → Command line: starts
- CLI entry → Desktop GUI: starts
- CLI entry → Web GUI: starts
- Command line → AXEL agent: submits messages
- Desktop GUI → AXEL agent: submits messages
- Web client → Web GUI: sends requests
- Web GUI → AXEL agent: handles requests
- AXEL agent → Ollama client: requests responses
- Ollama client → Ollama service: generates text
- AXEL agent → Prompt templates: uses templates
- AXEL agent → SQLite store: loads and saves conversations
- AXEL agent → Vector store: reads and saves memories
- SQLite store → Local database: reads and writes
- Calendar commands → Calendar manager: manages events
- Calendar manager → Local database: reads and writes
- AXEL agent → Tool registry: dispatches tools
- AXEL agent → Content pipeline: registers content tools
- Voice manager → Wake detection: starts detection
- Voice manager → Speech recognition: transcribes speech
- Voice manager → Command line: forwards recognized input
- Command line → Voice manager: starts and stops listening
- Vector store → Vector data: reads and writes
