跳到正文

vlad-terin

jev-browser

Jev-powered element selection for your agent’s existing computer-use tools

README 已保存到本站,可直接阅读

Documentation snapshot

README 快照

这篇是英文原文

下面正文是项目自己的英文 README。想读全文就用浏览器自带的整页翻译: Chrome / Edge 点地址栏右侧的翻译图标,或用右键菜单里的「翻译成中文」; 手机浏览器一般在菜单里。

本页保存的是公开项目资料快照,阅读过程不需要连接 GitHub。

Jev Browser

An agent skill and runtime that uses Jev to select browser actions through your existing tools.

Your agent plans the task once. Jev selects elements inside a continuous observation, action and verification loop—without an agent turn between every step.

For multi-step navigation, the agent supplies concise directional guidance: useful concepts or categories to move toward and ambiguities to avoid. Jev chooses the actual observed links. Pass that guidance once with the task; no extra planning call is required at each hop. See the WikiRace scenario and workflow for recorded examples.

Examples

Excalidraw drawing:

https://github.com/user-attachments/assets/2e456743-96d5-4ad9-8ca3-97f7b6ed11f2

Quick start

The tested setup is Codex with compatible browser tools, Node.js 22+, and a TypeSafe API key. Jev Browser supplies the skill and runtime; your agent supplies browser access.

Install or update the Codex integration from this repository:

npm run install:codex

Then paste this into Codex:

Install https://github.com/vlad-terin/jev-browser for Codex.
Check Node.js 22+, compatible browser tools and TYPESAFE_API_KEY first.
Keep the key in my local environment; never print it or put it in chat.
Read the installer, run npm test, then run npm run install:codex.
Load the jev-browser skill
and test a read-only navigation using the continuous runner.
Report runner time separately from setup and planning.

Reload skills or start a new session if needed. Then ask:

Use jev-browser to browse Hacker News, filter to the last month, and open the first article.

Manual installation · Other agents · Make Jev the default

How it works

Agent prepares a bounded plan
  → snapshot → Jev selects → browser acts → verify → next step
  → final result and timing

The runner returns control to the agent when a step needs help. It records selection, observation, action and total runner time. Setup and planning are measured separately.

Codex + CUA integration

The installed Codex runtime exposes one composed entry point, createCodexCuaSession(...). It keeps Jev’s semantic choice loop and Codex’s physical interaction layer together, while resolving TYPESAFE_API_KEY inside the local Node runtime rather than copying it into the CUA REPL.

var { createCodexCuaSession } =
  await import('file:///ABSOLUTE_SKILL_DIR/runtime/src/index.mjs');
var codexBrowser = {
  tabs: { new: () => cua.createBrowserTab('chrome', undefined, { sessionName: '⚡ Jev' }) }
};
var jevCua = await createCodexCuaSession({ browser: codexBrowser });

jevCua.workflow(...) runs a bounded continuous workflow. Jev chooses an observed semantic target for target-relative actions; CUA executes it and the runner verifies an independent postcondition. jevCua.wikiRace(...) uses that same configured session for bounded concurrent navigation jobs.

First-class CUA actions

The CUA adapter covers the interactions that ordinary link traversal cannot:

ActionIntended use
click, setValue, selectTextSemantic control and editable-cell interaction
secondaryAction, scrollAccessibility actions and target-relative scrolling
paste, typeText, pressKeyFocused editor input, clipboard workflows, shortcuts
dragCoordinate range selection and custom-grid manipulation

Direct focus/coordinate actions intentionally do not ask Jev to invent an element choice. For target-relative actions, the adapter re-observes the AX snapshot and rejects stale selections before CUA dispatches input. This is an integration layer, not a claim that the link-navigation evaluation below measures spreadsheet, drawing-canvas, or arbitrary desktop-app reliability.

Token and choice limits

Small snapshots use one request. Larger snapshots automatically split page text and element choices, run up to six requests in parallel, then compare shortlisted candidates in a final call. Token-limit rejections trigger bounded subdivision.

