jev-ultrafast README

The project's README from github.com/browser-use/jev-ultrafast. As one markdown file: README.md.

Jev Ultrafast · Browser Use × TypeSafe

Jev Ultrafast ⚡

[!IMPORTANT] The Browser Use Cloud waitlist is open. Get early access to ultrafast browser agents in the cloud. Join the waitlist →

A browser agent with a dynamic, indexed action space.

Give it one goal. TypeSafe's Jev picks an operation and an element. A small LLM writes text only when the operation is TYPE_TEXT.

Zürich → London on Google Flights in 7.1 seconds. One natural-language goal, actual text generation, and loading waits included.

A real Google Flights search at 1× speed, with generated city names and dynamic operation/target decisions

Watch the MP4 · Measurements · Read the loop

The action space

Every observation produces a new element table:

[1] button    Change ticket type · Round trip
[2] combobox  Where from?        · San Francisco
[3] combobox  Where to?          · empty
[4] textbox   Departure          · empty
...

The operations are CLICK, TYPE_TEXT, SELECT, SCROLL_UP, SCROLL_DOWN, WAIT, DONE, and BLOCKED. Only supported operations and targets are offered.

                      one TypeSafe request
                     ┌───────────────────────────┐
page → element table → operation                 │
                     │ click_target              │
                     │ type_text_target          │
                     │ select_target, if present │
                     └─────────────┬─────────────┘
                         use the matching target
                                   │
                    CLICK [7] ─────┤──→ browser
                TYPE_TEXT [3] ─────┘
                          ↓
                   small LLM → text → browser

Target questions are speculative. If the operation is CLICK, only click_target can execute. Two decisions, one network round trip. Each target head contains only compatible elements. Native dropdown choices carry an observed element/option index.

There are no site-specific action scripts or prepared field strings in the policy. The Flights example supplies a goal and independently verifies the outcome. The screenshot renderer adds labels afterward; it does not drive the browser.

Try it

git clone https://github.com/browser-use/jev-ultrafast.git
cd jev-ultrafast
uv sync
cp .env.example .env
# Add TYPESAFE_API_KEY and TEXT_MODEL_API_KEY.
uv run jev

Open http://127.0.0.1:8766 and click Start demo → Run automatically. The inspector shows numbered elements, operation probabilities, target probabilities, and executed actions. Choose next pauses before execution.

Chrome connects through Browser Harness, installed by uv sync. Run uv run browser-harness --doctor if it needs connecting. Allow remote debugging in Chrome when prompted.

TEXT_MODEL_API_KEY is an OpenRouter key in the example configuration. The current demo uses inception/mercury-2.5 with reasoning disabled. Gemini, GLM, and DeepSeek can also use the OpenAI-compatible text helper; configure the appropriate model, endpoint, and reasoning setting.

Use the library

from jev_ultrafast import Agent

with Agent(
    "https://www.google.com/travel/flights?hl=en",
    "Find one-way flights from Zurich to London on September 20, 2026, "
    "for one adult in economy. Stop when matching flight options are visible.",
) as agent:
    for state in agent.run():
        print(state["elapsed_ms"], state["status"])

Run with uv run --env-file .env python your_script.py. The same policy can run a different task:

uv run --env-file .env python examples/run.py \
  --url https://en.wikipedia.org/wiki/Main_Page \
  --goal 'Find and open the Wikipedia article about Gödel’s incompleteness theorems.'

uv run --env-file .env python examples/flights.py --keep-open performs the flight search, checks the actual route/date/results, and saves its trace. It does not select or book a flight.

Why it moves

Every executed target is resolved from an observed node. The executor rechecks page freshness and click occlusion. Model output never becomes selectors, coordinates, shell commands, or executable JavaScript. Text-helper output must parse as a small JSON object before typing.

Small enough to read

File Job
agent.py The complete loop and text-helper handoff
snapshot.js Atomic DOM snapshot, indexed controls, freshness guards
browser.py Browser connection, current geometry, execution
model.py Dynamic operation/target heads and text generation
questions.py Model instructions
demo.py Local inspector

Evidence and limits

The current video is a 7,073 ms Google Flights run. Timing starts after initial page observation and includes model calls, generated text, browser work, stale decisions, and loading waits. A fresh independent check verifies the one-way setting, Zürich, London, September 20, 2026, and visible flight options. The video plays at 1×, with no opening hold and a 0.5-second final hold.

