How we reviewed this: we built it in Docker on Python 3.13 with Chromium and ran it against a small site we wrote and served locally, with real Jev and OpenRouter keys. We did not point it at anyone else’s website. We don’t publish our own measurements of Jev’s speed or cost.
What it does
fastbrowse is a browser agent built on a division of labour: the page is indexed into candidate elements, Jev picks which one to act on, an LLM reads and plans, and code owns verification, safety and secrets. The pitch is that a model which picks cannot click something that is not there.
On our three-page site, asked what a plan costs:
0 click Pricing -> executed
1 read -> executed
complete (2 steps)
The Workshop plan costs 49 dollars a month.
Two steps, correct answer. The interesting part is what --json returns with it.
Every claim carries a receipt
"evidence": [{
"url": "http://127.0.0.1:8931/pricing.html",
"captured_at": "2026-09-21T07:58:44Z",
"capture_sha256": "d83e4b09cb1ac97786de750de0120ea93123ebb9e387fdd0f3392a0cce2495cb",
"start": 9, "end": 104,
"quote": "| Plan | Price |\n| --- | --- |\n| Starter | 19 dollars a month |\n| Workshop | 49 dollars a month"
}]
The README says “every claim in an answer cites a verbatim quote from the page”. It does, and it goes further than the sentence promises: the quote comes with the URL, the capture time, character offsets into that capture, and a SHA-256 of the capture it was taken from. You can check the claim without trusting the agent, and you can tell later whether the page you are looking at is the page it read.
We have reviewed a lot of browser agents. This is the first whose answer we could audit without re-running it.
Safety defaults
The flags say a lot about the design:
--authorize — “allow submit/pay/delete/send without pausing”, which means it pauses before those by default.
--max-dollars — a spend cap on the run.
--secret NAME=ENV_VAR and --bitwarden ITEM — credentials typed from the environment or a vault rather than pasted into the task.
--profile — a Chrome profile kept between runs, separate from your everyday browser unless you point it at one.
A complete status is defined in the README as “every information requirement is backed by a quote, and every action is confirmed on the page” — a definition of done that rules out the most common browser-agent failure, which is a confident summary of a page that was never loaded.
What to know
Three parties, since 0.5.2. TYPESAFE_API_KEY (or the Vercel gateway) for the picks, OPENROUTER_API_KEY for the reading and planning, and — as of a breaking change on 21 September — a Browser Use Cloud browser by default, which is the thing that actually fetches the pages. Without BROWSER_USE_API_KEY the run stops before it starts:
$ fastbrowse "what is on this page" --start http://127.0.0.1:1/
fastbrowse: set BROWSER_USE_API_KEY for a cloud browser
--local puts Chrome back on your own machine. The README explains the default — a cloud browser passes bot checks a fresh local Chrome fails, and prints a URL to watch the run live — and that is a fair trade for a browsing agent, but it changes the answer to “what leaves your machine” from two services to three, and the third one sees every page. Our own run in this review was local; the evidence block above is from Chrome in a container against a site we served ourselves.
The documented dev flow used to leave pytest broken. uv sync then uv run pytest failed at collection on ModuleNotFoundError: No module named 'mcp' — an optional extra, imported unguarded by a test, absent from the dev group. Their CI was already right. Reported, and the README now says uv sync --all-extras in both places it describes the flow, with a comment saying what the extras carry. At d081b5f that line gives 598 passed, 133 skipped; the old one still fails, but nothing tells you to type it any more.
Chrome in a container needs the usual namespace permissions; our first two attempts died in Chrome’s sandbox before fastbrowse saw anything. That is Docker, not the project, but budget for it if you plan to run this in CI.
Maintenance
Created 17 September, MIT, from Agent Labs, and moving at a rate that makes any pinned reference stale within a day: 0.4.2 when we first ran it, 0.5.2 twenty-six hours later, with a cloud-browser default, a provider-outage rework and a prompt audit in between. CI green. The NOTICE file credits the three Browser Use projects it adapts code from, naming the files that port them — the most careful attribution we have seen in this directory, and a contrast with several projects that quietly carry the same lineage.
Verdict
The best-behaved browser agent we have run. The action model cannot invent a click, the answer cannot dodge a citation, and the dangerous verbs pause unless you say otherwise. If you need a browser agent to produce something a person will act on, the evidence block is the feature to care about.
Expect to pay two providers and a browser host, pass --local if the pages matter to you, and read the --authorize flag twice before you use it.
For the fastest possible version of the same loop see jev-ultrafast, whose page handling this adapts; for a Manifest V3 port that drives the tab you are looking at, Jev for Chrome.
See how it compares with other tools in Best Jev tools, tested hands-on.
Review updated Sep 22, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.