Redact your prompt before it leaves the browser
A Chrome extension for ChatGPT, Gemini and Claude. Identifiers, API keys and your own terms become placeholders on the way out, and the real values come back in the reply — all inside the page.
- 100% local
- no account
- no analytics
- open source
Type something. Watch what the model would get.
You type
What the provider receivesChatGPTGeminiClaude
Draft a friendly reply: we double-charged card [CARD_1] for CHF 240. Refund to IBAN [IBAN_1], confirm to [EMAIL_1], and put AHV [AHV_1] on the case. It's a [CUSTOM_1] account.
- Credit card
card:…1111✓ checksum - IBAN
CH…57 (21)✓ checksum - Email
h***@bluewin.ch - Swiss AHV / AVS
756.XXXX.XXXX.97✓ checksum - Custom terms
custom rule
Try another identifier type
Detection runs in this tab, from the same source the extension bundles — nothing you type here reaches a network. Every value above is synthetic.
What it catches
20 identifiers
Shape and check digit must agree, so ordinary text is never touched — Swiss AHV, IBAN, cards, and national IDs across Europe, the Americas and Asia.
9 secrets
AWS, OpenAI, Anthropic, Google, GitHub, Slack and Stripe keys, JWTs and PEM private keys — matched on their structured credential shape.
Your own terms
A client name, a code name, a domain, a regex. Or add one from the ready-made library in a click: US SSN, UK NI, internal IPs, hostnames, MAC addresses — and more in the preset library.
Proof, not promises
![The Sovereign Shield inspector open beside a Gemini composer. The 'You typed' pane shows a name, an AHV number, an IBAN, a mobile number, an email and a card number; the 'What the provider receives' pane shows the same text with [AHV_1], [IBAN_1], [PHONE_1], [CARD_1] and the stand-in address alice.morgan@example.org in their place](/ss-inspector-gemini.webp)
The fine print
Where do the real values ever appear?
Three places, all local: the text painted on screen, what you copy from it, and the inspector panel. Never the request, never extension storage, never the activity log — which records type, time and site, and never a value.
Smokescreen: stand-ins instead of [EMAIL_1]
Off by default. With it on, an email or a custom term is sent as a plausible stand-in like alice.morgan@example.org, which reads as ordinary prose to the model. Checksum-validated identifiers never get one — a valid-looking fake AHV or IBAN would be some real person's number.
What happens if a site changes its API?
You get told. The guard hooks each site's real endpoint by name; if your composer drains and no request went through it, a banner says that message was not inspected — and offers to report it in one click. The report carries the hostname, version, build stamp and symptom, and nothing else. It is the extension's only outbound channel, and only if you click.
What it does not do
It guards the prompt you type — not the files you attach, so redact a document before you upload it. Names and street addresses have no checksum and need a named-entity model, so they are deliberately left alone. And it doesn't try to survive deliberate obfuscation: it is the outer, deliberately-dumb layer of a defence-in-depth stack.
Using Gemini? One quirk worth knowing
If a pasted message doesn't send on the first Enter, press it again or click the send arrow. That is Gemini's own editor dropping the first keypress before its send button is ready — it happens with the extension removed too. The guard only rewrites the outgoing request, never the send action.
Build it from source
The source is in extension/ — npm run build, then Developer mode → Load unpacked → extension/dist.
Privacy policy — what is stored, and the one thing that can ever be sent.