In six alternating runs with identical models and settings, both versions passed 3/3. Median task time went from 9.450 s → 7.092 s, a 25% reduction; median browser protocol calls went from 1,092 → 101. This is three repeats of one task on one browser profile, not a general reliability benchmark.

The same policy opened the requested Wikipedia article in 2.798 s and passed a local hotel search/filter task in 1.896 s. Runs, failures, source hashes, and measurement boundaries are in performance.md.

A DONE choice still requires independent outcome verification. The DOM reader handles common HTML and ARIA controls, not the full accessible-name specification. Shadow roots, frames, canvas, uploads, pop-up tabs, nested scrolling, and arbitrary keyboard widgets remain outside this MVP. Owned tabs share the existing Chrome profile.

Development

uv run ruff check .
uv run pytest
node --check jev_ultrafast/static/app.js
node --check jev_ultrafast/snapshot.js
uv build

Tests are offline. uv run python scripts/check_guards.py checks real controls in a local browser without model calls. Live examples and recording scripts make paid API calls. scripts/record_flights.py <new-folder> captures original browser timestamps; scripts/render_demo.py <recording-folder> renders that verified run at 1× and crops out the Google account strip. Credentials and raw traces stay ignored.


Browser Use · Browser Harness · TypeSafe speculative fan-out

jev-ultrafast (browser-use/jev-ultrafast)

Searching Database…

这是什么?一个拥有动态、可索引操作空间的浏览器智能体:你只需给它一个自然语言目标,它会自己挑选每一步操作和目标元素——例如,一次从苏黎世到伦敦的 Google Flights 搜索,大约 7 秒就完成了。
它是做好的应用,还是一个可以从我自己的代码里调用的库?两者都是。本地演示检查器只需点一下按钮就能完整跑一遍任务,并把每个决策可视化;同一套策略也可以通过 uv run 在你自己的 Python 脚本中驱动。
我该怎么把它跑起来?用 uv sync 安装依赖(这也会安装 Browser Harness),打开演示页面并点击 Start demo → Run automatically,然后在 Chrome 弹出提示时允许远程调试。如果连接断开,运行 uv run browser-harness --doctor。
我需要特定的模型或 API 密钥吗?你需要在 TEXTMODELAPIKEY 中填入一个 OpenRouter 密钥。演示使用 'inception/mercury-2.5' 并关闭了推理功能;通过 OpenAI 兼容的文本辅助工具,Gemini、GLM 和 DeepSeek 也都能用。
有没有它目前还处理不了的网站或页面功能?这是一个 MVP:DOM 读取器支持常见的 HTML 和 ARIA 控件,还不支持完整的 accessible-name 规范。Shadow roots、frame、canvas、文件上传、弹出的标签页、嵌套滚动和任意键盘控件都暂不支持。
它会驱动我自己的 Chrome,使用我已登录的账号吗?会。智能体使用的标签页共享你现有的 Chrome 配置文件,通过 Browser Harness 连接,并使用你在 Chrome 中允许的远程调试。
智能体可以在页面上执行哪些操作?八种操作:CLICK、TYPETEXT、SELECT、SCROLLUP、SCROLLDOWN、WAIT、DONE 和 BLOCKED。操作和目标元素在一次网络往返中同时选定,只有当操作是 TYPETEXT 时,才会由一个小型 LLM 生成文本。
为什么它比典型的基于截图的浏览器智能体更快?每个决策周期只发一次模型请求,用结构化的 DOM 状态代替截图,每个原子快照只调用一次浏览器,等待时间上限约为 200 毫秒,而且只把可见文本发给模型。焦点模拟让后台标签页持续渲染,Chrome 就不会限制它们。
那个 7 秒的演示视频是真实且未经剪辑的吗?是的——它以 1 倍速播放,开头没有停顿,计时从最初的页面观察之后开始,所以模型调用、生成的文本、浏览器操作和加载等待全部包含在内。还会进行一次全新的独立检查,验证航线、日期和可见的航班选项。
它会自己预订或购买东西吗?不会——示例航班任务只执行搜索,核对实际的航线、日期和结果,并保存一条 trace;它不会选择或预订航班。即使是 DONE 操作,也仍然需要独立的结果验证。
Size
4.3 MB
Stars
23.2K
Updated
CommitSep 18
Age
1mo
Commits · 90 Days