Build1 publisher3 min readPublished
The human still taps the security key, and what crosses to the agent is one origin's cookies, normalized and pushed over 127.0.0.1. The identity provider sits on the relay's blocklist, which is the part worth copying.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Two capital letters do more work here than they should. Chrome emits cookie objects whose `sameSite` field is lowercase, and Lightpanda's CDP handler answers a lowercase `lax` with `-31998 InvalidEnumTag`, so the relay rewrites it to `Lax` on the way through [9]. Know that before you plan on swapping the runtime. Speaking CDP is not a compatibility guarantee at the level of field values, and the relay's normalization table, which also covers the `__Host-` and `__Secure-` prefixes per RFC 6265bis, is where that gap gets paid for [10].
The mechanism I would copy is the destination blocklist. A replicated session cookie is still a bearer token, and the target application is not the worst place it can be sent: the identity provider behind it is usually where a session can be traded for fresh credentials across the rest of the federation. The relay refuses identity-provider hosts and private IPs and holds a DNS cache as part of that check, which is the standard way to stop a hostname resolving to one address when it is validated and another when it is used [8].
Modern targets sit behind Google OAuth, SSO federations, hardware passkeys and biometric 2FA [3], and the alternatives the write-up lists are a password in a `.env` that leaks into LLM context logs and traces, a hand-pasted cookie with no scoping, or raw CDP against your primary browser with other tabs in reach [4]. Against that, the author's case for cookies rests on three properties: they expire, they are scoped to one origin, and logging out of your main browser revokes them [13]. The first two belong to the cookie. The third belongs to the target application's session store, and the bridge cannot supply it; an app that treats logout as a client-side event leaves the copy inside the headless runtime working until expiry. The post does not test that on any named dashboard. In the same way, "the relay never logs a cookie value" [14] is a claim about `relay/server.py` as written, checkable by reading it and by nothing in the architecture.
Adoption cost is small and specific. The extension asks for `activeTab`, `cookies` and `storage` [5], three permissions [17], which is about the narrowest set that can read a session cookie the page's own script cannot. Pairing is automatic: the extension calls `/v1/bootstrap` on first launch and stores a shared token in isolated extension storage [7]. That removes a copy-paste step, and it is the part I would want documented further, because the write-up does not say what happens if something else on the machine calls `/v1/bootstrap` first. Loopback binding is a boundary against the network, not against local processes [6].
Between browser and runtime the cookie crosses two ports and two transports, an HTTP POST to 8765 and a CDP WebSocket to 9222 [16]. The engine at the far end, Lightpanda, is open source and written in Zig with V8 [12], running under WSL2 in the described deployment, with the agent reading through a small Python client [11][15].
This transfers if the dashboards you target scope sessions per origin and a human is around when a session needs refreshing. It also assumes DOM and JS evaluation over CDP is all your agent needs from the browser. Agents expected to run overnight against short-lived federated sessions get nothing from this design; the win is bounded by the window in which someone can click Sync.
Ranked by verification strength, evidence, and original report placement.
Lightpanda Session Bridge is described by its author as an open-source MV3 Chrome extension plus a hardened loopback relay that replicates a live browser session into a local Lightpanda headless runtime via CDP, with zero credentials typed and no secrets exposed to LLMs.
The write-up lists three compromises builders resort to: hardcoding passwords into agent prompts or .env files, which leak into LLM context logs, chat histories and traces; copy-pasting session cookies into configs, which expire quickly and offer no scoping or SSRF protection; and driving the user's primary browser via raw CDP, which risks hijacking other tabs.
On first launch the extension executes an auto-pairing handshake at /v1/bootstrap with the local relay, storing a shared cryptographic token in local isolated storage without manual copy-pasting.
The relay listens exclusively on 127.0.0.1:8765, enforces strict origin matching, and performs IdP and private IP blocking as anti-SSRF measures together with a DNS cache.
The author argues a session cookie is safer than a password because it is ephemeral and expires automatically, can be instantly revoked by logging out of the main browser, and is strictly scoped to a single target origin.
A headless browser cannot tap a hardware security key, answer the authenticator app on a phone, or satisfy a FaceID prompt.
Follow any of these and your For You feed starts watching them — no settings page required.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Wiring is precise, but no one else has checked it
Every specific in this story — ports 8765 and 9222, the three-permission manifest, the -31998 InvalidEnumTag workaround, the five identity roots on the denylist — comes from one dev.to post written by the person who wrote the code. The detail is granular enough that a reader with the repository could confirm most of it in an afternoon, though nobody in our coverage has, and the validation offered ships with the thing it validates.
A launch post exists, but no users show up
A dated announcement is the entire record. We can see that the bridge exists and was published; we see no installs, forks, third-party write-ups, or anyone describing a run of it against a real dashboard, so there is nothing to measure uptake against.
"Zero secrets" overstates the transfer
The no-password part does what it says: the login ritual stays with the human and the agent stack never holds a reusable secret. "Zero secrets exposed to LLMs" is a bigger claim than that, because what lands in the runtime is a live session for the target origin, carrying whatever the user can do there, driven by a model. "Hardened" leans on the author's own suites, and the identity-provider defence is five listed domains rather than a property of identity providers in general.
Builder promoting his own bridge
This is a launch post for the writer's own project on a platform where developers publish themselves, and it doubles as a showcase for Lightpanda, the runtime the bridge cannot work without. The wiring is too specific to be marketing filler, but the adjectives around it — hardened, ultra-fast, live verified — are the builder's, and no editor stood between them and the reader.
Intent is clear, but behaviour is unproven
We can be reasonably sure what the code is meant to do, because it is described down to the port, the header name and the CDP enum casing. How it behaves when something adversarial reaches the relay, or in anyone's hands but the author's, does not follow from one self-published account — which is why our reading sits below the middle.
build
Google's CDN delivered version 1.7.3.0 of an extension it had pulled six months earlier1 publisher
build
In Manifest V3 every message handler is a cold start, and the fix for lost state hides new failures1 publisher
build
Rust's from_str waves through a tenth of the JSON that RFC 8259 says to reject1 publisher
build
A reducer seeded at zero erased a 6,300-cent downside from the frontier summary1 publisher
Publishers with included, body-backed reporting in this cluster.
1 article · September 7, 2026