Jev PlaygroundBrowser agent

JEV BROWSER AUTOMATION

Jev Browser Agent

Give Jev a browser goal and observed page elements, then inspect the action it proposes.

01 / DECISION DEMO

One browser decision cycle

Give Jev the current page and your goal. It suggests the next browser action for you to inspect. This page is simulated; nothing is clicked automatically.

Simulated browser observation. This page is not scraped live.
Browser state inputs
SIMULATED PAGE STATE

What the user asked the browser agent to accomplish.

Configure observed page

Add two to five observed elements. Public IDs are reindexed while internal IDs stay stable.

e1
e2
e3
e4
e5

Run a decision for the page and goal shown above. Nothing is clicked automatically.

Free to try · Usage limits apply

OUTPUTTypeSafe Jev
Your browser decisions will appear here.

Your browser decisions will appear here.

Run Jev to see the next suggested action.

Page + GoalJevSuggested action

How it works

  1. 1
    Observe the page

    Use the page elements shown here.

  2. 2
    Jev suggests an action

    Inspect what it proposes.

  3. 3
    Your browser code decides whether to act

    No action runs in this demo.

Implementation

04 / THE LOOP

Decisions sit inside a deterministic loop

Across these implementations, browser code owns observation, execution, recovery, and stop policy. The exact action set and browser connection vary by project.

  1. 01
    Goal

    A natural-language instruction.

  2. 02
    Observe

    Browser code reads the current page.

  3. 03
    Index actions

    Controls become a bounded action space.

  4. 04
    Jev decides

    One request returns typed decisions.

  5. 05
    Validate

    Code checks freshness and policy.

  6. 06
    Execute

    Browser code performs one allowed action.

  7. 07
    Verify

    The host checks the resulting page and outcome.

00 / CHOOSE A PATH

Which Jev browser setup should I use?

Start with what you already have. The four paths below share a decision idea, but they are separate products with different runtimes and responsibilities.

LEARN HERE

Browser Decision Demo

Inspect a real Jev operation, click target, sensitivity decision, and probability distribution without installing a browser runtime.

Try the simulated decision
PathUse it whenReal browserHost requiredInterface
Playground demoYou want to inspect one decisionNo — simulated observationWeb pageInteractive demo
Jev UltrafastYou want a standalone local agentYesPython, uv, ChromeLocal UI or Python
Jev BrowserYou want a reusable browser toolYesNode.js 20+MCP, CLI, library
Jev Browser UseYou already use Codex Computer UseYes, through that connectionNode.js 22+, CodexSkill or plugin

02 / REAL BROWSER SETUP

Run Jev in a real browser

Each project below is maintained independently. Read its current README before installing, keep API keys in local configuration, and begin with a low-risk task you can verify.

STANDALONE AGENT

Browser Use Jev Ultrafast

This Python project observes Chrome controls as a fresh, indexed action space. Jev selects an operation and the compatible target. A separately configured small text model writes text only for TYPE_TEXT.

git clone https://github.com/browser-use/jev-ultrafast.git
cd jev-ultrafast
uv sync
cp .env.example .env
# Add TYPESAFE_API_KEY and TEXT_MODEL_API_KEY locally.
uv run jev

Open http://127.0.0.1:8766. Its Browser Harness connects to Chrome and is installed by uv sync; run uv run browser-harness --doctor if the browser connection needs attention.

Read the Jev Ultrafast README (opens in a new tab)
MCP · CLI · LIBRARY

Jev Browser

The @jkudish/jev-browser package drives its own Playwright Chromium browser. It requires Node.js 20+ and a TypeSafe API key; text entry can optionally use a configured typing provider.

Codex MCP · ~/.codex/config.toml

[mcp_servers.jev-browser]
command = "npx"
args = ["-y", "@jkudish/jev-browser"]

Claude Code MCP

claude mcp add jev-browser -- npx -y @jkudish/jev-browser

Direct CLI

npx -y @jkudish/jev-browser run   "Find the newest release and stop on it"   https://github.com/jkudish/jev-browser/releases

The same package exports navigate for JavaScript and TypeScript callers.

Read the Jev Browser README (opens in a new tab)
EXISTING CODEX BROWSER

Jev Browser Use

This community Skill bridges Jev into Codex Computer Use. It needs Node.js 22+, Codex, and an existing Computer Use connection to Chrome or the in-app browser. It does not install a separate browser driver.

npx skills add wy-coliney/jev-browser-use -g -a codex -y

Or install the repository’s native Codex plugin:

codex plugin marketplace add wy-coliney/jev-browser-use
codex plugin add jev-browser-use@jev-browser-use

Choose the Skill or the plugin so Codex does not receive duplicate instructions. Restart Codex after plugin installation.

Read the Jev Browser Use README (opens in a new tab)

03 / RESPONSIBILITY SPLIT

Codex + Jev: who does what?

JEV BROWSER USE LOOP

Jev handles repeated control decisions

  • Read the current accessibility text and offered controls.
  • Choose navigation, click, toggle, or scroll actions.
  • Return control when the loop finishes or needs help.
CODEX HOST

Codex keeps the task and verifies it

  • Interpret the user’s broader goal and constraints.
  • Enter text, inspect images, and handle unsupported controls.
  • Check the result and manage approvals or sensitive steps.

Jev Browser Use does not replace Codex. It keeps repetitive, mechanical control choices inside a focused loop while Codex retains the goal, context, visual judgment, and final verification.

05 / WHAT JEV DECIDES

Jev chooses among bounded actions