TypeSafe’s Choice primitive allows 255 options; we reserve one for “none.” Token sizing is estimated, and splitting adds calls and can lose cross-chunk context. Configuration and details.

Compatibility

Experimental. The continuous browser adapter is tested with Codex’s browser runtime. The CUA adapter supports the first-class primitives above for spreadsheet and custom-grid work. Claude Code has a skill installer and selection CLI; its continuous loop needs compatible adapter wiring. Other agents can integrate through the same interfaces.

The Codex adapter supports bounded multi-tab workflows with named tabs, link opening, tab switching, and destination verification (12 workflow tabs by default, configurable). Existing single-tab calls still work. Visual-only controls and unexpected script-created popups may need host assistance. Page text is sent to TypeSafe.

The optional global CLI returns selections; it does not install an agent skill or browser. CLI installation and agent support.

Recorded live navigation evaluation

Latest available results per website are shown below. Wikipedia now shows the directional rerun: 20/20 completed, one tab at concurrency 1. The other 19 websites retain their original concurrency-3 results; no new runs were performed for them.

Every website links to its scenario, workflow, exact goal and recorded trial routes. Timing and step medians describe successful runs. Steps are observed verified link hops, not proven shortest paths. Token totals cover all attempts in that row and exclude Codex usage; Not captured means unavailable, not zero.

WebsiteTask destinationCompletedMedianP95Steps: medianJev tokens: input / output
WikipediaThree directional WikiRace pairs20/209.65s20.75s44,479,289 / 511,079
PythonControl-flow tutorial20/201.66s2.23s2Not captured
MDNJavaScript Functions guide20/202.09s3.56s1Not captured
Node.jsFile-system API14/205.16s8.95s1Not captured
ReactSharing State Between Components20/206.09s8.14s2Not captured
TypeScriptNarrowing20/203.32s4.07s1Not captured
RustWhat Is Ownership?20/201.68s2.89s1Not captured
GoGenerics tutorial20/201.26s2.34s1Not captured
SQLiteSELECT documentation20/202.19s3.61s2Not captured
PostgreSQLSQL-language tutorial20/204.65s5.86s4Not captured
GitRebase manual20/202.12s3.05s1Not captured
GitHub DocsPull requests18/2010.67s18.93s6Not captured
DockerWhat is a container?18/2023.43s27.70s13Not captured
KubernetesPods20/205.73s8.35s3Not captured
VueForm Input Bindings20/202.08s8.63s1Not captured
SvelteOverview20/201.99s2.85s1Not captured
DjangoFirst-app tutorial20/201.54s2.29s1Not captured
FlaskQuickstart20/202.39s3.01s1Not captured
NumPyAbsolute basics20/202.14s4.46s1Not captured
Chrome for DevelopersConsole overview17/265.51s11.39s2Not captured

This table combines separate recorded runs; do not interpret it as a single pooled benchmark or attribute the Wikipedia change to guidance alone. The original 406-attempt benchmark (375 completions, including Wikipedia 8/20) is preserved in historical results. Chrome retains six original target-URL errors in its 17/26 total; the corrected subset completed 17/20.

Full metrics and measurement coverage · Metrics CSV · Scenario index

Documentation

  • Installation, updates and default routing
  • Continuous runner and Codex adapter
  • Other browser tools and normalized snapshots
  • Library API and configuration
  • Recorded live results and per-site statistics
  • Live methodology and limitations

Development

npm test
npm run demo                       # offline
npm pack --dry-run

Powered by TypeSafe’s Jev. MIT licensed.

Official distribution

获取与安装

暂未发现可确认的官方软件包地址

当前 README 快照没有出现 npm、PyPI、Crates.io、pub.dev 等官方包页链接。本站不会根据仓库名称猜测下载地址。

本站不托管项目文件;需要安装时,请以项目维护者发布的官方文档为准。

使用前核验

本站保存公开资料用于阅读,不代表安全审计或功能背书。安装前请核对许可证、依赖来源和发布签名,不要直接运行来源不明的二进制文件或高权限脚本。