🧭 TabPilot
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
Drive the real Chrome you are already logged into — on macOS, Windows, and Headless Ubuntu 24/7.
---
Most browser MCP servers launch a **fresh, blank browser instance**. That works for scraping static pages, but fails completely on tasks that matter:
- 🚫 **Cloudflare & Bot Shields** immediately flag fresh automation browsers.
- 🚫 **Corporate SSO, Okta, & 2FA** make authenticating from scratch painful or impossible.
- 🚫 **Read-only tab viewers** can only *look* at DOM text, not click or fill forms.
**TabPilot bridges this gap.** It attaches directly to your **existing, logged-in Google Chrome**. Your AI agents (Claude, Cursor, Antigravity, Cline) can read pages with up to **99% token savings**, click elements with authentic mouse events (isTrusted: true), defeat React state caching traps, solve multi-row survey grids, and capture background screenshots without stealing window focus.
Raw Page Dump (eval_js body) ██████████████████████████████████████ 18,000+ tokens
read_tab() (Link-Density) ███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ~1,200 tokens (93% saved)
read_tab(selector) █░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ~350 tokens (98% saved)
query_dom(selector) ▏ ~18 tokens (99.9% saved)
┌───────────────────────────────────────────────────────────────────────────────────┐
│ TRAP 1: React Synthetic Cache │
│ Standard .value = 'x' is ignored by React's internal tracker. │
│ ✅ TabPilot calls native property setters + fires both input and change. │
├───────────────────────────────────────────────────────────────────────────────────┤
│ TRAP 2: Multi-Row Survey Grid Batching │
│ Clicking 25 matrix rows in one JS tick causes React to commit only the last row. │
│ ✅ fill_matrix clicks row-by-row across microtasks with delays, then confirms. │
├───────────────────────────────────────────────────────────────────────────────────┤
│ TRAP 3: Virtual Portals (React-Select, Headless UI) │
│ No exists; options render only after clicking the trigger. │
│ ✅ select_option_ui clicks trigger, awaits portal mount, and selects option. │
└───────────────────────────────────────────────────────────────────────────────────┘
[ Laptop / Client ] ──( Encrypted SSH Pipe )──> [ Remote Ubuntu Server ]
│
▼
[ TabPilot MCP Server ]
│ (CDP 127.0.0.1:9222)
▼
┌───────────────────────────────────────────────────────────────────────────────────┐
│ Managed Systemd User Stack (Restart=always, Linger Enabled) │
│ tabpilot-xvfb.service ──> tabpilot-wm.service ──> tabpilot-chrome.service
│ (Virtual Framebuffer) (Openbox Window Mgr) (Real Chrome + SSO) │
└───────────────────────────────────────────────────────────────────────────────────┘
bash
tabpilot install-stack --memory-high 4G
bash
tabpilot doctor # Run diagnostic suite (Chrome, CDP, fonts, permissions)