jev-ultrafast: Jev Ultrafast: The Browser Agent That Treats Actions Like a Search Problem
By replacing screenshot-heavy loops with a numbered DOM action space, Jev Ultrafast makes browser automation feel closer to indexing than reasoning.

Zürich to London on real Google Flights in 7.1 seconds, $0.0039, page loads included.
- Jev Ultrafast wins by shrinking browser automation into a classification step: pick the action and target, then execute.
- Its speed comes from structure, not bravado, because the model sees a numbered action space instead of raw screenshots.
- The repo splits decision-making from text generation, which keeps expensive reasoning out of the hot path.
- The design is strongest when tasks are structured and repetitive, and weaker when visual ambiguity matters more than DOM clarity.
The shock is not that this repo automates a browser. It is that it treats browser control like a search problem with a small answer set. That changes the whole cost model: fewer tokens, fewer round trips, fewer chances to wander off course.
In that sense, browser-use/jev-ultrafast is less a chatbot wrapped around Chrome and more a control system with a model in the loop. The repo is built to make one good decision quickly, then get out of the way.
The Fastest Part Is Not the Browser
Most browser agents spend their budget on interpretation. They read screenshots, infer structure, and negotiate with uncertainty at every step. Jev Ultrafast cuts that loop down by turning the page into a structured menu before the model gets involved.
A Page Becomes an Action Space
The core pipeline starts in snapshot.js. Instead of shipping a raw DOM tree or a screenshot, it extracts visible semantic state, identifies interactive elements, and assigns stable identities. The result is a compact representation the model can actually reason over quickly.
That move matters because it changes the model's job. It is no longer inventing an action from open-ended context. It is selecting from an indexed list, which is a much friendlier problem for latency and reliability.
Why This Is Faster Than Screenshot Agents
| Dimension | Jev Ultrafast | Screenshot-based agents | Classic automation |
|---|---|---|---|
| Input type | Structured DOM snapshot plus indexed actions | Pixels, screenshots, and often OCR or vision features | Selectors, locators, or direct script calls |
| Decision style | One-shot classification of action and target | Multi-step visual reasoning | Deterministic but non-adaptive |
| Latency profile | Short decision path with fewer model calls | Heavier input and more round trips | Fast once written, slow to adapt |
| Cost profile | Low token usage and minimal fallback generation | Higher token and vision cost | Low inference cost, higher engineering cost |
| Flakiness mode | Page drift and stale state if guards are weak | Visual ambiguity and interpretation errors | Brittle selectors and maintenance churn |
| Best use case | Structured workflows with repetitive choices | Messy pages where visuals matter more than structure | Stable, known flows under direct control |
The argument is not that Jev replaces every other browser tool. It wins when the problem is structured, repetitive, and sensitive to latency. Vision-first agents still have a place when the DOM is missing, misleading, or less useful than the pixels.
Compared with Selenium, Jev is far more adaptive. Compared with Playwright, it is not trying to be a testing API first. Compared with screenshot-based browser agents like Skyvern, it trades some visual resilience for a much tighter decision loop.
The Brain Split: Decision Model vs Text Model
The repo's most important design choice is the split between deciding and typing. model.py asks for the next operation and the target in one pass. Only when the chosen action needs free text does a smaller language model step in.
# Conceptual flow from the repo
observation = snapshot(page)
action = model.choose_action(observation) # operation + target
if action.kind == "TYPE_TEXT":
text = text_model.fill_field(goal, context=observation)
browser.type(action.target, text)
else:
browser.execute(action)
That split is why the repo feels different from a generic agent stack. It does not ask a large model to do everything. It asks the smallest useful model to do the narrowest useful job.
What It Replaces, and What It Does Not
The cleanest comparison is not old versus new. It is pixels versus structure, generation versus classification, and multi-step reasoning versus one-shot choice. That is why the repo feels more like an indexing system than an assistant.
Use Jev Ultrafast when the page is readable as structure, the workflow is known, and speed matters. Use a vision-heavy agent when the task depends on visual layout or the DOM is incomplete. Use Playwright or Selenium when you want deterministic automation and you already know the path.
Surprised by these takes. Are people not getting that this (Jev) can do classification, programmatic branching, real time decision making (e.g. applicable to robotics) an order of magnitude faster and cheaper?
The Bigger Bet
Jev Ultrafast hints at a broader shift in browser automation. The future may not belong to giant models being asked to reason about everything at once. It may belong to small, structured decision loops that classify the next move, verify the state, and execute with almost no ceremony.
That is the real bet behind this repo. Speed is the visible result. The deeper idea is that structured state can make agentic software feel less like improvisation and more like control.