Browser extension

Use the big chat assistants without handing them Swiss, EU or international identifiers. The extension redacts them before the request leaves your browser and restores them in the reply, so the conversation still reads normally — 100% local, no API key, no server.

Add to Chromev0.3.2 · live and free on the Chrome Web Store · ChatGPT, Gemini and Claude.

Works across

ChatGPTGeminiClaude

One guard, three sites. It hooks the request each app makes to its model — Gemini over XHR, ChatGPT and Claude over fetch — and rewrites the outgoing prompt.

Checksum-only

It matches an identifier only when the regex shape and its check digit agree, so ordinary text is never touched. The exact same detector runs here on this page.

You stay in control

Per-category toggles decide what to block. An activity log records type, time and site only — never the value. The value↔placeholder map never leaves page memory.

The Sovereign Shield options page showing a 'What to block' grid of 20 identifier types — Swiss AHV/AVS, IBAN, credit card and national IDs across Europe, the Americas and Asia — each with its own checkbox
Per-category control — 20 identifier types, each its own toggle; unchecked types pass through untouched.

Prefer to build it yourself? The source is in extension/ — load it unpacked (Developer mode → Load unpacked → extension/dist).

See what stays local — before you send

A live count sits above the chat box and names what the guard will keep local before you hit send — so the redaction is something you watch, not something you take on trust. It reads the composer in page memory only and never touches the network.

The Sovereign Shield pre-send count above the ChatGPT composer, reading '3 items (Credit card, Email, Swiss AHV / AVS) will be kept local when you send'
On ChatGPT: three identifiers flagged to stay local before the prompt is sent.

See it on the wire

A real Gemini session with the guard on. The prompt includes a Swiss AHV number, and the request Gemini actually sent to Google — StreamGenerate, open in DevTools on the right — carries [AHV_1], never the digits. The real number, restored only in your browser, is what you read in the drafted reply on the left. Search the whole network log for the real number and you get zero hits.

A Gemini chat drafting an email that contains a Swiss AHV number, beside Chrome DevTools showing the outgoing StreamGenerate request carries the placeholder [AHV_1] instead of the real number
Left: what you see. Right: what Gemini's servers received — [AHV_1], eight times, in the request the extension rewrote (Initiator: interceptor.js).

Try the detectors

All twenty identifier types the extension can redact — Swiss AHV, IBAN, card, and the Italian, Spanish, French, Dutch, German, Polish, Portuguese, Belgian, UK, Brazilian, South African, Chinese, Canadian and Indian identifiers — checked live, in your browser.

Click a type to load a synthetic, checksum-valid sample, or type your own. Everything runs in your browser — nothing is sent anywhere.

Detected 3

  • AHV / AVS no.756.XXXX.XXXX.97✓ checksum
  • NHS number (UK)nhs:…19✓ checksum
  • CPF (BR)cpf:…35✓ checksum

What the model receives

Client [AHV_1], NHS [NHS_1], CPF [CPF_1] — please summarise the case.

Each identifier is swapped for a stable placeholder before it leaves the page, then restored in the reply. Clean text passes through untouched.