jev-max
Jev browser agent that pierces shadow DOM and iframes, adds canvas fallback and full actions, with one Jev request per cycle.
Overview
jev-max is a Python browser agent built on TypeSafe's Jev, aimed at the pages other Jev browser agents cannot see. Its piercing snapshot walks open shadow roots and same-origin iframes into one indexed element table and records cross-origin frames as regions. When no usable element exists, a vision model grounds the instruction to coordinates for a real mouse click.
Each cycle makes one Jev request in which the operation and speculative target heads are decided together. A small LLM writes text only for fill and select steps, so Jev never generates free text. Clicks are occlusion-checked, and an independent Jev check confirms the outcome before the agent stops. The action space covers uploads, drag-and-drop, multi-tab, nested scrolling and native selects. It runs as a Python library or an MCP server for Claude Code, Cursor, Windsurf and Codex.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Which operation should the agent perform next?(inferred) | — |
| Choice | Which indexed element is the target?(inferred) | — |
| Yes / no | Has the goal been achieved (independent DONE check)?(inferred) | yes · no |
How it works
- Take a piercing snapshot of the page into an indexed element table
- One Jev request picks the operation and target element
- A small text model fills text for FILL or SELECT only
- Occlusion-checked action, or vision fallback for canvas
- Independent Jev verification before stopping
Strengths
- Handles shadow DOM, iframes and canvas that other Jev agents miss
- Single decision request per cycle
- Never trusts the agent's own DONE claim
- Works standalone or through MCP
Caveats
- Needs both a Jev key and a separate text-model key
- Vision fallback adds another model dependency
- Cross-origin iframes are only marked, not pierced
Getting started
pip install jev-max && playwright install chromium, copy .env.example to .env with your keys, then jev-max run --url <url> --goal "..."At a glance
- Type
- MCP server
- Status
- beta
- Language
- Python
- Runtime
- Playwright library and MCP server
- Has code
- yes
Use cases and integrations
How curated lists describe it
The Jev browser agent that handles the real web: shadow DOM and iframe piercing, canvas fallback, uploads, multi-tab, MCP for any agent host.
hellogumbo/awesome-jev
Frequently asked questions
What does Jev decide in jev-max?
The next operation and target element each cycle, plus an independent check that the goal was reached.
How is it different from jev-ultrafast?
The README's comparison says it adds shadow DOM and iframe piercing, canvas fallback, uploads, drag-and-drop and multi-tab.
Can I inspect a page without a key?
Yes. jev-max snapshot --url <url> shows the piercing snapshot without any API key.
Related projects
MCP server that takes a whole browser task (URL, goal, checks) in one call and drives Chrome server-side with a decision model.
MCP serverbetaPythonMCP server and libraries that drive Chrome over CDP and hand a decision model like Jev a bounded menu of page actions.
ProjectproductionTypeScriptAgent-plugin browser tool where Jev picks one operation and one row from a numbered page table; a small LLM only writes typed text.
ProjectbetaTypeScriptChrome extension plus MCP server so Claude or Codex can drive your real Chrome, with Jev picking each click in about half a second.
MCP serverbetaTypeScriptMCP server that lets Claude Code or Codex drive real Chrome with Jev picking elements and checking steps, plus safety gates and traces.
MCP serverbetaTypeScriptDrop-in proxy for Playwright MCP that adds Jev page triage, prompt-injection masking, snapshot pruning and risky-action gating.
MCP serverbetaTypeScript