jev-browser
Library, CLI and MCP server where an LLM states each step's outcome and Jev decides element, action, value and done/blocked/irreversible.
Overview
jev-browser by ying-kai-liao is unofficial browser automation in which an LLM plans and Jev decides. The calling LLM, such as Claude via MCP, states the outcome it wants one step at a time and hands over any text to type. For each round, code settles the page and describes elements, labels, state, visible text, a diff and counts; then one Jev request of about 300 ms asks several questions at once: which element, which action, which value, and whether the step is done, blocked, showing an error or about to do something irreversible. Playwright performs the action, and the LLM never reads page snapshots unless it chooses to take over.
With WebMCP, where a page offers its own tools, Jev chooses between those tools and the page's buttons and fills arguments by picking among the caller's values, never writing text. Everything free-form comes from the caller as candidates, and code turns disagreement or low confidence into escalation. It ships as a library, CLI and MCP server via npx, and is MIT licensed.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Which element, action and value should be used? | — |
| Yes / no | Is the step done, blocked, showing an error, or about to do something irreversible? | yes · no |
| Choice | Which WebMCP tool or page button fits this step? | — |
How it works
- LLM calls browser_do with an outcome and values
- Code settles and describes the page
- One Jev call answers target, action, value and status questions
- Playwright acts; loop until done, stuck or needs confirmation
- Return status, actions and done score to the LLM
Strengths
- LLM spends no tokens reading pages
- Irreversible actions detected and confirmed
- Supports page-provided WebMCP tools
Caveats
- Unofficial; uses your own TypeSafe key
- Free-form text must come from the caller
Getting started
`npx -y -p jev-browser jev-browser-mcp` as an MCP server with TYPESAFE_API_KEY.At a glance
- Type
- MCP server
- Status
- beta
- Language
- TypeScript
- Runtime
- library, CLI, MCP server (Playwright)
- Has code
- yes
- License
- MIT
Use cases and integrations
How curated lists describe it
Unofficial browser automation: an LLM plans the outcome, Jev decides each click/type on a Playwright snapshot (~300 ms/call). Ships as a library, CLI, and MCP server (`npx -y -p jev-browser jev-browser-mcp`).
AnotiaWang/awesome-decision-modelsA browser library, CLI and MCP server where the caller supplies goals and text while Jev selects actions.
logicrw/awesome-jev-projectsBrowser automation where an LLM plans and Jev (Typesafe System One) decides.
wh000wh000/awesome-jev-liveBrowser automation where an LLM plans and Jev (Typesafe System One) decides. Library, CLI and MCP server.
hellogumbo/awesome-jev
Frequently asked questions
What does Jev decide each round?
Element, action, value, and whether the step is done, blocked, erroring or irreversible.
Does the LLM see the page?
Only if it chooses to take over; otherwise it gets a summary result.
How is text typed?
Jev picks among values the caller supplies; it never writes text.
Related projects
Claude Desktop MCP extension that drives Brave or Chrome with Jev choosing on-page actions and a guard freezing irreversible clicks.
MCP serverbetaTypeScriptChrome MCP server with 50 tools that drives your everyday browser without losing logins, where Jev or a local decider picks each step.
MCP serverbetaMCP server and libraries that drive Chrome over CDP and hand a decision model like Jev a bounded menu of page actions.
ProjectproductionTypeScriptAgent skill porting jev-ultrafast's loop into ego lite: one ~0.4 s Jev call per DOM step picks operation and target.
Agent skillbetaTypeScriptAgent-plugin browser tool where Jev picks one operation and one row from a numbered page table; a small LLM only writes typed text.
ProjectbetaTypeScriptChrome extension plus MCP server so Claude or Codex can drive your real Chrome, with Jev picking each click in about half a second.
MCP serverbetaTypeScript