Stealth browser for AI agents — real Chrome over raw CDP, no Playwright/Puppeteer. TypeScript + MCP-native. Passes sannysoft 57/57, bypasses Cloudflare.
FAQ (answers come from our records)
How do I install it?
We did not find an install command for this repository (our install coverage is only about 4%). Check its README or releases page.
Who is it for?
We filed it under these tags: MCP 服务. The tags come from the entry itself, not a taxonomy we imposed.
Who maintains it?
repository acunningham-ship-it/veilbrowser;first catalogued 2026-10-09;last seen 2026-10-16。There is no official certification or quality rating here — we record sources and dates only.
Veil
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
**A stealth automation runtime for AI agents. Drives real Chrome over raw CDP — no Playwright, no Puppeteer, no WebDriver, zero runtime dependencies.**
Built by **HamTek** — we build production-grade AI agents; veil is the proof.
*Veil driving real Chrome: bot.sannysoft.com all-green, then straight through Cloudflare's JS challenge — no patches, no plugins.*
To Instagram, Google, Reddit, Cloudflare — Veil *is* Chrome. Same binary, same
TLS, same JS engine, same canvas/WebGL/font fingerprint a human's browser has. We
don't reimplement the browser (that's Chromium's 20-year, 1000-engineer job, and a
hand-rolled engine is *easier* to fingerprint, not harder). We replace the part that
gets you caught: **the automation layer.**
---
Why not Playwright / Puppeteer?
They're powerful and great for scripted QA. For *agents on hostile sites* they have three structural problems:
| Problem | Playwright/Puppeteer | Veil |
|---|---|---|
| **Detectable** | navigator.webdriver=true, --enable-automation, the Runtime.enable CDP tell, HeadlessChrome UA | webdriver scrubbed, no automation switches, no Runtime.enable, UA + client-hints normalized |
| **Robotic input** | instant teleport clicks, fixed-cadence typing → behavioural detection | curved Bézier mouse paths, eased timing, human keystroke cadence |
| **Brittle for agents** | CSS/XPath selectors that break constantly | accessibility-tree snapshot → stable integer refs; agents never write a selector |
Veil is **dependency-free** — Node 24 / Bun ship a global WebSocket, so the entire
CDP transport is ~120 lines we own. Nothing to patch, nothing to leak.
How Veil compares (honest)
The "real Chrome over raw CDP" idea isn't new — Python's nodriver
pioneered it, and Camoufox (a C++-patched Firefox) scores even
better on pure stealth. Veil isn't claiming to out-stealth them. Its wedge is **where it
lives and how agents use it**:
- **TypeScript-native.** The JS/TS agent ecosystem (Vercel AI SDK, LangChain.js, MCP) has
no strong raw-CDP stealth driver — it's stuck on Playwright + stealth plugins, or
shelling out to Python nodriver. Veil is that missing piece.
- **MCP-native.** Ships an MCP server, so any agent gets stealth browsing as tools with
zero glue.
- **Agent-first, not scraper-first.** Accessibility-tree refs and human input are built for
an LLM driving the browser, not for a scraping script.
- **Does two things the others don't.** Drives the native **"Sign in with Google" (FedCM)**
account chooser over CDP — agents are otherwise walled out of Google-SSO apps entirely —
and **blocks visited sites from port-scanning your localhost/LAN** (on by default). Neither
nodriver, Camoufox, nor Playwright-stealth does either.
Two more that get raised, and where they actually land
Both of these came up when Veil was posted publicly, so they belong here rather than in a
comment thread.
- **Patchright** (Python + Node) — a
patched, drop-in Playwright replacement. It fixes Playwright's launch-flag and JS-surface
leaks: adds --disable-blink-features=AutomationControlled, drops --enable-automation,
corrects navigator.webdriver and the HeadlessChrome UA. Chromium only.
**If you already have Playwright code and want it less detectable, this is the lowest-friction
option and you should probably use it** — it's a dependency swap, not a rewrite.
Where it differs: it is still Playwright underneath, so it **launches its own browser** and
therefore hits the same user-data-dir lock — it cannot attach to a profile you're already
signed into. Attaching isn't a stealth patch, it's a different architecture, and it's the
thing that actually gets you past session-scored sites.
- **Claude for Chrome** — an extension running inside your own
browser. It shares Veil's core insight (use the real browser, inherit the real session) and,
being a genuine extension rather than automation, it isn't fighting bot checks at all.
**If you want a human-in-the-loop assistant in your browser, it's a better fit than a
library.** Where it differs: it isn't programmable. You can't call it from a script, wire it
into CI, run it headless on a server, expose it as MCP tools to your own agent, or control the
fingerprint. Veil is a library your code drives; that's a different job, not a better one.
If you're in Python and just want raw stealth, use nodriver or Camoufox — they're great. If
you have Playwright code already, try Patchright first. If you want an assistant in your own
browser, use Claude for Chrome. **Veil is for TypeScript agents and MCP hosts that need to