Skip to content

ego-jev

Small bounded loop joining ego-lite snapshots with Jev choices over a fixed action space mapped back to observed refs.

ProjectprototypeMIT

Overview

This ego-jev is deliberately not a general-purpose browser agent. It joins ego-lite browser control with Jev decisions in a small bounded loop: snapshot, build a canonical state and candidate set, ask Jev for a choice, optionally ask a text model for input, perform the action, and take a new snapshot.

Jev can choose only a supported operation (CLICK, TYPE_TEXT, SELECT, SCROLL_UP, SCROLL_DOWN, WAIT, DONE, BLOCKED) and a target from the current snapshot. It never receives or emits JavaScript, CSS selectors, coordinates or refs; the executor maps the opaque candidate back to a ref observed in the same snapshot and discards it after use. Text for TYPE_TEXT is requested only after the choice. The README documents ego-lite API details and fallbacks precisely.

What the decision model decides

TypeQuestionAnswers
ChoiceWhich operation and candidate from the current snapshot should be used?CLICK · TYPE_TEXT · SELECT · SCROLL_UP · SCROLL_DOWN · WAIT · DONE · BLOCKED

How it works

  1. Take an ego-lite snapshot
  2. Build canonical state and candidates
  3. Jev picks an operation and candidate; text model fills text if needed
  4. Executor maps the candidate to a fresh ref and acts

Strengths

  • Model never sees selectors or coordinates
  • Refs valid only for one snapshot
  • Clear, bounded action space

Caveats

  • Intentionally limited scope
  • Specific Node version baseline

Getting started

Use Node per .nvmrc, install dependencies and run the CLI with a goal; see the README options.

At a glance

Type
Project
Status
prototype
Language
TypeScript
Runtime
Node CLI with ego-lite
Has code
yes
License
MIT

Use cases and integrations

How curated lists describe it

Frequently asked questions

Can Jev run arbitrary scripts?

No, it only picks a supported operation and an opaque candidate.

How is text entered?

A text model is asked for text only after Jev chooses TYPE_TEXT.

Is it a general agent?

No, it is deliberately a small bounded loop.

Related projects

  • RAM-efficient Rust coding-agent harness, listed as using Jev decisions for memory pruning, browser navigation and voice routing.

    ServiceproductionRust
  • MCP server and libraries that drive Chrome over CDP and hand a decision model like Jev a bounded menu of page actions.

    ProjectproductionTypeScript
  • Headless browser automation via MCP server, CLI or library: Jev picks one action per step and scores goal-met and stuck probabilities.

    MCP serverbetaTypeScript
  • Local browser agent that picks each step's operation and element with a Jev-shaped model such as a fine-tuned Laya, no cloud needed.

    MCP serverbetaPython
  • Claude Desktop MCP extension that drives Brave or Chrome with Jev choosing on-page actions and a guard freezing irreversible clicks.

    MCP serverbetaTypeScript
  • Browser-agent benchmark with five timed events from one prompt, plus a ~200-line DevTools agent where Jev picks each action.

    ProjectbetaJavaScript