Skip to content
View Axoineo's full-sized avatar
πŸ˜‰
πŸ˜‰

Organizations

@kelperzon

Block or report Axoineo

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
axoineo/README.md

Axoineo

Persistent, fully offline local AI memory with a terminal UI.

Axoineo ingests your local documents, deduplicates them with SHA-256 hashing, embeds them into a persistent local vector database, and answers questions about them using a local LLM β€” all on your machine, with no network calls. The interface is a responsive terminal dashboard styled after the Claude Code CLI.

β”Œ β—† AXOINEO ───────────────┬ β—† MEMORY ─────────────────┐
β”‚   mascot + version       β”‚ chunks / docs / on-disk    β”‚
β”‚                          β”‚ models Β· ollama status     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ conversation (Markdown answers, sources, system logs)  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ● ready          ❯ ask your memory anything, or /help   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

How it works

  • Ingest β€” SimpleDirectoryReader parses .pdf, .txt, .md, .docx, .xlsx. Files are chunked with a sentence splitter and embedded via Ollama.
  • Deduplicate β€” a file is hashed before parsing (skip re-work on an unchanged file), and every chunk is hashed on whitespace-normalised text (skip boilerplate shared across documents). A JSON manifest beside the store records file hashes so a file whose chunks are all already known is still remembered and never re-parsed.
  • Retrieve β€” the query engine pulls the top-k chunks from ChromaDB and the local LLM answers strictly from that context, citing source files.
  • Persist β€” everything lives in ./axoineo_memory/. Delete it to reset, copy it to move your memory to another machine.

Requirements

  • Python 3.10+
  • Ollama running locally, with two models pulled:
ollama pull qwen2.5:1.5b
ollama pull nomic-embed-text

Setup

python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python main.py --doctor    # verify dependencies + Ollama connectivity
python main.py             # launch the TUI

--doctor runs on a bare interpreter and reports exactly which dependency or model is missing, so run it first if anything fails to start.

Commands

Inside the TUI, type a question to search memory, or use a slash command:

Command Action
/add <path> ingest a file or a directory (recursive)
/stats print full memory statistics
/list list ingested documents
/clear clear the conversation view
/forget --yes erase all stored vectors
/doctor re-check Ollama connectivity
/help show commands and keybindings
/quit exit

Keys: ctrl+l clear Β· ctrl+b toggle dashboard Β· f1 help Β· ctrl+c quit.

Ingestion and generation run on background threads (@work(thread=True)), so a long vectorisation or a slow LLM response never freezes the UI; a spinner in the status line shows progress.

Configuration

Every setting has an environment-variable override β€” no code edits needed:

AXOINEO_DB_PATH=/media/usb/brain \
AXOINEO_LLM_MODEL=qwen2.5:3b \
AXOINEO_OLLAMA_URL=http://localhost:11434 \
python main.py

See axoineo/config.py for the full list (chunk size, top-k, timeouts, max file size, …).

CLI

python main.py              # launch the TUI
python main.py --doctor     # dependency + Ollama preflight
python main.py --wipe       # delete the memory bank (asks first)
python main.py --db PATH    # use an alternate memory bank
python main.py --version

Tests

The engine's deduplication, manifest, retrieval and error handling are covered by an offline suite that fakes the Ollama/Chroma/LlamaIndex stack β€” no models, network, or heavy dependencies required:

python -m unittest discover -s tests -v

Layout

axoineo/
β”œβ”€β”€ config.py   # paths, model names, timeouts, tunables (all env-overridable)
β”œβ”€β”€ engine.py   # LlamaIndex + ChromaDB, SHA-256 dedup, manifest, stats
└── tui.py      # Textual dashboard + threaded workers
main.py         # entry point (TUI + --doctor/--wipe)
tests/          # offline test suite

Popular repositories Loading

  1. W2I W2I Public

    India's weather clone

    1

  2. SoftwareOS SoftwareOS Public

    SoftwareOS (SOS) is a modular software operating environment that provides the foundation for domain-specific Systems. Each System is built exclusively for the SoftwareOS architecture and operates …

    1

  3. linux linux Public

    Forked from torvalds/linux

    Linux kernel source tree

    C

  4. dikho dikho Public

    Management eco system for Dikho Global Media LLP ( DGM LLP)

    JavaScript

  5. axoineo axoineo Public

    A CLI-based, open-source AI memory system that uses an existing local LLM to analyze and permanently store information from text-based sources such as PDFs, XLSX, DOCX, TXT, CSV, and JSON. The syst…

    Python