Catalog / LLM routing & guardrails
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.
# 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