ADR: Browser-Identität und Playwright
- Status: angenommen
- Datum: 2026-07-17
- Issue: #36
- Erweitert: ADR-Browser-Backend
- Quelle: docs/adr/0002-browser-identity-and-playwright.md
Kontext
Neben dem chromedp-Default braucht es realistische Browser-Identität/Stealth ohne caller-supplied JavaScript sowie ein optionales Playwright-Backend ohne Änderung der MCP-Tool-Schemas oder Abschwächung der Netzwerk-Policy.
Entscheidung
Wählbares Backend
browser.backend ist chromedp (Default) oder playwright. Beide erfüllen
browserexec.Executor. MCP-Schemas und Tunnel-Payloads bleiben backend-neutral.
Gemeinsame Identität und Stealth
Repository-eigene Profile (chrome-desktop, mobile-chrome) setzen Viewport,
Locale, Accept-Language, Platform sowie User-Agent/Client-Hints passend zur
gepinnten Chromium-Version. browser_open akzeptiert optionales allowlisted
client_profile.
Bei browser.stealth (Default true, solange Browser aktiv):
- Chromium mit
--headless=newund--disable-blink-features=AutomationControlled; - festes Init-Skript vor Navigation gegen
navigator.webdriveru. ä.; - konsistente User-Agent-/Client-Hints-Overrides.
Stealth umgeht weder http.network_policy, Loopback-Egress, Tab-Limits,
Download-Verbot noch Session-Isolation.
Playwright-Sidecar
Playwright läuft als unprivilegierter Child-Prozess über stdio-JSON-RPC:
- gleiches Chromium
executable_path/ Versions-Pin; - HTTP(S) über den Go-eigenen Loopback-Egress-Proxy;
- ein Tab pro isoliertem Context, Downloads verboten;
- kein CDP-/Playwright-/MCP-Listener an einer Netzwerkschnittstelle.
Folgen
- chromedp bleibt Zero-Extra-Runtime-Default.
- Playwright bringt Node-Supply-Chain und Sidecar-Lifecycle auf dem Proxy-Host.
- Setup-Anleitungen decken Linux, macOS und Windows ab (
setup-help, Browser-Tools-Doku). - Firefox/WebKit bleiben außerhalb des Scope.