Skip to content
MrJev

Jev Browser Use

Browser skill that splits the work: Jev handles navigation, clicks, toggles and scrolling while the coding agent thinks and verifies. Uses your existing browser connection, with no extra driver.

View on GitHub →

Hands-on review

A Codex browser skill where Jev picks one action from a list code built, and its strongest answer — DONE — only hands control back for a check.

Good for

  • A candidate list code builds, so the model cannot invent an action
  • An origin allowlist, a stale-state check and a no-progress stop, all enforced
  • A confidence floor you cannot configure below 0.55

Watch out for

  • We could not drive the real Codex browser runtime; that half is unverified
  • An open issue reports the provider fetch failing inside Codex's sandbox on macOS
  • No tests and no CI, in a 266-line file whose longest line is 721 characters

Tested Sep 22, 2026 at f14b60e0ae1e · node:24 in Docker with --network none; the real bridge driven against a scripted tab and a decision endpoint of ours

How we reviewed this: the browser half needs Codex with Computer Use attached to Chrome, which we cannot drive, so we say that plainly up front. What we did run is the real bridge.mjs — the whole decision loop — in node:24 with --network none, against a tab object of ours that serves accessibility snapshots and records clicks, and a decision endpoint of ours that answers and logs. Everything between the snapshot and the click is the project’s code. We made no Jev calls and did not exercise a browser.

What it is

A Skill, not an application: a SKILL.md telling Codex how to think about browser work, and a bridge.mjs it calls to get one decision at a time. The split is in the tagline — Jev clicks, Codex thinks and verifies. Navigation, clicks, toggles and scrolling go to the decision model; text entry and the final judgement stay with the coding agent.

The model picks from a list code wrote

The page snapshot is parsed, and candidates are built from it before the model sees anything. What that filter does, on a page with a Password field and two buttons both named Delete:

what we asked for what the model was offered
click Settings, one match on the page Click Settings
click Delete, two controls share the name nothing
click Password, a text field nothing
a type action with text refused: Unsupported action
auto-discovery with keys: ["Enter", "Ctrl+V"] Press Enter only

Ambiguity produces no action rather than a guess. Text fields are never discovered — the comment above that function says so, and the behaviour matches: “Codex supplies and enters text”. Ctrl+V is not in the safe-key set, so it is dropped without comment.

DONE is not done

The four options are the available actions plus DONE, BLOCKED and WAIT. When the model answered DONE at 0.97 confidence, the loop returned:

status=needs_verification   handoff=null   tab=[click 2]

Not “success”. SKILL.md is blunt about it: “Jev returns needs_verification, never a verified pass. Codex must independently check the requested result using fresh browser state.” A model that answers DONE on the very first step, before anything has been clicked, gets the same treatment — we tried it, and the tab recorded no actions at all.

The stops, all of which fired

Every row is a run we drove:

what we did what the loop did clicks
served a page on another origin threw Browser left authorized origins 0
changed the page between snapshot and decision discarded two decisions as stale_state, executed the third 0 then 1
returned a click with no visible effect no_progress after one attempt 1
answered WAIT three times loading_timeout 0
answered BLOCKED blocked, handoff model_blocked 0
capped maxSteps at 3 step_limit 3
served a 24 KB snapshot threw Snapshot too large; narrow the task 0
answered at 0.54 confidence low_confidence, handed back 0

The stale-state check is the one worth copying. The snapshot is re-read after the decision comes back and before the click lands; if the page moved, the decision is thrown away rather than applied to a page that no longer looks like the one it judged.

And the confidence floor is not a suggestion. Asking for minConfidence: 0.2 does not lower the bar — the run is refused outright with Invalid task contract, along with anything that raises maxSteps above 30 or maxMs above 45 seconds.

What it refuses to believe

The response schema is checked harder than anything else we have reviewed in this category:

what the endpoint returned result
probabilities that do not sum to 1 Invalid typesafe decision schema
a winner that is not the argmax rejected
a probability key the criteria never offered rejected
a choice outside the offered set rejected
HTTP 500 decision_error, no retry on a non-transport failure

In every one of those the tab recorded zero clicks. A malformed answer is not a reason to act.

Credentials

The key is read from a dotenv file named by absolute path in ~/.config/jev-browser-use/config.json, and never copied into the skill directory. Before any request, the assembled body is searched for the key itself: we put the key string into the goal text, and the run stopped with Credential detected in model input.

We ran the installer into a scratch home. It wrote the config 0600 inside a 0700 directory, with the credential nowhere in it or in the skill directory; a second install with different settings left the first config untouched; and it refused a non-Jev model, an unsupported provider, a relative dotenv path, a missing file and a directory. redirect: 'error' on the fetch means a redirected endpoint is a failure rather than a new destination for your Bearer token.

What is unverified, and what others are hitting

The README opens with “~5–10× faster browser operations in our EZCollegeApp workflows”. That is the author’s figure from the author’s workflows; we did not run a browser and are not in a position to check it.

Four issues are open two days after release, and the sharpest is #7: the decision call runs inside Codex’s cua_repl, and on the reporter’s macOS build DNS resolution inside that sandbox fails, so the fetch dies before any Jev call. Its reproduction is a four-line dns.lookup that never touches the credential. If you install this and get a transport failure, read that thread first.

There are no tests and no CI. bridge.mjs is 266 lines with a longest line of 721 characters — the validation in decide() is a single boolean expression spanning most of a screen. The logic is right, as far as we could drive it; nothing about the formatting invites the review it deserves.

Verdict

Read this one for the shape even if you do not use Codex. The candidate list, the stale-state re-read, the unlowerable confidence floor and a success answer that only means go and check are the four things browser agents get wrong, and this gets all four right.

Install it only if you are on Codex with Computer Use working, and check issue #7 against your own platform before concluding the skill is broken. For the browser side actually exercised end to end, see jev-ultrafast and typesafe-computer-use; for the same candidate-set discipline in an agent loop, JevLoop.

See how it compares with other tools in Best Jev tools, tested hands-on.

Review updated Sep 22, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.

More in Browser & Computer Use

jev-ultrafast

★ 24k▲ 400

browser-use/jev-ultrafast

Fast browser agent from Browser Use. Jev decides each step and which element to act on; a small model is called only when text needs to be typed. The authors report a full Google Flights search in about 7.1 seconds.

PythonReviewed

agent-desktop

★ 8.5k▲ 6.6k

vercel-labs/agent-desktop

macOS desktop automation over accessibility trees. Since v0.9.2, its jev-desktop scripts let Jev choose which control to operate and which action to take.

RustReviewed

typesafe-computer-use

★ 1.3k▲ 16

awlevin/typesafe-computer-use

macOS computer use without sending screenshots to a large model. The screen is read deterministically and Jev picks the next action.

PythonReviewed

Get new Jev projects every week

New Jev releases, pricing changes, and the best new projects, once a week. No spam; unsubscribe anytime.

Powered by Buttondown. See our privacy policy.