Open source · Local AI · Zero cloud

Before you hit send,
Veil already knows.

Veil sits in your browser and watches every text field on ChatGPT, Claude, and Gemini. The moment it spots something sensitive — a name, an email, a social security number — it flags it right where you typed it. The AI that does the detecting runs entirely on your own machine.

ChatGPT 4o ▾
GPT
Of course — what changes need to be made to the contract?
Gemini 1.5 Pro ▾
G
I can help with that summary. What format works best for you?
Contract Drafting
C
Happy to draft that. Should I keep the tone formal, matching your previous thread?
Scanning…
3 items detected

Under the hood

Three things happen
when you type

Every keystroke triggers a lightweight detection pipeline that runs entirely on your machine. No round trips, no waiting on a cloud API, no logs.

01

Regex pre-scan

Patterns with a predictable format — emails, SSNs, API keys, phone numbers — are caught instantly by built-in regex rules. No model needed, zero latency.

02

GLiNER2 NER model

For context-dependent PII — names, organisations, addresses — Veil calls a local Python server running GLiNER2. The model sits on your CPU or GPU. Nothing reaches the internet.

03

Merge & highlight

Results from both passes are merged, overlapping spans are resolved, and the detections are rendered as inline highlights right inside the input field — no popups, no dialogs.

Full technical breakdown

What you get

Built for the way people
actually use AI

Veil handles the weird edge cases — rich-text editors, content-editable divs, fast typers, slow models — because that's where real usage happens.

Runs 100% locally

The GLiNER2 model lives on your machine. Your text never touches a third-party server for detection — not even Veil's.

Regex fallback

Even if the local server isn't running, Veil catches emails, phone numbers, API keys, SSNs, and more via fast built-in patterns.

Inline redaction

Click a highlight to replace it with a safe label like [PERSON] or [SSN]. No modal windows. No friction.

Content-editable aware

Works inside Gemini's fancy text box, Notion, and any contenteditable element — not just plain textareas.

Health monitoring

The extension watches the local server and lets you know if it goes down. No silent failures — you always know whether detection is active.

Cross-platform autostart

The local server can start automatically on login on Linux, macOS, and Windows. You set it once and forget about it.


What gets detected

Nine PII types out of the box,
plus custom patterns

GLiNER2 handles the context-dependent stuff. Regex handles the structured stuff. Together they cover the data you really don't want leaking into a model's training corpus.

Person name model
Email address regex
Phone number regex
Physical address model
Social Security Number regex
Credit card number regex
Date of birth model
Location model
Organisation model
OpenAI / AWS API keys regex

Privacy guarantees

The things we'll never do

No cloud calls for detection

Detection runs on GLiNER2, which lives on your machine at 127.0.0.1:8765. That address is loopback-only — physically unreachable from outside your device.

No telemetry, ever

Veil has no analytics, no crash reporting, no usage metrics. We don't know how many people are using it, let alone what they're typing. That's by design.

Keys stay on your device

Any API keys you configure are stored in chrome.storage.local — not synced across devices, not accessible to other extensions, not sent anywhere.

Get started in minutes

Two commands and a
Chrome extension load.

Clone the repo, run the setup script, load the extension in developer mode. That's the whole process.