AI Tools News

Jev vs an LLM for browser agents: pick an index, don’t write the click

September 24, 2026 · Browser Use’s Jev Ultrafast asks a typed model for an operation and an element index. A language model writes text only when a field…

Most browser agents ask a language model what to do next, then parse that sentence into a click. browser-use/jev-ultrafast does not. Each observation becomes a numbered table of visible controls. Jev picks an operation and an element index in one request. A small LLM writes text only when the operation is TYPE_TEXT.

That split is the story. It is not a claim that Jev beat Claude, GPT, or Browser Use’s own classic agent on a public benchmark. The numbers below are the project’s, dated from its README and docs/performance.md.

What each loop does

An LLM browser agent observes a screenshot, an accessibility tree, or both, and generates the next action. The runtime turns that text into a browser command. The model can name a control that is not clickable, or invent a selector.

Jev Ultrafast constrains the choice first. The operations are CLICK, TYPE_TEXT, SELECT, SCROLL_UP, SCROLL_DOWN, WAIT, DONE, and BLOCKED. Only operations the current page supports are offered. Each target list contains only elements that fit that operation. If the choice is a click, a type target cannot execute. The executor maps the index back to the observed node and rechecks freshness, geometry, and whether something is covering the control. The model’s output never becomes a selector, a coordinate, or JavaScript.

StepLLM browser agentJev Ultrafast
ObserveScreenshot, accessibility tree, or both.One call. Visible HTML and ARIA controls become a numbered table.
DecideThe model writes the next action, often with a selector or coordinates.One TypeSafe request: an operation and a compatible element index.
TypeThe same model usually writes the string inside the action.A small LLM runs only when the operation is TYPE_TEXT.
FinishThe model says it is done. Many loops trust that sentence.DONE is another typed choice. It still needs an independent check.

The default loop does not look at pixels. Screenshots are for the local inspector. The DOM reader covers common HTML and ARIA controls. It is not the full accessible-name specification.

The speed sheet is Jev versus Jev

Both arms used TypeSafe jev-1.13.0 and inception/mercury-2.5. The change is a DOM snapshot against an earlier accessibility-tree loop: three pairs of one Google Flights task, one Chrome profile, a 1120×780 viewport. Initial navigation is excluded. Both passed 3/3. A two-sided sign test is p = 0.25. Three pairs are too few for a general reliability claim, and they say nothing about an LLM agent that was not in the race.

PairPrior Jev loopOptimized Jev loopVerified
111.214 s6.964 sBoth
28.984 s7.913 sBoth
39.450 s7.092 sBoth
Median9.450 s7.092 s3/3 each

Median task time fell from 9.450 s to 7.092 s, about 25%. Median TypeSafe requests fell from 22 to 17. Median browser protocol calls fell from 1,092 to 101, because the new snapshot reads controls once instead of walking the accessibility tree on every DOM mutation. The protocol-call drop is the number that should change how you budget a batch. The 25% is one task.

The recorded Zürich → London search finished in 7.073 seconds. Timing starts after the first page observation and ends at the accepted DONE. It includes model calls, the generated city names, stale decisions, and Google’s results loading. That run used 17 Jev requests, median latency 178 ms, 10 interactions plus one explicit WAIT, and two text-helper calls: “Zurich” in 581 ms and “London” in 346 ms. OpenRouter billed $0.00006272 for those two calls. The project also reports 90,558 TypeSafe input tokens and 6,325 output tokens, without a TypeSafe dollar total.

The same policy opened a requested Wikipedia article in 2.798 seconds and passed a local hotel search-and-filter fixture in 1.896 seconds. Those are smoke checks, not matched comparisons.

When the LLM agent is still the right tool

Jev is the right default when the page is ordinary HTML and ARIA: search boxes, filters, and forms whose names are already in the DOM. Generation belongs in the one field that needs a string.

It is the wrong default when the control lives in a shadow root, an iframe, a canvas, a file upload, a popup tab, a nested scroller, or a custom keyboard widget. The project lists those as outside this MVP. A payment form inside an iframe is not a task this agent can take. A layout that only makes sense as a picture also needs an agent that looks at pixels.

Either way, do not trust DONE. A valid choice can still be the wrong page. Schema compliance is not correctness. Confirm the result in code.

What to open next

Jev the model, as a typed decision layer rather than a chatbot, is the profile. The older question of Jev versus a generator that emits JSON is Jev vs LLM. The bill is the pricing review. This note is only the browser loop: enumerate the legal actions, ask a fast model for an index, ask a language model for the sentence, and prove the outcome yourself.

Get listed

Put your AI tool in front of people who are already comparing options.

Submit a listing for review. Complete submissions with a live website, pricing, and a clear use case typically go live within 24–72 hours.

Submit a tool