Project 03SoftwareSince 2026

Project H3: A Horus Heresy 3.0 Rules Chatbot

A rules assistant that runs on one box on my desk and answers only from reference files I wrote. If they don’t cover the question, it says so.

Reference files
551
Unit datasheets
529
Shared memory
128
GB
Cloud services
0

What it is

Horus Heresy is a tabletop wargame with a lot of rules. The third edition landed in 2025, and most of what’s online still describes the older ones. Ask a general chatbot a rules question and it’ll blend editions without telling you.

So I built one that can’t. It runs on one box on my desk, with no cloud involved. It answers only from reference files I put together, and names the file behind each answer. If the files don’t cover the question, it says “Not found in the reference set.”

That last part matters most. A wrong answer that sounds sure of itself is worse than no answer.

How it’s built

The hardware is a Dell Pro Max with GB10. It’s an Arm machine with 128 GB of memory, shared between CPU and GPU. Ollama runs the model, Nemotron 3.5 Lightning. Open WebUI sits in front in a Docker container and handles the chat and the search.

The approach is retrieval-augmented generation, or RAG. The model doesn’t learn the rules. It looks up the relevant passages for each question and answers from those. I chose this over fine-tuning, which means retraining the model on the rules. Fine-tuning blurs facts, and points values come out invented.

The reference set is 551 Markdown files. Of those, 529 are unit datasheets, 1 per unit. The rest cover core rules, army rules and weapon profiles. Every file carries a tag saying how far to trust it. Only 20 datasheets are checked against the printed books. The other 509 come from community data, and the bot has to say so.

Search uses keywords and meaning together, then a second model re-ranks the results. Keywords matter here. Rule names and points values are exact strings, and meaning-based search alone blurs them.

The bot follows 6 rules. Answer only from the files. Cite the file and section. Quote stats exactly. Show the trust tag. Ignore other editions. Flag conflicts between sources.

The first test caught a real failure. I asked how to field Iron Havocs, an Iron Warriors unit, in an Imperial Fists army. It said yes, because nothing in the files forbade it. I added a line to the rules: no prohibition isn’t permission. It now says “Not found in the reference set.”

What I’d do differently

  1. Write the test questions first. I had a working bot before I had a way to measure it. The first 5 questions gave 3 right answers, 1 wrong and 1 that never finished. I’d write 30 hard questions before uploading a single file.
  2. Check the hardware before the software. The default builds ran on the CPU, and that caught me twice. I’d upload 1 file and watch the GPU before queuing 551.
  3. Set a stopping rule for checking the data. I spent weeks verifying datasheets. My last automated fix run applied 0 changes. I’d decide up front what “good enough” means, then label the rest and move on.