Summarize and query your own bank statements
A start-to-finish example of the millfoliovault: 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 aredigital PDFs (a real text layer), which is exactly what the extractor reads. Word .docx, 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 thesample vault — a few fictional statements, an insurance policy, and a vehicle registration:
git clone https://github.com/millfolio/vault
cp vault/examples/vault/*.pdf ~/vaultInstall millfolio
Install millfolio as a Mac app (one download, no terminal) or via the mill CLI — both paths, with requirements and setup, live onGet started; see thedocs for everything else. This walkthrough picks up once it's installed and set up.
Index your vault
Point millfolio at your folder. It chunks each file, embeds the chunks locally, and stores the vectors in an on-deviceLanceDB index — only you ever see the contents:
mill index ~/vaultmillfolio's manifest is the only thing the frontier model is ever shown — aliases like file_0 [pdf] andcol_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.
mill start # opens http://localhost:10000Prefer the terminal? A one-shot:
mill ask "When does my car insurance renew?"Your car insurance renews on 2026-09-15.Done for the day? mill 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.