Skip to content
guideself-hosting

From Zero to a Grounded Answer in Ten Minutes

Four commands to deploy, one screen to claim it, one folder to ingest, and a first answer that arrives standing on the exact nodes it read. Your first ten minutes with a knowledge forest.

MonkeyLLM Team4 min read

Most knowledge tooling makes you earn the demo with an afternoon of configuration before the first useful answer appears. MonkeyLLM's first session is deliberately short: deploy, claim, ingest, ask. This is the ten minute version, with what you should see on screen at every step.

What you are about to run

MonkeyLLM is a self-hosted knowledge forest: a linked graph of small curated notes that your AI agents walk node by node, instead of a vector index they query for top-k chunks. The distinction is the whole product, because top-k retrieval is a single hop by construction and real questions chain hops; we unpack that in why multi-hop breaks RAG. Today is purely practical. Navigate, don't retrieve.

Everything runs on your machines. The engine is Apache-2.0, the apps are AGPL, and your data never leaves your infra.

Four commands to a running Station

Deployment is docker compose, four commands total. We keep the exact commands in one place so they never drift from the code: the quickstart has the short version, the deploy guide has the options, and the Docker self-hosting walkthrough explains every step if this is your first compose file.

On hardware, you have room. Our benchmark rig is a single RTX 3060 with 12 GB, and a quantized 12B model fits it whole. 8 GB cards work with tighter quantization or CPU offload via llama.cpp. No GPU at all also works: point the chat binding at any OpenAI-compatible endpoint (OpenRouter, a llama.cpp server, Ollama) and the rest of this session is identical.

When the containers are up, the Station serves the console in your browser.

First boot: claim your forest

Your first visit lands on the setup screen. You create the owner account here, and everything else in the console (keys, model bindings, access control) descends from that account. There is no cloud handshake and no license call home. It is your forest from the first click.

The first-boot setup screen where the owner account is created
The first-boot setup screen where the owner account is created

Ingest a folder, watch the job

Point an ingest job at a folder of real documents. Each one becomes a node with a curated passport (its title, summary and tags: the small label an agent reads before deciding to open the node). The summary is held to a hard sixty-token contract, because these passports are what every future walk will read.

Ingest is where MonkeyLLM spends its effort, and the spending is visible: the Ingest screen shows files, folders and clips as a job you can watch move.

An ingest job in the Studio console, processing a folder file by file
An ingest job in the Studio console, processing a folder file by file

For calibration: across 100 heterogeneous real-world documents we measured 1.71 s per document, with 100% of summaries passing the sixty-token contract and zero broken links afterwards.

Ask, and see what the answer stands on

Open the Ask screen (this post's cover) and ask something that spans documents. The answer arrives standing on the nodes it used: the agent entered through search, read labels, followed links, opened only what it needed, and the screen shows that path.

This structure is why the same 12B local model that scores 0/11 on our strictly multi-hop benchmark as a classic top-k RAG reader scores 11/11 as a forest navigator. It is a small benchmark, 11 questions, and we say so plainly; the corpus, question sets and harness are committed, and every table regenerates with one command.

Your ten minutes start now

Four commands and one folder are the whole ask. Deploy from the quickstart, and if your first grounded answer lands the way ours did, star the repo on GitHub or keep reading at monkeyllm.com.

Want the long version?

The paper carries the full architecture, the benchmark tables and the findings that failed their criteria.