A GitHub-ready, production-oriented Ubuntu launcher that runs a real, headful Google Chrome with a persistent profile, optional network-namespace execution, and a local-only CDP endpoint.
The point: because it drives a real Chrome (not headless, not "Chrome for Testing", with no automation flags), websites do not automatically flag it as a bot. An agent can attach over CDP and operate freely on a genuine browser session.
Most automation gets blocked because the browser exposes obvious "tells" (for example Google's "This browser or app may not be secure" page). This launcher avoids those tells:
- No automation flags — does not pass
--enable-automation, sonavigator.webdriverstaysfalse. - Headful, not headless — runs on a real X display, so the User-Agent is a normal
Chrome/...(noHeadlessChrome). - Real Chrome, not "Chrome for Testing" — no testing banner / testing-only fingerprint.
- Persistent real profile — a normal, reused profile carries a believable browser history/session.
The agent never logs in through an automation-controlled browser. A human (or a one-time manual step) signs in on the headful window; afterward the agent attaches to the same real browser via the local CDP endpoint and works on the live session.
cp browser-vpn.env.example browser-vpn.env
nano browser-vpn.env
source browser-vpn.env
./start-browser-vpn.shDo not source browser-vpn.env.example directly in normal use; copy it first and edit the local browser-vpn.env.
- launches a real, headful Chrome on an X display
- reuses an existing healthy CDP endpoint when available
- optionally runs inside a Linux network namespace
- preserves browser session state in a configurable profile directory so an agent can keep operating on a real, logged-in session
- CDP stays loopback-only by default
- do not commit profiles, logs, private notes, tokens, or credentials
- treat the persistent profile as secret material (it holds a real, logged-in session)
- if
BROWSER_NETNSis set, connect automation clients from the same namespace