Jev returns typed decisions with probabilities rather than selectors, coordinates, JavaScript, or prose. The surrounding project defines the action space and decides which answer can be executed.

OPERATION · CHOICE

What to do next

A bounded action such as click, type, select, scroll, wait, done, or blocked, depending on the implementation.

TARGET · CHOICE

Which observed control

An identifier from the compatible elements in the current observation, consumed only for the selected operation.

POLICY · APPLICATION

Whether execution may proceed

Freshness, permissions, confirmation, and completion checks remain deterministic application responsibilities.

Text entry differs by project. Jev itself makes the typed decision; Jev Ultrafast delegates free-text generation to a separate small text model, Jev Browser can use an optional typing provider, and Jev Browser Use leaves text entry to Codex.

06 / REAL JEV BROWSER OPTIONS

Three projects, three integration boundaries

Browser Use Jev Ultrafast

A standalone Python agent and local inspector. It owns its browser loop and connects to Chrome through Browser Harness.

Jev Browser

A Node package that owns a Playwright browser loop and exposes it through MCP, a CLI, or a callable library.

Jev Browser Use

A Skill/plugin that uses an already connected Codex Computer Use browser and hands control back to Codex for text, visual work, and verification.

These are independent open-source projects. Jev Playground does not maintain them, and their interfaces may change.

07 / BUILD IT YOURSELF

Build the decision layer yourself

This site’s demo sends one structured browser state plus operation, click_target, and sensitive questions in a single experimental_evaluate call. It illustrates the decision contract without providing browser observation or execution.

Browser decisionAI SDK · TypeScript
import { createGateway, experimental_evaluate as evaluate } from "ai";

const gateway = createGateway({ apiKey: process.env.AI_GATEWAY_API_KEY });

const state = [
  "USER GOAL",
  "Open the Browser Use Jev Ultrafast GitHub repository.",
  "",
  "CURRENT PAGE",
  "URL: https://www.example-search.test/search?q=jev+browser+agent",
  'Title: Search results for "jev browser agent"',
  "",
  "OBSERVED ELEMENTS",
  'e1 · textbox · Search = "jev browser agent"',
  "e2 · link · Introducing System One Models and Jev — TypeSafe AI",
  "e3 · link · browser-use/jev-ultrafast — GitHub",
  "e4 · link · Jev on Vercel AI Gateway",
  "e5 · button · Sign in",
].join("\n");

const { answers } = await evaluate({
  model: gateway.evaluationModel("typesafe-ai/jev"),
  state,
  questions: {
    operation: {
      type: "choice",
      instructions: "What operation should the browser agent take next?",
      criteria: {
        CLICK: "Activate an observed link, button, or control.",
        TYPE_TEXT: "Enter or replace text in an editable field.",
        SCROLL_DOWN: "Scroll down to reveal more of the page.",
        SCROLL_UP: "Scroll up toward earlier content.",
        WAIT: "Wait for the page to load or update.",
        DONE: "The user's goal is already satisfied on this page.",
        BLOCKED: "No supported operation can advance the goal.",
      },
    },
    click_target: {
      type: "choice",
      instructions: "If the next operation is CLICK, which element is the best target?",
      criteria: {
        e1: "textbox — Search",
        e2: "link — Introducing System One Models and Jev — TypeSafe AI",
        e3: "link — browser-use/jev-ultrafast — GitHub",
        e4: "link — Jev on Vercel AI Gateway",
        e5: "button — Sign in",
      },
    },
    sensitive: {
      type: "boolean",
      instructions:
        "Does the requested action involve a destructive or sensitive side effect?",
    },
  },
});

// Application code consumes the decision — Jev never executes anything.
const operation = answers.operation.choice;

if (operation === "CLICK") {
  const target = answers.click_target.choice;
  // Re-check page freshness, resolve the observed element, apply policy,
  // then perform the click with your own browser executor.
} else {
  // Handle TYPE_TEXT / SCROLL / WAIT / DONE / BLOCKED in your own code.
}

The application consumes click_target only when operation is CLICK. Every other operation ignores that speculative head.

This demo proposes bounded browser actions; the host must validate, authorize, and execute them.

Limits & privacy

08 / PRODUCTION GUARDS

What real deployments still need

  • Stale page and DOM checksRe-observe before acting when the page can change.
  • Only execute offered actionsResolve targets from the current action space, never from free model text.
  • Operation-specific targetsIgnore target heads whose operation was not selected.
  • Separate confirmation policyGate destructive or sensitive actions outside the model.
  • Deterministic permissionsUse allowlists and scoped credentials for irreversible actions.
  • Independent completion checksTreat DONE as a proposal until the host verifies the outcome.

09 / LIMITATIONS & SAFETY

Know what each layer can prove

  • This page’s demo uses a simulated observation and does not drive a browser.
  • Jev probabilities are model outputs, not guarantees of correctness or safety.
  • Dynamic pages can invalidate an observation before an action executes.
  • Real browser coverage varies for frames, canvas, uploads, pop-ups, and custom controls.
  • Browser content sent to a provider can contain private data; delegate only authorized data.
  • Text generation and visual interpretation depend on the chosen project and host.
  • Keep a human confirmation boundary around irreversible effects.
Sources

10 / SOURCES & VERIFICATION

Based on current primary sources

Project architecture, requirements, and commands were checked against the maintainers’ repositories on September 21, 2026. Recheck the linked README before installing.

Jev Playground is independent and is not affiliated with TypeSafe AI or the maintainers of these browser projects.