Summarize and query your own bank statements
A start-to-finish example of the veilens vault: drop a folder of PDFs on your Mac, index them, and ask open-ended questions — "how much did I spend on travel last year?", "when does my insurance renew?" — answered by a frontier model that writes code but never sees your data. Everything runs on Apple Silicon; the documents and the answers stay on the machine.
⚠︎ Experimental. This is an early research flow — the pieces are moving and it isn't ready to trust with data that truly matters yet.
Gather your documents
Export your statements from your bank or insurer's website as PDF and
drop them in a folder — say ~/vault. Bank exports are
digital PDFs (a real text layer), which is exactly what the
extractor reads. CSVs and Markdown notes work too. Nothing is uploaded
anywhere; this folder just sits on your disk.
No data of your own to test with? Grab the sample vault — a few fictional statements, an insurance policy, and a vehicle registration:
git clone https://github.com/veilensapp/veilens
cp veilens/examples/vault/*.pdf ~/vault Install veilens
Install the veilens CLI via Homebrew:
brew install veilensapp/tap/veilens Set up the vault
One command installs the whole stack — the inference server (a chat model that reads your documents and an embedding model for search, both served from one port), the headgate harness, and the veilens vault — reusing anything already installed:
veilens install veilens bundles everything it needs — the millrace inference server, the headgate harness, and the local vault site — installing each only if it isn't already there.
Index your vault
Point veilens at your folder. It chunks each file, embeds the chunks locally, and stores the vectors in an on-device LanceDB index — only you ever see the contents:
veilens index ~/vault
veilens's manifest is the only thing the frontier
model is ever shown — aliases like file_0 [pdf] and
col_2, never names, values, or paths.
Ask
Open the vault chat — it brings the server up, launches the chat UI, and points your browser at it. Type a question and the frontier model writes a small program that searches your vault and reads the real text with the on-device model; the answer is computed locally.
veilens start # opens http://localhost:10000 Prefer the terminal? A one-shot:
veilens ask "When does my car insurance renew?" Your car insurance renews on 2026-09-15. Done for the day? veilens stop shuts the
whole stack back down.
Why this is private
The powerful model is treated as an untrusted code generator,
not a data processor. It sees the shape of your vault
(the aliased manifest) and writes code; the code runs locally, in a
network-denied sandbox that can reach only 127.0.0.1. The
on-device model is the only thing that reads real content, and the
answer is printed on your machine. Your statements never leave the Mac,
and never reach the frontier model.