← veilens veilens ↗
walkthrough · experimental

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.

1

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
2

Install veilens

Install the veilens CLI via Homebrew:

brew install veilensapp/tap/veilens
3

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.

4

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.

5

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.