Skip to content

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
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.
  • 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
A terminal running 'magehand ask does grappling stop opportunity attacks?'. The answer gives a ruling in three numbered cases, then a 'Reasoning & Section References' block where each point cites the exact rulebook file and section it came from.
`ask` gives a ruling, then the sections behind it, cited down to the file. You can go check it.
A terminal running 'magehand search opportunity attack', listing scored retrieval hits. Each result shows a relevance score, a RULEBOOK tag, the source file and section, and an excerpt of the matching passage.
`search` shows the raw retrieval behind an answer, scored and sourced. No model call, so it's instant.