Before you start
Veil has two parts. You need both:
- The Chrome extension — this is what monitors your input fields and shows the highlights.
- The local GLiNER2 server — a small Python process that runs the NER model on your machine.
If the server isn’t running, the extension falls back to regex-only detection. That still catches emails, phone numbers, SSNs, and API keys — just not names, organisations, or addresses. For full coverage, you want both running.
Requirements
| Tool | Version |
|---|---|
| Google Chrome (or any Chromium-based browser) | 120 or later |
| Python | 3.10 or later |
| Node.js | 18 or later |
| Disk space for the model weights | ~400 MB |
Step 1 — Clone the repository
git clone https://github.com/nishikantmandal007/Veil.git
cd Veil
That’s all you need from GitHub. Everything else runs from inside this folder.
Step 2 — Set up the Python environment
This creates a virtual environment and installs the GLiNER2 dependencies. It only needs to happen once.
npm run setup
Then download the model weights. This is a one-time download of about 400 MB:
npm run download-gliner2
Once that’s done, start the server:
npm run run-gliner2
Leave that terminal window open. You’ll see a message when the server is ready. The server binds to 127.0.0.1:8765 — loopback only, not accessible from the network.
Tip: If you’d rather have the model load on the first scan request (faster startup, slower first detection), use
npm run run-gliner2-lazyinstead.
Step 3 — Load the extension in Chrome
- Open Chrome and go to
chrome://extensions - Turn on Developer mode using the toggle in the top-right corner
- Click Load unpacked
- Navigate to the
Veilfolder you cloned and select theextension/subfolder — not the root of the repo - The Veil shield icon appears in your toolbar
Pin it for easy access. That’s it — the extension is installed.
Step 4 — Verify it’s working
Open ChatGPT, Claude, or Gemini and type something into the message box. Try a name, an email address, or a phone number.
Within about a second of you stopping typing, Veil should highlight the detected PII directly in the text field. If you see the highlights, everything is working.
If nothing appears, click the Veil icon in your toolbar and check the server status indicator. If it shows the server as unreachable, go back to the terminal where you ran npm run run-gliner2 and make sure it started without errors.
Autostart (optional)
If you’d rather not manually start the server every time you boot your machine, Veil can set that up for you.
Linux:
npm run install-autostart-linux
macOS and Windows — autostart scripts are in progress. Check the releases page for the latest.
To remove autostart on Linux:
npm run remove-autostart-linux
Keeping Veil up to date
git pull origin main
npm run setup
Then go to chrome://extensions and click the reload button on the Veil extension card. The model weights don’t need to be re-downloaded unless the model version changes — check the changelog when updating.
Troubleshooting
| What you’re seeing | What to try |
|---|---|
| No highlights in ChatGPT | Check the Veil popup — is the server status green? If not, run npm run run-gliner2 |
| Server crashes immediately on start | Run npm run setup again. A dependency may have failed to install the first time |
Extension not appearing in chrome://extensions |
Make sure you selected the extension/ subfolder, not the top-level repo folder |
| First scan takes 10+ seconds | Normal behaviour when using --lazy-load. The model loads on first use and is fast after that |
| Highlights appear but redaction doesn’t work | Refresh the page and try again. Some sites override the DOM in ways that require a fresh attach |
If you’re still stuck, open an issue on GitHub. Include the browser console output from the tab where detection isn’t working — that’s usually enough to diagnose the problem.