Automation & Ops browser-automationplaywrightmcp-servertypesafe-system-onecommand-line-interfaceirreversible-action-guard

Jev Browser

Browser automation in which an LLM sets the goal, Jev chooses the action, and Playwright executes it.

FollowAgents review · FARS-2.1
Use with care
Why not a higher tier: Trust & safety is 16/29, below the 18/29 needed for “Recommended”; the tier is lowered because risk is not averaged away.
75/ 100 5-point scale 3.8 / 5
1 2 3 4 5 6
Per-dimension scores and reasoning
1Trust16 / 29 · 2.8/5

The project clearly identifies itself as unofficial, names TypeSafe System One as an external decision service, and supplies consistent author, repository, and MIT license attribution, justifying full source-attribution credit. CI has read-only contents permission and releases use OIDC instead of a long-lived npm token. Irreversible actions are routed to needs_confirmation and require explicit allow_irreversible. However, that classification is probabilistic, browser_act can perform actions directly, and arbitrary-site automation has broad effects, so least privilege, confirmation, and external-effects controls are not complete. The README explains that page descriptions go to Jev and that the calling LLM normally does not receive snapshots, but it does not fully specify transmitted fields, retention, or service privacy terms. API keys use environment variables and private benchmark data is git-ignored, yet there is no documented redaction, storage, logging, or cleanup policy for credentials, page text, or persistent profiles. Dependencies are few and CI uses npm ci, but the supplied evidence contains no lockfile, vulnerability scanning, update automation, or commit-pinned Actions. No general undo, transaction, or recovery mechanism is documented, so rollback scores zero.

2Reliability12 / 14 · 4.3/5

The README, package metadata, and workflows agree on package identity, entry points, Node requirements, test commands, and release procedure, providing strong static self-consistency. Dependency and Chromium installation are documented and CI covers Node 20 and 22. The core decision path nevertheless depends on the external TypeSafe API, network access, and a user key, with no documented offline substitute, retry policy, or degradation behavior during service outages. Failure messaging is unusually detailed: likely_done, needs_login, needs_confirmation, error, stuck, ambiguous, and blocked are defined along with the caller's expected response, supporting full credit for failure_messages.

3Adaptability16 / 18 · 4.4/5

The material covers MCP, library, and CLI users and names concrete scenarios including forms, dynamic pages, iframes, shadow DOM, uploads, and non-English interfaces. Capability boundaries are explicit for ordered sub-goals, open-ended objectives, and comparisons across many values, with check, snapshot, and direct-action takeover routes, justifying full credit. Step-writing guidance and typed tool parameters improve trigger precision, but selection and irreversibility decisions remain probabilistic and require caller handling of low-confidence outcomes, so trigger_precision is not complete. Node requirements, Chromium setup, environment variables, persistent profiles, headed/headless behavior, and generic MCP client configuration provide thorough environment-fit evidence.

4Convention15 / 18 · 4.2/5

The README is well organized into quick start, source setup, tool and status references, library and CLI examples, repository layout, and release instructions. Installation commands and network/key prerequisites are concrete. Examples cover the principal interfaces, limitations include practical workarounds, and MIT metadata matches the complete LICENSE, supporting full scores for those criteria. Naming is consistent across the package, binaries, and documentation, but the project is only at version 0.1.1 and makes no compatibility or stability commitment, limiting naming_stability to 2. A version number, tag-based release workflow, and generated release notes exist, but no changelog or upgrade guidance is supplied, so versioning_changelog is thin. The author, issue tracker, and release repository are identified, but there is no maintenance policy, support horizon, response ownership, or co-maintainer information. Unknown publisher identity is not itself penalized; the deduction concerns incomplete maintenance responsibility.

5Effectiveness10 / 13 · 3.8/5

Tool results expose actionable statuses, URLs, action histories, scores, candidates, and page text, and the documentation explains how callers should continue, supporting full output-usability credit. The split between LLM planning and compact Jev decisions offers clear marginal value over repeatedly sending full page snapshots. However, accuracy, latency, irreversible-action, and token-saving claims are repository-authored benchmark statements, with some expressly labeled estimates, so marginal_value remains at 2. The README gives approximate call latency, normal call counts, and end-to-end timing, but omits TypeSafe API pricing, quotas, failure overhead, and ongoing operating cost, leaving the cost-benefit case incomplete.

