jev-browser
Skill5 starsChanged 13 days agoMITView on GitHub
Drive a real Chrome browser through JEV (TypeSafe's fast decision model) with the jev-browser MCP tools - hand off multi-step web tasks (search, fill forms, compare offers, extract results), inspect pages cheaply, and answer JEV's questions when it is unsure. Use when the user asks to do something on a website, to use JEV, or to automate or debug browser work.
5 other projects use a version of this.
Adopted by
Most recently taken up by
- ufukyuksel-dev/SUPER_COMPUTER_AItheir own version, first seen Nov 1, 2026
- Ying-Kai-Liao/jev-browsertheir own version, first seen Nov 1, 2026
- ChenYCL/jev-browser-skilltheir own version, first seen Sep 22, 2026
- wanghai673/jev-browser-skilltheir own version, first seen Sep 22, 2026
- TylerJNewman/skillstheir own version, first seen Jun 21, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- Ying-Kai-Liao/jev-browser★ 128same name
- ChenYCL/jev-browser-skill★ 2same name
- wanghai673/jev-browser-skill★ 2same name
- TylerJNewman/skills★ 1same name
- ufukyuksel-dev/SUPER_COMPUTER_AI★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
6 rules. 0 are common, 1 is distinctive, and 5 are very specific to this project.
0
Common
Most of the 5 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 45
Write goal, about and hints in English: JEV is most accurate in English.
- Distinctive: line 47
Use booleans for checkboxes.
- Very specific: line 87
Do not answer continue to a blocker you have not resolved: the task will only ask again.
- Very specific: line 89
When the task ends, report the result with its evidence URL.
- Very specific: line 93
Every JEV decision has a confidence.
- Very specific: line 106
If JEV keeps asking about things it gets right, lower the thresholds.
“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
JEV Browser
JEV is a System One model. It makes typed decisions (which element, which option, did it work) in ~100 ms for fractions of a cent, and each decision comes with calibrated confidence. It does not write text or plan. You plan and supply the data; JEV executes and asks you when it is unsure.
Choose the tool
| Need | Tool |
| A multi-step goal: search, fill a form, compare, collect data, book up to payment | jev_task, then follow its events |
| See what is on a page | jev_observe (overview → region → element → diff); never ask for raw HTML |
| Find an element by description | jev_find ("the departure city input") |
| A quick judgment about the page | jev_ask with noul / choice / score questions |
| One precise action | jev_act with a ref from observe/find, or with an intent |
| Vision: canvas, images, charts, or showing the user something | jev_screenshot |
| Why JEV did something | jev_trace (links to the debug UI and the TypeSafe playground) |
| Setup problems | jev_doctor, jev_settings |
Choose the browser
driver: "extension"is the user's own Chrome, with their logins, through the jev extension. Prefer it for sites with accounts, bot checks or CAPTCHAs (travel, shopping, banking), and whenever the user may need to step in.driver: "chromium"is jev's own Chrome profile. A headless profile cannot show a CAPTCHA to anyone, so do not use headless for sites with bot protection.- The default
autouses the extension when it is connected.jev_tabsshows whether it is, and lists the tabs jev works with (the user's other tabs only withall: true). If the user needs the extension and it is not connected, tell them to load it and runjev pair. - With
driver.backgroundon (off by default), extension tabs open inactive and selecting a tab does not bring Chrome to the front, so the user can keep typing in other apps. Pass an explicittabwhen working across tabs. When the person has to act in a tab (a CAPTCHA, a login), say why, then bring it forward withjev_tabsselectandshow: true; windows a site opens and browser dialogs can still need the user too.
Write a task
{
"goal": "Find the cheapest flight ticket from Almaty to Antalya departing in October 2026",
"site": "https://flights.example.com",
"params": {
"from": { "value": "Алматы", "about": "departure city" },
"to": { "value": "Анталья", "about": "destination city" },
"period": { "value": { "from": "2026-10-01", "to": "2026-10-31" }, "about": "departure date" }
},
"result": { "select": "min(price)" }
}- Write
goal,aboutandhintsin English: JEV is most accurate in English. Give param values exactly as the site expects them:"Алматы", not a translation. - Dates go as
YYYY-MM-DDor a{from,to}range. A range lets JEV pick the cheapest or earliest day in a low-fare calendar; code does the date math. - Use booleans for checkboxes.
- Credentials go into params with
"secret": true. JEV never sees those values. Never put secrets in goal or hints. resultmakes the task end on the results. Withselect: "min(price)"or"max(stars)"JEV first sorts the list on the site. Then you get the results list: one line per item (title, price, short texts, link). Read it and pick the answer yourself: skip accessories, spare parts, sponsored or unrelated items, and report the chosen item with its link.result.pages(default 1) reads more pages or "show more" loads first.result.extract: "code"parses items in code byresult.schema(field types: string, number, money, datetime, date, time, duration, url, boolean) and appliesselect. Use it for bulk collection over many pages, where the text list would be too long.- Useful
policyfields:confidence(see below),irreversible: "ask" | "allow",allowed_domains,max_steps,budget_usd,max_items, andfill_required: "any"when any option is fine for required choices you give no param for (body type, colour, trim): JEV then picks the option that fits the goal and hints (e.g. the saved card), else the first. Text fields and consents are still asked. - For goals that span several parts of a site (the account, a list, a payment), pass
plan: milestones[{do, done_when}]in English, from what you know about the site (for example{do: "open the unpaid ads", done_when: "the page lists my unpaid ads"}). JEV aims at the current milestone and checks eachdone_whenon the page; without a plan it finds the way itself (progress checks, menus, rollback). - For forms (posting, booking, sign-up) give the goal and the details as params; the task finds the way in ("Post an ad", "Sell", the account menu), walks multi-step forms, skips optional steps and works through payment or plan dialogs that are part of the goal. Sign-in params that turn out not to be needed (already signed in) do not hold the task back. For long flows you can also split the work: one task to sign in, another to fill the form.
- The task handles common site behaviour on its own:
- consent banners;
- fields the site prefilled;
- autocomplete suggestions;
- results that open in a new tab (JEV picks the tab and the task moves there);
- "show more" pagination.
While a task runs
jev_task returns immediately, and the task never blocks you. Questions reach you through:
<channel source="jev-browser" task_id=… question_id=…>events, when Claude Code runs with channels;- the block "JEV is waiting for your answer" appended to every jev tool result;
jev_wait {task_id}, which waits up to 55 s;- in Claude Code,
jev watch <task_id>run in the background (Bash withrun_in_background). It prints the event as JSON and exits on the next question or when the task ends, and that exit wakes you. After you answer, start it again.
Answer with jev_answer. Look first (jev_observe, jev_screenshot) when the question is not obvious.
| Question kind | Typical answer |
ground (which element?) | pick a candidate ref, with remember: true if it will recur on this site. If the target is not on the page (for example it sits behind "advanced search"), answer none and add a hint with scope: "domain" in a later answer if the site needs one. If the summary says "Already tried and rolled back", those elements did not work: pick another one or give a hint. |
subintent (what next?) | pick a step id, or give a hint |
missing_param | set_param with key, value and about. Ask the user first if you do not know the value. |
risk_confirm (pay, order, send, delete…) | continue only if the user explicitly asked for this action; otherwise skip or abort |
blocker: CAPTCHA or bot check | Ask the user to solve it in the visible browser, then answer continue. If the context says headless: true, nobody can solve it: abort and rerun the task with driver: "extension", or with jev's Chrome after jev_settings set driver.chromium.headless false. |
blocker: login wall | Ask the user to sign in in that tab (or pass credentials as secret params in a new task), then continue |
blocker: site keeps showing errors | A reload and a step back did not help: the site may be limiting automated browsing. Retry later, or abort and rerun with driver: "extension". |
assess: the search found nothing | set_param with a broader value, give a hint, or continue to read the page anyway. |
stuck | Observe or take a screenshot, then send a hint; or act yourself with jev_act and answer continue; or abort |
consult (the task is stuck but keeps exploring safe steps) | Read the situation report (plan, what JEV sees, pages passed, what was tried, the page). Answer with plan (milestones that replace what is left), a hint (scope "domain" keeps site knowledge such as "paying for publication is the «Premium» button"), goto (url) or pick. If the task finds its way first, the question is withdrawn. |
A task shown as interrupted (after a daemon restart or an update) keeps its progress: jev_control resume continues it in a tab at its last address. Secrets it had not used yet are not kept: its status says which; the task asks for them (missing_param) if a page needs them. A task paused with user_takeover means the user is working in the tab: leave it until they resume it (side panel) or ask them.
Do not answer continue to a blocker you have not resolved: the task will only ask again.
When the task ends, report the result with its evidence URL. jev_result gives the full item list.
Confidence settings
Every JEV decision has a confidence. Above act the task acts on its own; below escalate it asks you; in between it takes a second look.
The settings stack in layers, from lowest to highest precedence:
- global:
jev_settings confidence.*; - per domain:
domains.<host>.confidence; - per task:
policy.confidence; - live: a
thresholdsanswer orjev_control update.
- Presets:
cautious,balanced(default),autonomous. - Per decision kind:
overrides: {"ground.choice": {"act": 0.7, "escalate": 0.3}}. The kinds are assess, subintent, ground, verify, extract. escalate: 0means "never ask just because confidence is low".- Trials: reversible steps (fields, chips, dropdowns, date pickers, "more filters", sorting, overlays) act on the best candidate down to
trial.floor(default 0.25), verify the effect, roll back and try the next, up totrial.tries(default 2). You are asked only after that, and the question lists what was tried. Setpolicy.confidence.trial(enabled,floor,tries) to change it; submits never use trials. - A hint you give in answer to a question about one step is bound to that step's param, so it will not confuse other steps. Put hints that apply everywhere into the task's
hints. - If JEV keeps asking about things it gets right, lower the thresholds. If it acts wrongly, raise them.
jev calibratein a terminal suggests values based on past decisions.
Direct control tips
- Refs (
e12) stay stable across observations while the element exists. Regions arer3. - A
[BLOCKING]region (consent wall, modal) must be dismissed first. Clicking a covered element returnsoccluded;options.forceclicks anyway. - For autocompletes, type with
options.mode: "keys", then runjev_observe view:"diff"to see the suggestion popup. jev_askbuilds its state from the visible page. Reference data as`page.elements.e12`or`page.regions.r3`. Ask one judgment per question. JEV cannot count, compare numbers or dates, or generate text; do that yourself.
Setup and troubleshooting
jev_doctorchecks the key, JEV latency, Chrome and the extension. Keys are set in a terminal:jev settings set providers.openrouter.apiKey -(reads stdin).- Provider:
provider=openrouter(modeltypesafe/jev-1.13) ortypesafe(official API,jev-latest). - Extension: load
dist/extensionunpacked inchrome://extensions(Developer mode), then runjev pairand enter the code in the side panel. - Debug UI:
jev uiprints a local link that shows every step, JEV's probabilities, screenshots and replay.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

