Agent Browser CLI
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking…
Drives web pages that need interaction, letting Jev choose one action at a time from observed page elements under a host allowlist and step budget.
$ npx skills add kerpopule/hermes-jev-skills --skill jev-browser-use -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kerpopule/hermes-jev-skills jev-browser-use --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/kerpopule/hermes-jev-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/jev-browser-use .claude/skills/jev-browser-use && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "jev-browser-use" agent skill from https://github.com/kerpopule/hermes-jev-skills/tree/main/skills/jev-browser-use into .claude/skills/jev-browser-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jev-browser-use", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/kerpopule/hermes-jev-skills/tree/main/skills/jev-browser-useType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add kerpopule/hermes-jev-skills --skill jev-browser-use -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kerpopule/hermes-jev-skills jev-browser-use --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kerpopule/hermes-jev-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/jev-browser-use .agents/skills/jev-browser-use && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "jev-browser-use" agent skill from https://github.com/kerpopule/hermes-jev-skills/tree/main/skills/jev-browser-use into .agents/skills/jev-browser-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jev-browser-use", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kerpopule/hermes-jev-skills --skill jev-browser-use -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kerpopule/hermes-jev-skills jev-browser-use --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kerpopule/hermes-jev-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/jev-browser-use .cursor/skills/jev-browser-use && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "jev-browser-use" agent skill from https://github.com/kerpopule/hermes-jev-skills/tree/main/skills/jev-browser-use into .cursor/skills/jev-browser-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jev-browser-use", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/kerpopule/hermes-jev-skills.git --path skills/jev-browser-use--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add kerpopule/hermes-jev-skills --skill jev-browser-use -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kerpopule/hermes-jev-skills jev-browser-use --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kerpopule/hermes-jev-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/jev-browser-use .gemini/skills/jev-browser-use && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "jev-browser-use" agent skill from https://github.com/kerpopule/hermes-jev-skills/tree/main/skills/jev-browser-use into .gemini/skills/jev-browser-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jev-browser-use", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install kerpopule/hermes-jev-skills jev-browser-useInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add kerpopule/hermes-jev-skills --skill jev-browser-use -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kerpopule/hermes-jev-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/jev-browser-use .github/skills/jev-browser-use && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "jev-browser-use" agent skill from https://github.com/kerpopule/hermes-jev-skills/tree/main/skills/jev-browser-use into .github/skills/jev-browser-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jev-browser-use", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kerpopule/hermes-jev-skills --skill jev-browser-use -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kerpopule/hermes-jev-skills jev-browser-use --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kerpopule/hermes-jev-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/jev-browser-use .opencode/skills/jev-browser-use && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "jev-browser-use" agent skill from https://github.com/kerpopule/hermes-jev-skills/tree/main/skills/jev-browser-use into .opencode/skills/jev-browser-use/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "jev-browser-use", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
jev-browser-useDrives web pages that need interaction, letting Jev choose one action at a time from observed page elements under a host allowlist and step budget.
The skill says to fetch plain pages over HTTP and use a browser only when interaction is needed. Jev never writes selectors, code or coordinates: it picks one operation and one target from a table of elements your browser tool observed, with reobserve and abstain rows always present. In the first route you read the page as an element list, build the table, call jev choose, perform that single action, then observe again and verify without retrying mutations blindly.
A goal-reached choice gets a second check with jev ask over the page's own text, because Jev only sees labels. The skill also describes reviewing a site as a visitor with navigation-only persona goals, where a page whose steps all fall under the confidence floor has no clear next step. The second route uses the separate jev-ultrafast loop through a bundled runner, scripts/jev_browser_agent.py, which adds guard rails; the description mentions a host allowlist and a step budget as limits.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit dddaa39. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3uvFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
en.wikipedia.orgAlso links to:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
TEXT_MODEL_API_KEYOPENROUTER_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Jev Browser Use loads about 2.2k tokens when it runs. Until then it costs about 53 tokens; SKILL.md has 1,275 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from kerpopule/hermes-jev-skills at commit dddaa39, republished under its MIT licence (© kerpopule). 1,275 words, ~2,178 tokens.
.claude/skills/jev-browser-use/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.If a plain HTTP fetch can read it, fetch it and leave the browser alone. This skill is for pages that need interaction.
Jev never writes selectors, code or coordinates. It picks one operation and one target from the list of elements your browser tool observed. There are two ways to run it.
jev choose (works everywhere)Same loop as jev-computer-use, with page elements as regions:
read_page, a snapshot). Keep role and a short label per element; leave page text out.click-r12, type-email-r7, scroll-down, back, plus the mandatory reobserve and abstain. Text to type is decided by you and lives in your row, not in the request.jev choose < request.json (Hermes: jev_choose_action). Schema jev.action_choice_request_v1; see jev-computer-use for the shape.A "goal reached" row needs a second check. Jev sees labels, not page text, so it can only guess from the link it followed that the goal is met. When it picks that row, ask a Noul over the page's own text (jev ask, state = goal + URL + about 6,000 characters of main text): "From this page the visitor can do what the goal asks, now, without waiting for another person." Measured on a request-access page reached by "Request free access": the choice said done at 0.73; the Noul said 0.07, and "a person must approve first" 0.91.
Reviewing a site as a visitor. Run a few persona goals ("start free now", "find the plan for 5 systems") with navigation-only candidates (no typing, no submit). Each run's path, and where it stops, is the finding. A page where every step stays under the 0.65 floor is a page with no clear next step for that visitor. Log the top three probabilities with their labels, so you can see what it was torn between. Headless Playwright on a throwaway profile is enough for path A.
browser-use/jev-ultrafast (MIT) is a purpose-built loop with one Jev call per step. It is a separate install with its own Chrome under CDP. Run it through the bundled runner, which adds the guard rails it does not have:
python3 <this skill>/scripts/jev_browser_agent.py \
--url 'https://en.wikipedia.org/wiki/Main_Page' \
--goal 'Open the Wikipedia article about the Rosetta Stone.' \
--allow-hosts wikipedia.org --expect 'Rosetta Stone' --max-ticks 10 --jsonSet JEV_ULTRAFAST_REPO to your checkout (default ~/jev-ultrafast; run uv sync in it once). Keep it separate from a fleet's pinned sandbox copy (Hermes fleet-jev loads <hermes root>/shared/fleet-jev/sources/jev-ultrafast directly), so patching one never changes the other. Without a text helper the runner still browses read-only (it found a pricing page in 3 ticks, about 2 s) and fails only when Jev chooses to type. The runner brings its own browser: when no CDP endpoint is given (--cdp, or BU_CDP_WS in the environment), it launches a headless Chrome on a throwaway profile and closes it on exit, so the person's everyday browser is never attached to and never has remote debugging enabled. The result reports "browser": "owned" or "attached". Use --no-launch-chrome when you require an already-attached browser instead, --chrome-path/BH_CHROME_PATH to name the binary.
Exit 0 only when --expect is found in the live title, heading or URL; 4 unverified; 5 left the allowlist; 2 refused to start. Jev picks where to type; a separate text helper writes what (Jev does not generate text). Choose it once per machine in ~/.config/jev/browser.json (TEXT_MODEL, TEXT_MODEL_BASE_URL, optional TEXT_MODEL_RESPONSE_FORMAT, TEXT_MODEL_REASONING; no credentials in it). Environment variables override it. "TEXT_MODEL_PROVIDER": "claude-cli" with "TEXT_MODEL": "claude-haiku-4-5" asks the signed-in Claude Code CLI instead, with no key at all (about 6 s per field). Ultrafast supports it on a local branch; see the fleet notes. Otherwise any OpenAI-compatible server works. A local one (127.0.0.1 or localhost) needs no key; LM Studio needs "TEXT_MODEL_RESPONSE_FORMAT": "json_schema", because it rejects json_object (supported by Ultrafast with that variable). A remote one takes TEXT_MODEL_API_KEY, or OPENROUTER_API_KEY from the Keychain. Known gaps: shadow roots, iframes, canvas, file uploads, pop-up tabs. Report the gap; do not invent a DOM workaround.
Jev Ultrafast is an end-goal loop — its own instruction to Jev is "advance the user's entire goal from the current page". Give it one sentence describing where you want to end up and let it drive. Do not plan hop by hop. Feeding it one stepping stone at a time is slower, and it throws away the thing the loop is good at.
What a goal needs is the end state plus what counts as progress. Without the second
part it will stop early, and it is right to: its instructions say BLOCKED means no
operation can make progress, so if nothing on the page visibly serves the goal, it stops.
Measured on Wikipedia, starting at Pizza, target Roman Empire, links only:
| goal as written | result |
|---|---|
| "Reach the Roman Empire article by clicking links only. Do not use the search box." | BLOCKED on tick 1, zero clicks — no link to the target was visible, so nothing counted as progress |
| the same, plus "clicking a link to a related stepping-stone article such as Italy or Rome counts as progress. Scroll down to find links when needed." | verified in 12.6 s, 6 actions, no typing — it clicked, scrolled four times, and routed itself |
The same one-sentence form took Banana to Albert Einstein in 35 s. It is not infallible: Kangaroo to Apollo 11 failed by scrolling the whole first article without ever committing to a stepping stone. When that happens, name better stepping stones in the goal — do not start feeding it hops.
So a good goal has three parts:
--max-ticks 40-60 for those.DONE is not proof. Verify against the live page.shared/rules/jev-computer-use-fleet.md (Hermes: ~/.hermes/shared/rules/) before the first navigation. Where that note names Jev Ultrafast as the required default, use it, and reserve path A for the documented gaps above. Jev chooses every step in both paths — never bypass it.This skill is the loop. Machine-specific runtime — the vendor checkout of Jev Ultrafast and its browser-harness version, where the credentials come from, which machine map to resolve paths against, and which older skills are retired — belongs to the fleet, not to this public repo. If the runtime is absent on a machine, stop and report the blocker instead of substituting another browser-control mechanism.
© kerpopule, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in skills/jev-browser-use of kerpopule/hermes-jev-skills.
Open the folder on GitHubat commit dddaa39
Jev Browser Use next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Jev Browser Use this skillkerpopule/hermes-jev-skills | 1k | — | ~2.2k | Automated safety check: Pass | MIT | |
| Agent Browser CLIvercel-labs/agent-browser | 44k | 24 repos | ~864 | Automated safety check: Pass | Apache-2.0 | |
| Agent Browserquran/quran.com-frontend-next | 1.9k | 42 repos | ~3.3k | Automated safety check: Pass | None | |
| Web Access via Browser CDPeze-is/web-access | 9.1k | 4 repos | ~2.2k | Automated safety check: Pass | MIT | |
| Dev Browser AutomationMemTensor/MemOS | 12k | 3 repos | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Browser Control with Omowrightcode-yeongyu/oh-my-openagent | 70k | 1 repos | ~2.2k | Automated safety check: Pass | Custom licence |
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking…
quran/quran.com-frontend-next
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
eze-is/web-access
Routes every web task, from searching to logged-in browsing, through a tiered choice of search, fetch, curl or a real Chrome or Edge session driven over CDP.
MemTensor/MemOS
Automates a real browser through short TypeScript scripts that keep page state between runs, for navigating, filling forms, taking screenshots and extracting data.
code-yeongyu/oh-my-openagent
Drives a real browser through the omowright library, either the user's own signed-in browser or a separate browser the code launches, for forms, QA, screenshots and scraping.
vercel-labs/agent-browser
Automates Electron desktop apps such as VS Code, Slack or Discord by connecting agent-browser to their Chrome DevTools Protocol port.
kerpopule/hermes-jev-skills
Drives desktop GUI apps and OS dialogs by letting Jev pick the next action from a menu of safe actions the agent built, with a Mac Co-Agent shortcut.
kerpopule/hermes-jev-skills
Uses Jev to mark each transcript turn keep, summarize or drop when cutting a conversation to a fixed size, with measured results on handoff quality.
kerpopule/hermes-jev-skills
Routes a turn or delegated task to the cheapest model and effort lane that will still do it right, using the Jev decision model to classify difficulty and escalate only when needed.
kerpopule/hermes-jev-skills
Connects the Jev decision model by storing a TypeSafe, OpenRouter, Venice or OpenCode Zen key with jev setup-key, so the key never passes through the agent.
kerpopule/hermes-jev-skills
Ranks a large catalog of installed skills against the current request through the Jev service, and can conclude that no skill applies.
kerpopule/hermes-jev-skills
Chooses which paid frontier model seat should take a task already judged hard, hands it off with proper context, and keeps a watch on the delegated run.
Categories
Drives web pages that need interaction, letting Jev choose one action at a time from observed page elements under a host allowlist and step budget. The skill says to fetch plain pages over HTTP and use a browser only when interaction is needed. Jev never writes selectors, code or coordinates: it picks one operation and one target from a table of elements your browser tool observed, with reobserve and abstain rows always present.
Jev Browser Use fits situations like: clicking through a JavaScript-rendered or logged-in page; reviewing a site's path as a visitor with navigation-only goals; driving a browser step by step with a limit on hosts and steps.
Run `npx skills add kerpopule/hermes-jev-skills --skill jev-browser-use -a claude-code`. Or copy the skill folder (skills/jev-browser-use in kerpopule/hermes-jev-skills) into .claude/skills/jev-browser-use in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kerpopule/hermes-jev-skills --skill jev-browser-use -a codex`. Or copy the skill folder (skills/jev-browser-use in kerpopule/hermes-jev-skills) into .agents/skills/jev-browser-use in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add kerpopule/hermes-jev-skills --skill jev-browser-use -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/jev-browser-use, .gemini/skills/jev-browser-use, .github/skills/jev-browser-use and .opencode/skills/jev-browser-use in your project.
Going by SKILL.md and its folder, Jev Browser Use needs Python for the scripts in its folder, the command-line tools its instructions call (python3 and uv) and credentials named TEXT_MODEL_API_KEY and OPENROUTER_API_KEY. Our summary lists: A browser tool that can read the page as an element list; The jev CLI.
SKILL.md names 2 domains. In commands or code: en.wikipedia.org; the agent is likely to contact it when it follows the instructions. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Jev Browser Use is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Jev Browser Use: Agent Browser CLI (vercel-labs/agent-browser, 44k stars), Agent Browser (quran/quran.com-frontend-next, 1.9k stars), Web Access via Browser CDP (eze-is/web-access, 9.1k stars) and Dev Browser Automation (MemTensor/MemOS, 12k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kerpopule (a GitHub user) maintains it in kerpopule/hermes-jev-skills, which has 1,046 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 7, 2026.
Source: kerpopule/hermes-jev-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.