Point it at your D&D, Pathfinder or Call of Cthulhu notes and ask from Discord,
Foundry's chat bar, or any MCP client. You bring the model — Vault does the wiring:
finding the passages that bear on the question, holding the model to your notes, and
citing the file every claim came from.
Which means you can ask it daft questions and still trust the answer.
@Tusk who's the party member least fit to be the ship's captain?
Bryn Tallow. He cannot swim, has twice refused to board a boat — once at Dunmar, once
at the Kelmoor quay — and gets sick on still watersource 1,
which makes him the least seaworthy of the four regardless of any question of
leadership.
1Party.md
A daft question, answered from the file it came out of. That is the
whole trick: it is funny because it is true to your campaign.
I
Why this exists
The answer that sounds right is the dangerous one
My campaign notes were spread across six documents, two of which contradicted the other
four. Players asked me the same questions between sessions — who was that merchant,
what did we actually agree to, whose brother is the king — and I answered from memory,
badly, and sometimes differently than last time.
The obvious fix is to ask an AI, and it fails in a specific way: a general chatbot handed
your setting answers every question confidently, including the ones your documents
say nothing about.
@Tusk what was the innkeeper at Greywater called?
A general chatbot
Her name was Mira Ashdown, and she had run the Drowned Lantern since her father passed.
No source. Nothing in your notes says this.
Tusk's Vault
I am unsure about this detail. I have recorded this as a lore gap for the DM to clarify.
Refused, and added to Lore Gaps
Both read like an answer. Only one of them is one — and at the table, in front of
everyone, the citation is the only thing that tells you which.
So the whole design is one idea: it may only tell you what your documents say, and
it must show you where it got it. Answer a logged gap once and that answer is
reused from then on.
Nobody needs this until the evening a player asks something specific and four people
remember it four different ways.
Then it is the only thing you want.
II
When it doesn't know
The best thing it does is admit defeat
Any assistant can answer a question your documents cover. The one that decides whether you
can trust it at the table is the question they don't — and the useful behaviour there
is to stop, say so, and remember that you were asked.
Wednesday, in a channel
Someone asks
“Whose brother is the king?” — a question your notes never actually settled.
Two seconds later
It says it doesn't know
Not a guess dressed as an answer. A fixed phrase, so nobody mistakes it for canon.
Same moment
The gap is logged
The question lands in your dashboard, waiting for the one person who can settle it.
Once, ever
You answer it
One sentence from you. That ruling is now part of the archive, cited like any document.
and every later phrasing of that question — however differently it is asked — gets your answer
The archive gets better every time it admits it doesn't know something.
That only works because it is willing to admit it.
A ruling recorded this way is cited like any other source, so six months later nobody has
to remember whether it was decided or imagined.
What people actually ask it →
Real questions, real citations, and one refusal, against a corpus written to be published.
See the answers in full →
III
How it compares
Why not use something that already exists?
Often you should. Most people arrive here having already pasted their notes into
ChatGPT — good software, and for a question your documents genuinely answer it will
usually answer correctly. The trouble is the question they don't.
NotebookLM is the closest comparison, and on its own ground it is better than
this. Google's budget, excellent retrieval, exact citations, nothing to install.
If you are working alone through a pile of documents, use it. The difference is not
quality — it is what the two things are built for.
What a research notebook isn't trying to do
Put the answer where the whole table sees it
Turn up in Discord, or Foundry's chat bar
Sound like your table
Guess — and label the guess
Read a cruel scene back as written
What this one charges you for that
Node, Git and a terminal to begin
A machine that has to stay awake
A folder corpus that stops near 200 pages
One maintainer, and no support desk
Neither column is a failing. The left one is a tool built for a reader alone with a PDF;
the right one is the bill for being built for a table instead.
What a table actually needs from a lore assistant
Capability
Tusk’s Vault
NotebookLM Google, in the cloud
ChatGPT / Claude a general assistant
Obsidian + AI plugins notes you already keep
At the table
Everyone at the table sees the answer
✓Yes
✗No
✗No
✗No
Ask it from Discord, or Foundry’s chat bar
✓Yes
✗No
✗No
✗No
Answers in a voice your table picked
✓Yes
✗No
◑Partly
◑Partly
Whether it can play
Will speculate when you let it, and labels it
✓Yes
✗No
◑Partly
◑Partly
Recounts a grim scene without sanding it down
✓Yes
✗No
◑Partly
◑Partly
Whether you can trust it
Says it doesn’t know, instead of inventing
✓Yes
✓Yes
✗No
✗No
Cites the document behind every claim
✓Yes
✓Yes
◑Partly
◑Partly
A ruling you make once is remembered and reused
✓Yes
✗No
✗No
◑Partly
Your campaign documents never leave your machine
✓Yes
✗No
✗No
✓Yes
What it costs you
Holds a campaign bigger than about 200 pages
◑Partly
✓Yes
◑Partly
◑Partly
Ready in five minutes, without a terminal
✗No
✓Yes
✓Yes
◑Partly
Still answers while your own machine is asleep
✗No
✓Yes
✓Yes
✗No
A team behind it, and somewhere to report a bug
✗No
✓Yes
✓Yes
◑Partly
Which is the honest shape of it. This is not a better NotebookLM — it is a worse one,
pointed somewhere NotebookLM is not pointed. Keep theirs for research; use this when the
question is being shouted across a table. Campaign wikis and your own GM are not in that
grid at all, because neither is a thing you ask — both, and the case for using them
instead, are in the full comparison.
A grid where one column ticks every row is a grid whose rows were chosen by whoever owns
that column. The four this one does not win are there so the nine it does are worth
something.
Read those four first.
IV
How it works
Four stages, and one of them is the point
A question goes in one end. Stage two is the one you cannot configure away, and the reason
the answer at the far end can be trusted.
1
Find what bears on the question
Reads a folder on your disk — PDF, DOCX, Markdown, plain text — or an
Obsidian vault, read-only, nothing moved. Passage-level retrieval then picks out the
parts that matter, so a large campaign is not a large bill.
2
Force the rules on top
Cite every claim; refuse rather than invent. The block is force-appended to every
prompt, so editing the system prompt — or picking a persona — cannot
remove it.
The reason this exists
3
Ask your model
Gemini, ~400 models through OpenRouter, a Claude subscription, or one running on your
own machine. Swappable mid-campaign.
4
Check what came back
A refusal is labelled rather than served as content in the archivist's voice —
and the question it could not answer lands in your dashboard as a lore gap.
The corpus travels with every question, so every cloud request pins a zero-data-retention
routing floor.
How the retrieval pipeline works →
V
Ask it anything
Not every question is a lookup
Most of what gets asked at a table is not "when did Dunmar fall". It is an argument two
players are having, or a joke someone wants settled with evidence. Those work — and they
work for the same reason the serious ones do. It can only answer from what you wrote
down, and it shows you where.
@Tusk who's most likely to start a tavern fight?
Roswyn Kett is the likeliest — she has already put one person in the water after an
argument with the harbourmaster at Kelmoor, and has since been barred from the
Ninefold Rest twice (and readmitted twice)source 1.
1Party.md
Nobody wrote "Roswyn starts fights" anywhere. It read two incidents and drew the
obvious conclusion — then told you which file they were in.
@Tusk would Ser Alric get on with Vesper?
Unlikely, and pointedly so. Vesper has read every surviving account of the fall of
Dunmar, and corrects people who have not — including, on one occasion, Ser Alric
Vanesource 1. Ser Alric
would not discuss Dunmar when the party found him at the Ninefold
Restsource 2, and
refuses to speak of the siege at
allsource 3. A scholar
who has already corrected the Grey Knight on the one subject he won't touch is not a
natural friend for him.
1Party.md
2Sessions.md
3Houses.md
Three files, joined into one answer about two people who have never
shared a scene. This is the kind of thing a table argues about for
twenty minutes.
And it doesn't have to sound like a librarian
A persona replaces the whole voice, and the citation rules survive it. Same question,
same corpus, same sources — two of the eight that ship:
@Tusk who's least fit to be the ship's captain?
The Archmage
Ah, a question of seamanship, not of secrecy — this one the chronicle answers
plainly. Bryn Tallow is the least fit hand to stand at the helm. He cannot swim,
and has twice refused to board a boat at all — once at Dunmar, once at the Kelmoor
quay — and takes ill even on still water. A captain who will not set foot on his
own ship is no captain at all.
Cited Party.md
The Sellsword
Bryn Tallow, and it ain't close — the poor bastard can't swim, gets sick on still
water, and has flat-out refused to board a boat twice, once at Dunmar and once at
the Kelmoor quay. Roswyn's the only one of the four who's ever actually crewed a
boat, so hand her the wheel instead.
"Who would lose a duel to a chicken" is not in anybody's notes, so by default it is
refused like any other question the documents don't answer. Turn on
Speculative Mode and it will reason from what the chronicle establishes
about each character — then cite the evidence it used and tag the conclusion, so a
guess can never be mistaken later for something you wrote down.
@Tusk which of them is most likely to lose a duel to a chicken?
Speculative Mode off — the default
I am unsure about this detail. I have recorded this as a lore gap for the DM to clarify.
Refused. It isn't in your notes.
Speculative Mode on
Bryn Tallow — he's the one party member who's never drawn a weapon in any
recorded session, can't swim, and has twice refused to even board a boat because
still water makes him sick. A creature this jumpy and non-combative would fold
against a chicken's raw aggression before a blade ever cleared its sheath.
Cited Party.md, tagged [speculation]
The evidence is real even when the conclusion isn't — and it says which is which.
A factual question still gets the refusal, whichever way the switch is set.
Being recorded
A video walkthrough is on the way
Install to first cited answer, start to finish — including the moment it refuses one.
Until it lands, the setup guide
walks the same path in writing.
VI
Getting a session in
Three ways in, one answer
A lore assistant nobody opens is a lore assistant nobody uses, so it answers where the
question already gets asked.
Discord
Foundry VTT
MCP client
one corpusone rule block
cited answeror a refusal
The surface only decides where the question comes from and who sees the reply. Persona,
corpus and citation discipline are identical on all three.
Discord@mention the botCited answer
In your campaign Discord
Between sessions, which is when most of the questions actually arrive. Mention the bot
and the answer lands in the channel, citations and all, where everyone can see it —
so the same question doesn't get asked three more times that week.
Wants a bot token. You paste one string; the rest is derived.
Type /tusk and the answer posts into the chat log without anyone leaving the
game. A per-world access mode decides whether players may ask at all, and whether the
answer is whispered to them or posted for the table — because not every answer is
one the party should have.
The third route needs no setup screen at all: any MCP client — Claude Code, Claude
Desktop, anything speaking the protocol — can pair and ask directly.
What people actually ask it →
And it doesn't have to be a campaign. Nothing in the machinery knows what
a campaign is — it indexes a folder, cites what it finds, and refuses what isn't
there. Point it at a handbook or a wiki export and you get the same bot.
The prompts, the citation styles and the refusal wording all assume a GM and a table.
Everything else is a happy accident.
VII
What it costs
A question, not a month
Tusk's Vault is free. The only money involved is whatever your chosen model charges for the
tokens, and a single question is a very small number of them — one retrieval-augmented
request, not a generation pipeline. Gemini's free tier covers most home games outright, and a
local model costs nothing at all.
On a Claude plan you already pay for
$0
On Gemini's free tier, which covers most home games
$0
On a model running on your own machine
$0
Through one OpenRouter key, a session of questions
pennies
A campaign wiki subscription, every month, whether you play or not
$5-15
Tusk's Vault
only when you played
A wiki subscription
every month, regardless
Twelve months, for a table that played through eight of them and lost four to
scheduling. The four gaps are the whole difference: a subscription bills them,
and a per-question cost doesn't exist to bill.
Years of somebody's worldbuilding, and often things said at a table that were never meant to
leave it. So it's worth being exact about where everything goes. Almost all of it stays on
the machine you installed it on.
Your machine
Every campaign document
The index built from them
Your rulings and lore gaps
The embedding model, running locally
Your API keys, encrypted
the question, and the passages that answer it
The model you chose
Reads those passages
Writes the answer
Pinned to keep nothing
Choose a model that runs on your own machine and the right-hand side disappears entirely —
nothing leaves at all.
No account, no sign-up, no licence check.
No telemetry, no analytics, nothing phoning home. Ever.
Keys encrypted at rest and tied to the machine — copying the file elsewhere gains nothing.
Cloud requests pin a zero-data-retention floor, because the corpus travels with the question.
MIT licensed, every line readable, including the setup scripts.
One person, one Windows PC, no support desk — which is why the feedback button sits
next to the coffee one in the app. Telling me what broke gets it seen; it does not promise
the fix sticks.
The unvarnished version is here.
So what happens if I stop?
Worth asking of anything you hand years of worldbuilding. The answer splits cleanly.
Stays yours
Your documents — the same folder, never converted or imported
Your rulings and gaps — readable JSON, sitting beside them
The code — MIT, fork it or hand it on
Your install — nothing runs on my servers, so there is nothing to switch off
No export step, because nothing was ever captured.
Stops
Fixes — known issues stay known issues
Adapting — Discord or a provider changes something and nothing follows it
Dependency triage — advisories stop being watched
This is how it would actually die: drift, not deletion.
A real risk, but a differently shaped one. A hosted tool fails by making your material
inaccessible on someone else's schedule. This fails as a tool that stops improving, next
to a folder that never depended on it.
IX
Questions
The ones people actually ask
Does it make up lore when it does not know?
No — that is the whole point of the design. A canonical rule block is appended to every prompt at assembly time, so citation discipline is structural rather than configurable. When the answer is not in your documents the bot emits a fixed refusal phrase, and the question is logged in the dashboard's Lore Gaps tab so you can answer it once and have that answer reused afterwards.
Do my campaign documents get uploaded anywhere?
Your documents stay in a folder on your machine. Only the question and the snippets that answer it are sent to whichever model you chose, and if you run a local model through Ollama then nothing leaves the machine at all.
What does it cost to run?
The software is MIT-licensed and free forever. The only cost is the model you pick: Google Gemini's free tier covers most home games, OpenRouter is pay-as-you-go at roughly $0.60 to $4 per three-hour session, a Claude Pro or Max subscription costs nothing extra, and a local model through Ollama costs nothing at all.
Do I need to be technical to run it?
You need to be comfortable installing Node.js and running a script. On Windows there is a one-file installer that prints its whole plan and asks before it changes anything; on macOS and Linux it is a clone and one command.
Can players use it, or only the GM?
Both, and how much players can see is yours to set. In Foundry VTT there is a per-world access mode controlling whether players may ask at all, and answers can be whispered rather than posted publicly.
What file formats can it read?
PDF, DOCX, Markdown, plain text, JSON, YAML, CSV, HTML and RTF. It can also read an existing Obsidian vault directly, strictly read-only, without you having to move or copy anything.
Does it work with Foundry VTT?
Yes, through a companion module that pairs with your running Vault in one click. You ask with /tusk in the chat bar and the answer posts into the chat log, whispered or public depending on the world's access mode.
How is this different from asking ChatGPT about my campaign?
A general chatbot will answer every question confidently, including the ones your documents say nothing about, and the invented answer reads exactly like a real one. Vault cites the document behind every claim and refuses when it has no source, which is the behaviour that makes it usable at the table.
Does it only work for tabletop campaigns?
That is what it was built and tuned for — the prompts, citation styles and refusal wording all assume a game master and a table. But nothing in the machinery knows what a campaign is. It indexes a folder of documents, answers with citations, and refuses when the folder does not cover the question, so pointing it at a handbook, a wiki export, a set of house rules or any other body of documents gives you the same behaviour over those instead.
X
Start
Two things, then one command
You need Node 20 or newer and Git. That is the whole
requirement — no Python, no Docker, no database, no admin rights, and no paid key: a
free Gemini tier covers most home games, and a local model costs nothing at all.