Security & privacy

Security you cancheck yourself.

No upload: a breach of our servers cannot reach your data, because it is never there. No credentials: Enclave cannot move money or read a live balance. No third-party processor. The engine is deterministic: AI drafts its parsers offline at build time, and at runtime it is pure arithmetic.

Live demonstration

Watch it stop.

A scripted ledger runs through the reconciliation check. Six rows tie. The seventh carries a transposed digit, and the check does exactly what it does in production.

opening £4,120.00Σ +2,094.10computed £6,214.10
self-audit
resources loaded…
origins contacted1 (this one)
external requests0
Your browser is the auditor.
The claims

Five claims you can check.

connect-src 'self'

No transit

The page that reads your statement cannot make an external request. The browser enforces this through its Content-Security-Policy. Open DevTools and watch the network panel stay empty.

retained: 0 bytes

No custody

We cannot leak, sell, or lose what we never receive. There is no server-side copy of your transactions anywhere.

oauth grants: none

No credentials

No open-banking consent, no stored password, no API key to your bank. Enclave cannot move money or read a live balance. The blast radius of any compromise is one document.

same input, same bytes

Deterministic

AI drafts the parsers offline, at build time, where it can be reviewed. At runtime the engine is arithmetic. Every figure is replayable, byte for byte, forever.

exit 4

It stops on bad data

Where the arithmetic cannot prove a figure, Enclave stops and names what failed. It does not export an estimate.

The whole run

Four statements, one check.

enclave — zsh
$enclave prove ~/statements/*.pdf --treasury --base GBP
parsebarclays_jun.pdf 41 rows✓ ties
parsehsbc_usd_jun.pdf 129 rows✓ ties
parseibkr_q2.pdf 77 rows✓ ties
parsekraken_jun.pdf 18 rows✓ ties
reconopening 4,120.00 + Σ 2,094.10 = closing 6,214.10✓ match
transfersmatched: 14 · receipts written: 214
held1 movement awaiting counter-leg → held.txtHELD
exit 0