jev-browser-use

Fast browser QA for pi: TypeSafe Jev picks every click through Jev Ultrafast, you supply the text and the pass condition, the page is checked independently.

Packages

Package details

skill

Install jev-browser-use from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:jev-browser-use
Package
jev-browser-use
Version
0.4.0
Published
Sep 28, 2026
Downloads
128/mo · 128/wk
Author
damian87
License
MIT
Types
skill
Size
47.7 KB
Dependencies
0 dependencies · 0 peers
Pi manifest JSON
{
  "skills": [
    "./skills"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

jev-browser-use

Fast browser QA from Claude Code or pi. You write the goal, the text to type and what counts as a pass. TypeSafe Jev picks every click through Jev Ultrafast. The runner checks the final page itself, because the agent saying DONE proves nothing.

python3 skills/jev-browser-use/scripts/jev_browser_agent.py \
  --url https://en.wikipedia.org/wiki/Main_Page \
  --goal "Use the search box to find and open the article about the Rosetta Stone." \
  --allow-hosts wikipedia.org --expect 'Rosetta Stone' \
  --text "Search Wikipedia=Rosetta Stone" --json
typesafe: present(len=107) model=jev-latest
text helper: (absent) model=google/gemini-2.5-flash base=https://openrouter.ai/api/v1
  browser: our own Chrome (pid=906154, port=36173, throwaway profile) — closed on exit
  tick  1     867 ms  actions=0  status=ready  last=-
  tick  2    1303 ms  actions=0  status=ready  last=-
  tick  3    1780 ms  actions=1  status=ready  last=fill
  tick  4    2666 ms  actions=2  status=ready  last=click
  tick  5    3433 ms  actions=2  status=ready  last=click
  tick  6    3953 ms  actions=2  status=done  last=click
  final_url: https://en.wikipedia.org/wiki/Rosetta_Stone
  independent check for 'Rosetta Stone': PASS

That run is real (2026-09-23, jev-latest). The key came from .env, and no text model was involved.

What it gives you

  • Jev picks, you type. Jev chooses which field to type into. --text 'LABEL=VALUE' (repeatable) supplies the value: an exact label match first, otherwise the one label contained in the field's label, ignoring case. No text model is called, and the value never leaves your machine.
  • It stops instead of guessing. If Jev picks a field you didn't name, the run stops before typing and reports "needs_text": "<field label>". Re-run with that label.
  • Its own browser. It launches a headless Chrome on a throwaway profile and closes it on exit. Your everyday browser is never attached to.
  • Guard rails. --allow-hosts aborts the run the moment the page leaves the allowlist. --max-ticks caps the number of Jev calls.
  • Risky clicks are refused. By default, clicks labelled send, submit, pay, buy, checkout, delete, publish and the like never reach the browser. The run stops and reports blocked_click instead. Tested on a local form whose goal said to press Send: the guarded run made 0 requests, and the control run with --never-click '' submitted.
  • An independent pass. --expect must appear in the live title, <h1> or URL. For forms, --expect-field 'LABEL=VALUE' reads the live field values instead. Exit codes: 0 pass, 4 not verified, 5 left the allowlist, 2 refused to start.
  • Waits for real pages. It waits for the page to stop changing before the first decision, and for a scroll to actually land before Jev looks again. Without this, a GoDaddy-built site failed 5 of 5 runs; with it, 3 of 3 passed.

Install

Claude Code

/plugin marketplace add damian87x/jev-browser-use
/plugin install jev-browser-use@jev-browser-use

For a single session: claude --plugin-dir /path/to/jev-browser-use. The skill is /jev-browser-use:jev-browser-use.

pi

pi install npm:jev-browser-use                           # user-wide, from npm
pi install git:github.com/damian87x/jev-browser-use      # or straight from GitHub
pi install -l git:github.com/damian87x/jev-browser-use   # this project only

Headless pi -p with a project-local (-l) install needs -a to trust the project's files. Without it, pi waits silently on the trust prompt.

Once per machine, for both

git clone https://github.com/browser-use/jev-ultrafast ~/jev-ultrafast
(cd ~/jev-ultrafast && uv sync)          # or set JEV_ULTRAFAST_REPO to another checkout

You also need Chrome or Chromium; set BH_CHROME_PATH if it isn't found on its own.

The Jev key (console), first match wins:

  1. TYPESAFE_API_KEY in the environment
  2. TYPESAFE_API_KEY= in the nearest .env at or above the working directory (keep it gitignored)
  3. ~/.pi/agent/secrets/typesafe_api_key
  4. macOS Keychain, service Hermes TypeSafe API

A text-model key (TEXT_MODEL_API_KEY, or OPENROUTER_API_KEY) is optional. It's used only for fields you didn't name with --text.

Measured on a real site (2026-09-24)

This is the contact form on autonoxis.com, a GoDaddy-built site with a cookie banner that blocks scrolling. Jev accepted the banner, scrolled, filled Name, Email and Message, then chose DONE: 5 actions in 6–8 decision ticks (jev-1.13.0, ~220–660 ms per call), 3 of 3 runs, all confirmed by --expect-field. It never pressed Send. With one expected value deliberately wrong, the same run failed with exit 4. With an invalid key, TypeSafe returned 401 and zero actions ran.

Limits

These come from Jev Ultrafast's DOM reader: no shadow roots, iframes, canvas, file uploads or pop-up tabs. A canvas game won't work; use Playwright for that. Don't point it at pages that show passwords, payment details or customer records.

Benchmark

bench/head_to_head.py runs the same flows through /qa-browse twice: once on the Jev fast path, once on the plain playwright-cli loop. It records verdict, path, wall time, Claude cost and the agent's final text for each run. bench/summarize.py turns those rows into a table. Measured results and notes are in bench/RESULTS.md. The benchmark makes live, paid claude -p calls; the tests never do.

Development

python3 -m unittest discover -s tests    # offline; no browser, no paid calls

Credits

Derived from the jev-browser-use skill in hermes-jev-skills by Steve Darlow (MIT). Jev Ultrafast is by Browser Use (MIT) and is not bundled. See NOTICE.