6Verifiability6 / 8 · 3.8/5

The README points results to RESULTS.md and identifies benchmark commands, task organization, and ground-truth checks, giving major claims a traceable path. The supplied evidence does not include RESULTS.md, test sources, a lockfile, or raw benchmark artifacts, so the 40/42 result, zero false-done claim, and token totals cannot be checked item by item; claim_traceability therefore stops at 2. README, package.json, CI, and release configuration corroborate installation, entry-point, testing, and publishing claims, while effectiveness and guard-performance claims remain largely single-source, limiting cross-source corroboration. The documentation explicitly labels the context comparison as an estimate and distinguishes observed results, limitations, and caller responsibilities without claiming independent validation, supporting full fact-inference separation.

Evidence confidence: Low Reviewed Sep 20, 2026 Reviewed revision 578cff6e701a
Safety controls not found in source: rollback or recovery path
Before you use it
  • Page descriptions, visible text, and values that may contain credentials participate in decisions backed by the external TypeSafe API; verify actual transmission, logging, retention, and privacy terms before using sensitive sites.
  • Irreversible-action protection is probabilistic and should not be treated as a hard safety boundary. Restrict browser_act and allow_irreversible, and obtain user confirmation before payments, sends, deletions, or orders.
  • JEV_BROWSER_PROFILE preserves authenticated state; use a restricted directory, control filesystem permissions, and define post-session cleanup.
  • The supplied material omits RESULTS.md, test implementations, the dependency lockfile, and raw benchmark output, so performance, accuracy, and dependency-integrity claims were not independently verified in this static review.
  • No general undo or recovery workflow is documented. Prefer test accounts, sandbox environments, or site-native rollback mechanisms for operations with side effects.
Review evidence [1][2][3][4][5]
See the full review method →

What does this agent do, and when should you use it?

Jev Browser is an MIT-licensed browser automation project delivered as a JavaScript library, CLI, and MCP server. A calling LLM supplies one outcome and any text values, while Jev through the TypeSafe System One API selects the target, action, and value and assesses completion, errors, blockage, or irreversible risk. Playwright executes the selected browser action, and the caller normally receives structured status, URL, action history, and confidence information instead of continually reading full page snapshots. Documented coverage includes forms, custom controls, dialogs, drag and drop, uploads, iframes, shadow DOM, new tabs, large pages, and non-English interfaces. It is a fit for automation workflows that value lower caller-model context usage and explicit handoff points, provided they can accept a Chromium runtime and a dependency on TypeSafe System One.

JevBrowser launches Playwright and processes each goal through a settle, describe, decide, and act loop. src/page-script.mjs extracts elements, labels, state, visible text, metrics, and dialogs from frames; src/page-model.mjs computes page diffs and counts and renders a compact description; src/jev.mjs calls System One for noul, choice, or score probability distributions. The MCP server exposes browser_open, browser_do, browser_check, browser_choose, browser_snapshot, browser_act, browser_screenshot, and browser_close. browser_do reports states including done, likely_done, needs_login, needs_confirmation, error, stuck, max_actions, ambiguous, and blocked, together with diagnostic or candidate information where applicable. The CLI can execute a single web goal or a JSON flow, while application code can import the JevBrowser class. When an action appears irreversible, the loop pauses and requires the caller to opt in with allow_irreversible: true before proceeding.

  1. A Claude Code user who wants an MCP tool to log into a test site, complete a form, and verify the resulting page state.
  2. A test engineering team that needs to express a browser workflow as discrete JSON-flow outcomes with a status after each step.
  3. An automation developer working on content-heavy pages who wants Jev to read compact page descriptions instead of repeatedly sending full snapshots to the calling model.
  4. An operator automating checkout, send, or delete flows who needs execution to stop for approval before a potentially irreversible action.
  5. A browser-testing practitioner covering custom dropdowns, drag and drop, uploads, iframes, shadow DOM, dialogs, or new tabs.
  6. A developer who wants to inspect low-confidence candidates and take over deterministically through browser_snapshot and browser_act.

What are this agent's strengths and limitations?

