// CASE STUDY

Groot OS
runs while I sleep.

How I built a 6-agent AI system with hybrid RAG, guardrails, and measurable quality — self-hosted on a $200 mini PC, with zero cloud bills.

24/7 on bare metal 6 agents · 7 models 1.000 Ragas faithfulness $0 / month inference

Why build this instead of calling an API?

Anyone can chain OpenAI calls. I wanted to answer a harder question: can a genuinely useful multi-agent system run on hardware I own, with full data privacy, at zero marginal cost? That constraint forces the engineering that actually matters in production — model selection under memory pressure, retrieval quality you have to measure instead of assume, and reliability without a cloud provider's safety net.

The result is Groot OS: a supervisor-routed agent system that handles my research, coding help, tutoring, and job-search workflows — reachable from Slack and Telegram, running around the clock on a used Lenovo M720Q (i5-8500T, 16GB RAM, Ubuntu 22.04) on my desk in Toronto.

One supervisor, five specialists

Every request enters through Groot, a supervisor agent built on LangGraph that classifies intent and routes to a specialist. Each agent runs a model chosen for its task — and for its memory footprint, since all seven models share 16GB of RAM through Ollama on CPU only.

Agent
Model
Role
Groot
qwen2.5:7b
Supervisor — routes every request
Einstein
deepseek-r1:14b
Research & deep reasoning
Tony
qwen2.5-coder:7b
Coding & code review
Siva
phi3:medium
Tutoring & explanations
Job Search
qwen2.5:7b
Listings triage & matching
Career
mistral:7b
Applications & career docs

Routing through a supervisor instead of a flat toolbelt keeps each specialist's context small and its prompt focused — which matters enormously when your largest model is a 14B running on CPU.

Hybrid RAG: BM25 + dense, weighted 40/60

Pure vector search fails on exact identifiers — error codes, function names, acronyms. Pure keyword search fails on paraphrase. Groot fuses both:

Query BM25 keyword search + Dense retrieval
nomic-embed-text
Weighted fusion Top-k context
BM25 · 40% Dense · 60%

Six collections, access-controlled

Knowledge lives in 6 ChromaDB collections split by domain, with RBAC enforced per agent — the tutoring agent cannot read job-search data, and vice versa. Splitting by domain keeps retrieval precise; access control keeps a misrouted query from leaking context across workflows.

27GB of models, 16GB of RAM, zero GPUs

The seven models total 27GB on disk — they can't all be resident at once. Groot treats model residency as a scheduling problem: keep the supervisor's router model warm for latency, load specialists on demand, and evict by least-recently-used when memory pressure rises.

7
Models sharing RAM
27GB
On disk
16GB
Physical RAM
$0
Monthly inference

Evals, not vibes

A RAG pipeline you haven't measured is a RAG pipeline you're guessing about. Groot's retrieval is scored with Ragas, using qwen2.5:7b as the judge model and nomic-embed-text embeddings — the same stack that serves production, so the eval measures what users actually get.

MetricScoreWhat it means
Faithfulness1.000Zero hallucinated claims in answers
Answer Relevancy0.676Honest number — improving via query rewriting
Overall0.838Composite pipeline score

I publish the 0.676 on purpose. Perfect scores across the board usually mean a soft eval set; a real system has a number it's still working on. Output quality is enforced at runtime by guardrails-ai validators before anything reaches Slack or Telegram.

Where it meets the real world

What running it 24/7 taught me