magehand — Local RAG Assistant for Tabletop Game Masters
Answers rules questions from your own books and keeps track of your campaign. Runs against a local model or a hosted one.
- ROLE
- Solo — design and engineering
- PERIOD
- 2026 – Present
- RUNS FULLY OFFLINE
- Local
- STACK
- Rust, RAG, Local LLMs (Ollama), OpenRouter, whisper.cpp, WebRTC
THE PROBLEM
Running a campaign means holding two things at once. The rules are thousands of pages you can't search while four people wait. Your own canon lives in scattered notes and in your head. A general chatbot is bad at the first, since it will invent a rule and sound sure about it, and useless at the second, since it has never read your notes.
WHAT I BUILT
- Indexes your rulebooks and your campaign vault locally. Answers quote the passages they came from and cite them, so they're checkable.
- Campaign state is a plain-markdown Obsidian vault that magehand reads and writes. If the tool disappears the notes are still notes.
- Record a table ruling once and later answers lead with your version rather than arguing with it.
- Player mode restricts retrieval to player-visible sources. A per-player secret ledger keeps one player's briefing from leaking another's.
- Live mode transcribes game night locally and shows entity cards matched against your vault, with no model calls while you play. Afterwards a cleanup pass writes a draft. You read it and promote it. Nothing enters canon on its own.
- A dashboard for the tablet behind the DM screen: open threads pinned at the top, rules and trigger cards as they happen, and one-tap actions that save a ruling or open a thread. Nothing writes to the vault without a tap.
- Players join from a phone by scanning a QR code, with no app and no account. They get a live character sheet, spoiler-safe rules questions, their own secrets and the latest recap, a shared map, and a private line to the DM. Online play adds in-page voice, with one stream per player so the transcript is speaker-labelled by construction.
- Runs against a local Ollama model or a hosted one through OpenRouter. The offline path is a real option, not a degraded one.
OUTCOME
- Rules answers that quote the actual text and cite it, instead of sounding right.
- Continuity that survives between sessions: open threads, debts, NPCs and an in-world calendar, all tracked.
- Nothing enters canon without review, and the whole thing runs with no network.
SCREENSHOTS








