e2llm reads the live page as structure and acts on it, in the browser you already use, the session you're already signed in to. Any AI. Any site. Even the pages nobody built to be read.
# Playwright, full access to the machine, opening my own logged-in tab: $ node reach-my-session.js → "This is a private chat. Sign in to request access." # e2llm, same tab, same second: read_page(tabId) → the page. read. done. # The page that matters is the one it cannot reach. We reach it.
The accessibility tree only exists on sites someone was forced to build it for. The real web, legacy and fintech and gov and retail and any intranet, is div soup that will never be marked up. e2llm reads the render, not the markup: salience, occlusion, z-index, real position. What the user sees is what the model sees.
Read, act, and verify every write by re-reading the page. Any MCP client: Claude, ChatGPT, Codex, Grok, Perplexity, Mistral. Every major browser but Safari. Your real cookies, history and sessions. And far cheaper and faster than screenshot or raw-DOM approaches: in our benchmark, a read was roughly 5 to 15KB, compared with roughly 200 to 400KB.
Cloud agents ship your screen to their servers, so the regulated intranet slams the door. Playwright stays inside the perimeter but can't read a page it wasn't scripted for. e2llm does both: cloud-grade page understanding that never leaves your network.
Banks, defense, healthcare, government, critical infrastructure. Decades of intranet apps with no API, and a hard rule against sending a page to anyone's cloud. That combination has had no answer. It has one now.
Capture, MCP server and model all run inside your walls. Nothing is sent out to be read.
It reads the legacy app as it renders. No API, no vendor, no per-screen scripting, no waiting.
Point it at an on-prem or in-VPC model. The brain is yours; e2llm is the eyes and hands.
The pain in every agent thread, "got stuck", "wrong element", "too expensive", "element not found", is not click pain. Click works fine. It's reading pain. Here is what breaks, and what e2llm does instead.
Real pages are unknown: CSS-in-JS hashes, A/B tests, redesigns. The agent has to find the element by meaning, not address it by a path someone wrote in advance.
A modal covers the button and the tree calls both clickable. e2llm knows what overlaps what, and closes the modal first, or acts in the right layer.
The page is alive: lazy loads, a counter that hasn't updated, a re-render. In our benchmark, a read was roughly 5 to 15KB, so re-reading is normal. Nothing dies on "element not found".
Agents don't need a stack trace, they need recovery: what's on the page now, what changed, what's next. State diffs and re-read are first-class.
Perception ≠ agent. Brains are replaceable. The layer under them is not.
This is the layer under it. The layer is the same at every tier; what scales is how much work it does for you.
The whole thing, every client and every action. A monthly usage cap. Enough to prove it on your own tabs.
Start free