PrivateRoute

A local privacy proxy

The model reads stand‑ins.
You read the truth.

PrivateRoute runs on this machine, between your programs and the AI API. Names, organisations, phone numbers and bank details are replaced before a request leaves the computer — and restored in the answer.

Nothing leaves this machine to read this page.

01

One message, three points of view

The model works with stand-ins from beginning to end. You see your real values throughout. Which stand-in belongs to whom never leaves this computer.

02

Three steps, no migration

Step 1

Start it

One command on the machine that already holds the data. Nothing is uploaded, nothing is registered anywhere.

python -m privateroute
Step 2

Point your tools at it

PrivateRoute speaks the same interface as the real API, so an existing client needs one changed address.

base_url = "http://127.0.0.1:8787"
Step 3

Work as before

Everything behaves as it did. Under each message you can open what was actually transmitted, and check it.

no other change required
03

Built so you can check it, not just believe it

The mapping stays here

Which stand-in belongs to which person exists only in this machine’s memory, for the length of one request. It is never stored, never transmitted.

Visible on every message

Each message carries a record of exactly what the API received. Open it on any turn, including old ones, and read the request that went out.

It fails closed

Before anything is sent, the outgoing request is scanned again for your original values. If one survived, the request is refused rather than forwarded.

An audit trail worth keeping

An append-only record of which categories were replaced and how many — never the values themselves, and never the stand-ins.

Stand-ins keep their shape

A surrogate bank account passes its own checksum, a phone number keeps its punctuation, a first name keeps its gender where recognised. The model can still reason about the text.

04

What it does not do

*

It only covers what passes through it

Data pasted into someone else’s web interface alongside it is not protected. The proxy has to be in the path.

*

Name detection is statistical

It will not catch every name with certainty. That is why the interface shows what was transmitted on every message — check it.

*

Pseudonymisation is not anonymisation

Under the GDPR these are different things. This does not replace a data processing agreement with your API provider.

05

The questions worth asking first

Does the model still understand my request?

Stand-ins keep the shape of what they replace, so the text stays coherent: titles, legal forms and descriptors pass through unchanged, and the answer does not come back about the wrong person.

Where are my conversations stored?

Nowhere on a server. They live in your browser session and disappear when the tab closes. The database on this machine holds accounts and sign-in sessions, nothing else.

Do I still need an agreement with my API provider?

Yes. Pseudonymised data is still personal data under the GDPR, and context alone can re-identify someone. Treat this as data minimisation and defence in depth, not as a substitute for the paperwork.

Which API does it work with?

It speaks the Anthropic Messages API, including streaming and tool calls, and forwards anything it does not need to touch untouched. Point the upstream address elsewhere and it forwards there instead.

Ready when you are

The first account you create administers this instance. Everything runs locally; nothing is signed up for anywhere.