How Jev drives a browser

The skill reads the page and lists everything it could click, type into or select. Jev picks one and says how sure it is. The skill does it, then asks again with the new page, until Jev says the goal is done.

Step through a real run below, or run one live. The logic is scripts/core.mjs, the same file the skill runs.

page the page right now

skill what the skill listed

element table
sent with the table
the request, verbatim

Jev what Jev decided

the answers, verbatim

What to notice

The limits of this small implementation are where Jev's shape shows.

One request, several questions

Each request asks for the operation and, speculatively, a target under every operation. Only the head matching the chosen operation is read: two decisions, one round trip.

Jev only sees the table

Not the DOM, not a screenshot. When the login fields were labelled acct and pw, Jev answered BLOCKED 0.31; better labels fixed it.

Jev never writes text

You supply the strings; Jev picks which one goes where. A secret goes only into password fields and never into a request.

Every answer is validated

An answer is a key into the table the skill built. Anything outside it throws, and nothing runs.

255 options per question

So the first 250 controls are offered, with a warning when some were skipped. Hacker News' front page has 227; a product grid needs a narrowing question first.

Stateless, and cheap

Each step is an independent request whose only memory is the recent_actions the skill sends. A few thousand input tokens; output is free.

© 2026 Gerard Rovira · MIT license · code on GitHub · Jev is by TypeSafe