madewithlaya

Catalog / LLM routing & guardrails

0076GitHub

laya-browser-agent: browser decisions on Laya, drop-in for jev-ultrafast tooling

Local decider for the browser-agent loop: hand it a numbered table of page controls and it picks the operation and element. Playwright/CDP driver, speaks /v1/systemone.

Open source ↗ github.comcostfree, local, no screenshotstime-
ChenneyZhuang/laya-browser-agentREADME ↗
# laya-browser-agent

**Browser agent decisions powered by Laya — the open-source System 1 model. A local alternative to TypeSafe Jev: no cloud, no API key, no screenshots.**

**[English](README.md)** | [中文](README.zh-CN.md) | [日本語](README.ja.md) | [Español](README.es.md)

[](https://github.com/ChenneyZhuang/laya-browser-agent/actions/workflows/tests.yml)
[](LICENSE)




A local, open-weight alternative to [TypeSafe Jev](https://docs.typesafe.ai) for the
browser-driving use case — running [Laya](https://github.com/NandhaKishorM/laya), the
open-source "System One" decision model, fully on your own machine. Works with
[browser-use/jev-ultrafast](https://github.com/browser-use/jev-ultrafast) via the same
wire format, and speaks TypeSafe's `/v1/systemone` dialect, so existing Jev tooling
points at it by changing one base URL.

A decision model answers typed questions about a state and returns calibrated
probabilities. It never writes text, so it cannot hallucinate an instruction. That
makes it exactly the right shape for the *deciding* half of a browser agent: hand it
a numbered table of the controls on a page, and it tells you which operation to run
and which element to act on.

This project wires those models into that role, locally, for whatever agent you
already use.

```python
from localdecide import BrowserDecider
from localdecide.drivers import PlaywrightDriver

with PlaywrightDriver(start_url="https://en.wikipedia.org/wiki/Main_Page") as driver:
    run = BrowserDecider().run(driver, "Click the 'Random article' link in the navigation.")
    print(run.stopped, run.summary()["median_decision_ms"], "ms/decision")
# -> done 142 ms/decision
```

Measured on an M4 MacBook Air, 16 GB (see [Benchmarks](#benchmarks)):

| | |
|---|---|
| Decision latency | **10–30 ms** steady

Also filed under LLM routing & guardrails

  1. 0100

    laya-jev-lab: a local-first cascade that matches Jev's accuracy at 1.8x the speed

    Independent Jev vs Laya measurements plus a cascade: Laya decides first, high confidence executes, low confidence escalates to Jev. At a 0.60 threshold it matched Jev's 78%.

    @yibie · LLM routing & guardrails · lower than pure Jev

  2. 0096

    Laya Ultrafast: browser-use's jev-ultrafast agent ported to local Laya on MLX

    A port of the jev-ultrafast browser agent that decides with laya-mlx instead of the hosted Jev API. DOM snapshot, executor, safety checks and inspector are the originals.

    @ipenywis · LLM routing & guardrails · free, local

  3. 0088

    laya_router: a model router with Laya matches GPT-5 nano's accuracy, 35x faster, free

    Two routers behind one endpoint, measured on 180 labelled requests. Laya answers small/medium/powerful routing in one forward pass, against a GPT-5 nano router.

    @glukicov · LLM routing & guardrails · free, local

  4. 0075

    jevals: agent evals and guardrails as decisions, runnable on every trace

    Openlayer's library packs every eval for a trace into one decision request: tool choice, grounding, scope, injection, PHI. Runs on Jev, or on Kev or Laya locally on a Mac.

    Openlayer · LLM routing & guardrails · fractions of a cent (Jev) or free (local Laya) · a few hundred ms per trace