Пароль в промпт, cookies вручную или живая сессия: как headless-агенту попасть в приватный дашборд

Три паттерна доступа агента к закрытому SaaS: учётные данные в контексте модели, ручной перенос cookies и изолированная сессия из обычного Chrome. На одной рабочей станции с WSL2 третий путь держит пароли вне LLM. Человек остаётся в живом браузере, где проходят OAuth, passkeys и 2FA. Агент читает дашборд в изолированном headless-рантайме.
Зачем агенту «живой» логин, а не ключ из документации
Headless-рантайм открывает страницы, но не проходит то, что человек делает каждый день: Google OAuth, корпоративный SSO, passkeys, двухфакторку. Агенту при этом нужны приватные дашборды, не публичные API: биллинг AWS, внутренний портал, квоты SaaS.
Пароли и API-токены в промптах или .env дают постоянный неограниченный доступ. Ручное копирование cookies быстро устаревает. «Сырой» CDP поверх основного браузера тащит весь профиль пользователя. Session Bridge разводит роли: человек логинится в Chrome, Edge или Comet. Агент получает изолированный headless-рантайм с сессией целевого origin.
Как устроен Lightpanda Session Bridge
Связка open-source под MIT: Chrome-расширение Manifest V3, локальный loopback-relay и headless-браузер Lightpanda (Zig + V8), заточенный под AI-автоматизацию. Поток данных: живой браузер → расширение (cookies только активного origin) → POST на 127.0.0.1:8765 → relay → WebSocket CDP → Lightpanda → Python SDK агента.
Расширение «Quota Glass»
Разрешения MV3: activeTab, cookies, storage. По клику Sync Tab извлекаются cookies только для активного origin, нормализуются и упаковываются в transfer envelope. При первом запуске срабатывает auto-pairing: POST /v1/bootstrap к локальному relay, shared cryptographic token сохраняется в isolated storage без ручного копирования.
Hardened loopback-relay
relay/server.py слушает только 127.0.0.1:8765. Relay проверяет origin, нормализует cookie (__Host-, __Secure-, RFC 6265bis) и конвертирует sameSite, например lax → Lax, под требования Lightpanda CDP. Иначе прилетает -31998 InvalidEnumTag. Дальше cookies уходят в Lightpanda по CDP WebSocket. Запросы к relay идут с X-Bridge-Token и CORS-check.
Headless Lightpanda и агентский SDK
Lightpanda поднимается в WSL2 на 127.0.0.1:9222, изолированно от Windows-хоста. Агент читает данные через bundled Python SDK lightpanda_client.py. Подключение к CDP, attach/create страницы с синхронизированной сессией, evaluate() внутри аутентифицированного контекста (профиль пользователя, квоты, CSRF-токен с dashboard).
Установка: git clone https://github.com/Raknaos/lightpanda-session-bridge.git, pip install -r requirements.txt. Скрипты для Windows: ./scripts/start-lightpanda.ps1 (CDP на 127.0.0.1:9222) и ./scripts/start-relay.ps1 (relay на 127.0.0.1:8765). Расширение загружается Load unpacked из папки extension/.
Пароли и cookies не уходят в LLM
Relay не логирует имена и значения cookies. LLM не видит credentials. В рантайм попадает только результат evaluate() в уже аутентифицированном контексте.
| Мера | Что даёт агентному стеку |
|---|---|
| Zero logging | Cookies не пишутся в stdout, на диск и в history |
| Loopback only | Жёсткая привязка к 127.0.0.1 |
| IdP blacklist | Отклоняются transfers на accounts.google.com, login.microsoftonline.com, appleid.apple.com, github.com, auth0.com |
| Anti-SSRF | Целевой домен резолвится в публичный IPv4/IPv6, отсекаются localhost, 127.0.0.0/8, private subnets, nip.io, DNS cache 60 секунд |
| Тесты | 9 automated security test suites (private IP, CDP payload, token enforcement) |
OAuth, passkeys и обычный логин идут по одному паттерну: человек проходит полный login-flow в обычном браузере. Расширение синхронизирует cookies целевого origin после Sync Session. Headless не имитирует биометрию и authenticator app.
Сессия короче пароля по сроку жизни: cookie отзывается при logout в основном браузере и ограничена одним origin.
Ограничения на локальной dev-машине
Три жёстких ограничения стека:
- Человек в цикле: Sync вручную раз на сессию. Паттерн для контролируемых сценариев, не для безголовых серверных ферм с нуля.
- Только локальная машина: relay отказывает remote. Браузер и скрипт агента на одной рабочей станции.
- Zig / WSL2: Lightpanda «most smoothly» на Linux/WSL2. PowerShell-скрипты автоматизируют связку Windows + WSL2.
Lightpanda называют «ultra-fast» и «blindingly fast» с «tiny memory footprints compared to full Chromium». Цифр latency и RAM в сравнении с Playwright, Puppeteer или полным Chromium нет.
GitHub Releases: v0.3.4 (zip). Landing: raknaos.github.io/lightpanda-session-bridge.
Порядок запуска на соло-станции
- Поднять relay (
127.0.0.1:8765) и Lightpanda CDP (127.0.0.1:9222в WSL2). - Загрузить расширение unpacked, дождаться auto-pair при открытом popup.
- Залогиниться в целевой SaaS в обычном браузере (OAuth, passkey, 2FA) и нажать Sync Tab для нужного origin.
- В
lightpanda_client.pyподключиться к CDP и проверитьevaluate()на странице, которая без сессии отдала бы 401.
Живой логин в Chrome, headless-чтение dashboard. Пароль не попадает в system prompt и traces. Security review продакшена это не заменяет. На одной dev-машине с WSL2 паттерн собран целиком.
Источники
- @raknaos, Handing Real Logins to Headless AI Agents: Building the Lightpanda Session Bridge, доступ 2026-09-08 (UTC)
- GitHub: Raknaos/lightpanda-session-bridge, доступ 2026-09-08 (UTC)