Pros
  • Jev reads the page and selects actions, so the calling LLM does not normally consume complete snapshots; the repository estimates a fivefold median context reduction on its comparison tasks.
  • The same automation engine is available through MCP, a CLI, and the JevBrowser JavaScript class.
  • Structured outcomes distinguish success from uncertainty, login requirements, page errors, ambiguity, blockage, and exhausted action limits.
  • Potentially irreversible operations have a documented confirmation gate rather than being treated like routine clicks.
  • The documented interaction scope includes difficult browser constructs such as iframes, shadow DOM, file uploads, drag and drop, and pages with more than 2,000 elements.
Limitations
  • Core decision-making depends on TypeSafe System One and a user-supplied API key; Playwright alone does not provide the full autonomous loop.
  • Adoption requires Node.js tooling, Playwright Chromium, filesystem setup, and network access, with headed mode needed for some sites.
  • Ordered sub-goals within one step are a documented limitation and must be split into separate outcomes.
  • Open-ended goals, exact counting, and comparisons across many values require caller-side verification or direct takeover.
  • The reported evaluation covers 42 live-site tasks and still records misses on counting and sort verification, so it is not evidence of universal site reliability.

How do you install or deploy this agent?

For the npm-based MCP setup, first run npx playwright install chromium. Register it with Claude Code using claude mcp add jev-browser -e TYPESAFE_API_KEY=your-key -- npx -y -p jev-browser jev-browser-mcp. Other MCP clients can launch command npx with arguments -y -p jev-browser jev-browser-mcp and the TYPESAFE_API_KEY environment variable. Add JEV_BROWSER_HEADED=1 to display the browser.

For a source installation, run git clone https://github.com/Ying-Kai-Liao/jev-browser && cd jev-browser, followed by npm install, npm run setup, and cp .env.example .env; then add the TypeSafe API key to .env. Run npm test for the offline tests or npm run test:e2e for the networked MCP end-to-end test. A source checkout can be registered with claude mcp add jev-browser -- node /absolute/path/to/jev-browser/bin/jev-browser-mcp.mjs.

How do you use this agent?

In an MCP workflow, call browser_open(url) and then give browser_do(goal, values?) one observable outcome, placing every free-form string in a meaningfully named values field. After a done result, use browser_check(question) when the resulting state needs explicit verification. Treat likely_done, ambiguous, stuck, and needs_confirmation as handoff states: inspect the page, select a candidate, or ask the user instead of blindly retrying.

Library example: import { JevBrowser } from "jev-browser"; const b = await JevBrowser.launch({ headed: true }); await b.open("https://www.saucedemo.com/"); await b.do("Log in", { values: { username: "standard_user", password: "secret_sauce" } }); const p = await b.check("Does the cart badge show 1 item?"); await b.close();.

For the CLI, run node bin/jev-browser.mjs do https://the-internet.herokuapp.com/login "Log in" username=tomsmith 'password=SuperSecretPassword!', or execute a flow with node bin/jev-browser.mjs run examples/flows/todomvc.json --headed. Set JEV_BROWSER_PROFILE=/dir when login state must persist across restarts.

How does this agent compare with similar options?

The repository estimates context usage against a Playwright-MCP-style snapshot loop on the same tasks. It reports roughly five times less context per task at the median and about 8,000 versus 557,000 tokens overall, because page reading moves to Jev. Large pages account for much of that difference, while tiny pages show no saving. The source does not provide a comprehensive comparison of success rate, monetary cost, or total feature coverage.

FAQ

Is TypeSafe System One optional?
No for the documented decision loop. Jev is called through the TypeSafe System One API, and the user must provide TYPESAFE_API_KEY.
Can it place orders or delete data without approval?
Actions that appear to order, pay, send, or delete produce needs_confirmation. The caller should proceed with allow_irreversible: true only after the user approves.
What should the caller do when automation gets stuck?
Inspect info, page_text, and candidates, then use browser_check, browser_snapshot, or browser_act to verify or take over. likely_done, ambiguous, and stuck should not be treated as successful completion.
Can browser logins survive restarts?
Yes. JEV_BROWSER_PROFILE=/dir enables a persistent browser profile. If the page presents a sign-in wall and no credentials were supplied, browser_do returns needs_login.
Will every site work in headless Chromium?
No such guarantee is documented. The project specifically notes that sites including x.com may serve a blank page to headless Chromium and require JEV_BROWSER_HEADED=1.

Compare agents like this one

The same FARS review applied across the shortlist this agent qualifies for.

Related agents