Repository navigation
Releases
v1.0.3 — working Foundry install links
Mostly documentation, but one of the corrections is a broken install.
Fixed
-
The Foundry install instructions pointed at a repository that does not
exist. The setup page gave a manifest URL under an old repository name,
and that name 404s — so anyone who followed the instructions pasted a dead
link into Foundry and got nothing. The same dead name appeared in the README
and the integration reference.The correct manifest URL is:
https://github.com/KochiTusker/Tusks-Vault-Foundry/releases/latest/download/module.jsonBetter still, the module is
listed on the Foundry package registry
— searching Tusk's Vault in Foundry's own Install Module browser is
shorter than pasting anything, and updates then arrive through Foundry's own
update check. That is now the first route the docs offer. -
The Foundry companion module was described as useless on its own. It is
not. The module runs in two modes, chosen in its settings:- Lite needs nothing else installed. It answers from the journal entries
in one Foundry folder, cites the entry it used, and honours your journal
permissions, so a GM-only note stays GM-only. - Bridge points the module at Vault running on the GM's machine, so
answers come from everything you keep — Word, PDF, Markdown, an Obsidian
vault — instead of one journal folder, with your choice of model and an
API key that never sits in a browser.
The previous wording told anyone who wanted the two-minute journals-only
trial to go and install a self-hosted application first. Both modes are now
described in the README, on the site and in the setup guide. - Lite needs nothing else installed. It answers from the journal entries
-
A test asserted platform-specific wording unconditionally. The port
fallback's diagnostic differs between Windows and POSIX, and the test only
checked the Windows form. It passed everywhere it was run before release,
which turned out to mean everywhere it was run was Windows, and the Linux CI
leg failed. Both branches are now exercised on either host.
Changed
- Several test-hygiene fixes of the same family: a helper that discarded an
async callback's result, a skip written as an early return (which reports as
a pass without asserting anything), and a sentinel value one edit away from
becoming a silent pass.
Nothing to do when upgrading. If you tried to install the Foundry module
before this release and it failed, the manifest URL above is why.
v1.0.2 — PDF ingest fix, and three platform failures
Four platform fixes, one of which affected every install.
Fixed
-
PDF documents were never actually read. Since the first release, every
code path that parsed a PDF calledpdf-parsewith its v1 calling
convention against a v2 package, which is not callable. The lore loader
catches per-file ingest errors and logs them, so nothing crashed — PDFs
simply contributed nothing to the corpus, and an answer that should have
cited one said it had no source instead. The type checker could not see it,
because the module was loaded throughcreateRequireand typedany.If you keep lore as PDFs, they are being read for the first time after
this update. Nothing to do beyond updating; the next question re-ingests
the folder. Extraction is now covered by a test that parses a real PDF
rather than a mock — a mock agrees with whichever convention the code uses
and stays green through exactly this kind of break. -
Windows on ARM could not start the server at all.
pdf-parsedepends on
@napi-rs/canvasfor the DOM globals PDF.js expects, and the pinned version
ships nowin32-arm64binary; the failed load surfaced as
DOMMatrix is not definedduring boot, before anything could report it.
Fixed twice over: the dependency is pinned forward to a version that ships
the binary, and PDF support now loads lazily, so a platform without one
loses PDF reading rather than the whole application. -
A reserved port range stopped the server instead of being stepped over.
The launcher walks 3000–3019 when a port is busy, but only retried on
EADDRINUSE. Windows reserves blocks of TCP ports for Hyper-V, WSL2 and
Docker Desktop, and binding inside one fails withEACCES— so a machine
whose reservation covered 3000 failed on the first attempt and never tried
the other nineteen. Both are retried now, and if the whole range is
exhausted the error names the reservation list and how to check it. -
Lore was not migrated across drives. On first boot with an external lore
folder, documents in the repository's ownLore/are moved into it. That
used a rename, which cannot cross a filesystem — an install onC:with a
lore folder onD:is an ordinary setup. The move failed, the app read the
new folder while the documents sat unread in the old one, and only a log
line said so. It now falls back to a copy, staged and published atomically,
with the source left untouched if anything goes wrong.
Changed
-
Continuous integration now starts the application. The suite had 1,488
tests and none of them booted the server, which is how two of the defects
above shipped green. Every commit now launches the real server on both
Windows and Linux and checks it answers. -
Platform support is stated plainly in the README, the installation guide
and the known-issues page. 64-bit Windows is the supported platform. Windows
on ARM, macOS and Linux are expected to work and have not been proven to —
reports from any of them are welcome.
v1.0.1 — cross-platform path-guard fix
A same-day patch on top of the first public release.
Fixed
-
safeVaultPathnow answers the same on every platform. The Obsidian
vault's path guard rejected a backslash path on Windows (where\is a
separator and the path escaped the vault) and accepted it on Linux (where
\is an ordinary filename character, so the path stayed inside the vault).
Neither behaviour disclosed anything outside the vault, but a guard whose
answer depends on the host OS has to be reasoned about twice. A
vault-relative path is POSIX by contract, so backslashes are now refused
outright, ahead of any path resolution. -
Test-suite timeouts sized for real machines. The vault suite writes ~120
notes and builds a vault map in a per-test hook, which could exceed the
default 10-second hook budget on a loaded machine or a slower CI runner.
No behaviour changes for normal use, and nothing to do when upgrading.
v1.0.0 — first public release
Tusk's Vault is a local-first lore assistant for tabletop campaigns. Drop your
notes into a folder, then ask questions about them from Discord, from Foundry
VTT, or from any MCP client — and get back an answer with a citation on every
claim.
The whole design is one idea: the assistant may only tell you what your
documents say, and it must show you where it got it. A canonical seven-rule
block is appended to every prompt at assembly time, so citation discipline and
the no-invention contract are structural rather than configurable — you cannot
turn them off by editing a system prompt. When the answer genuinely is not in
your sources, it says so in a fixed phrase and files the question as a lore gap
for you to answer once, properly.
What's in it
- Ask from where you already are — a Discord bot, a Foundry VTT module, an
MCP bridge, and a local dashboard. - Four ways to connect a model — Google Gemini or OpenRouter with your own
key, an existing Claude Code subscription, or Ollama with no key at all. - Three citation flavours —
[filename],[clarification: ID]and
[D&D 5e]— so you can always see whether a claim came from your canon, from
a ruling you made earlier, or from the rules. - Lore gaps — questions the documents cannot answer are collected in the
dashboard. Your answer is matched semantically, so it still applies when a
player phrases the same question differently months later. - Obsidian vaults as a lore source, read strictly read-only.
- Eight personas — the same citation discipline in a different voice.
- Local by default — the dashboard binds to loopback, embeddings run on
your own CPU, and there is no telemetry.
Getting started
You need Node 20 or newer. The
installation walkthrough
covers setup, connecting a model, and pointing Vault at your lore.
Full documentation: https://kochitusker.github.io/Tusks-Vault/
MIT licensed. Issues and feedback are welcome.