Agent Browser
quran/quran.com-frontend-next
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
Jev-driven browser automation: Jev picks operations, programs execute, a text model writes field values only when Jev cannot pick one from the goal.
$ npx skills add notque/vexjoy-agent --skill browser-jev-automation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install notque/vexjoy-agent browser-jev-automation --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/notque/vexjoy-agent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/infrastructure/browser-jev-automation .claude/skills/browser-jev-automation && 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 "browser-jev-automation" agent skill from https://github.com/notque/vexjoy-agent/tree/main/skills/infrastructure/browser-jev-automation into .claude/skills/browser-jev-automation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-jev-automation", 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/notque/vexjoy-agent/tree/main/skills/infrastructure/browser-jev-automationType 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 notque/vexjoy-agent --skill browser-jev-automation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install notque/vexjoy-agent browser-jev-automation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/notque/vexjoy-agent.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/infrastructure/browser-jev-automation .agents/skills/browser-jev-automation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "browser-jev-automation" agent skill from https://github.com/notque/vexjoy-agent/tree/main/skills/infrastructure/browser-jev-automation into .agents/skills/browser-jev-automation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-jev-automation", 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 notque/vexjoy-agent --skill browser-jev-automation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install notque/vexjoy-agent browser-jev-automation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/notque/vexjoy-agent.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/infrastructure/browser-jev-automation .cursor/skills/browser-jev-automation && 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 "browser-jev-automation" agent skill from https://github.com/notque/vexjoy-agent/tree/main/skills/infrastructure/browser-jev-automation into .cursor/skills/browser-jev-automation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-jev-automation", 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/notque/vexjoy-agent.git --path skills/infrastructure/browser-jev-automation--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 notque/vexjoy-agent --skill browser-jev-automation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install notque/vexjoy-agent browser-jev-automation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/notque/vexjoy-agent.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/infrastructure/browser-jev-automation .gemini/skills/browser-jev-automation && 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 "browser-jev-automation" agent skill from https://github.com/notque/vexjoy-agent/tree/main/skills/infrastructure/browser-jev-automation into .gemini/skills/browser-jev-automation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-jev-automation", 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 notque/vexjoy-agent browser-jev-automationInstalls 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 notque/vexjoy-agent --skill browser-jev-automation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/notque/vexjoy-agent.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/infrastructure/browser-jev-automation .github/skills/browser-jev-automation && 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 "browser-jev-automation" agent skill from https://github.com/notque/vexjoy-agent/tree/main/skills/infrastructure/browser-jev-automation into .github/skills/browser-jev-automation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-jev-automation", 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 notque/vexjoy-agent --skill browser-jev-automation -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install notque/vexjoy-agent browser-jev-automation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/notque/vexjoy-agent.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/infrastructure/browser-jev-automation .opencode/skills/browser-jev-automation && 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 "browser-jev-automation" agent skill from https://github.com/notque/vexjoy-agent/tree/main/skills/infrastructure/browser-jev-automation into .opencode/skills/browser-jev-automation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browser-jev-automation", 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.
browser-jev-automationJev-driven browser automation: Jev picks operations, programs execute, a text model writes field values only when Jev cannot pick one from the goal.
Browser Jev Automation is an agent skill from notque/vexjoy-agent. Jev-driven browser automation: Jev picks operations, programs execute, a text model writes field values only when Jev cannot pick one from the goal.
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Productivity & Automation, covering Browser automation. The repository describes itself as: VexJoy AI Agent with Jev Intelligent Routing - /do routes plain-English requests to the right specialist agent and gates the work with reviews, tests, and a learning loop. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 5218674. 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.
Shell commands in SKILL.md call:
python3claudeFrom 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:
api.anthropic.comAlso 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:
TYPESAFE_API_KEYTEXT_MODEL_API_KEYANTHROPIC_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Browser Jev Automation loads about 3.5k tokens when it runs. Until then it costs about 43 tokens; SKILL.md has 1,650 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); files beside SKILL.md are not scanned.
The full file from notque/vexjoy-agent at commit 5218674, republished under its MIT licence (© notque). 1,650 words, ~3,514 tokens.
.claude/skills/browser-jev-automation/SKILL.md (or your agent's skills folder).Zero-dependency browser harness. Programs read the DOM and execute actions, Jev makes every judgment call, an LLM writes text only when the goal does not already contain the value. Built in-house; no pip or npm packages.
python3 scripts/jev-browser-agent.py \
--url http://127.0.0.1:8000/ \
--goal "Sign in with username alice, choose country Canada, and submit." \
--check-text-contains "Welcome alice" --json-compactRequires TYPESAFE_API_KEY, Node 22+, and a local Chromium (Playwright cache or CHROME_PATH). Output is one JSON object: status (done|blocked|budget|error), reason, steps, requests, final_url, verify, log (full probability distributions per step), usage.
Measured on a local login form: 5 steps, 7 Jev calls, 1.4 s wall, zero LLM tokens, goal verified.
| Tier | Role | Cost |
|---|---|---|
| Programs (tier 1) | Snapshot DOM, extract goal candidates, execute actions, deterministic checks, secret scrubbing | CPU only |
| Jev (tier 2) | Pick operation + target, pick field value from goal candidates, verify goal | ~$0.042/M tokens, <300 ms |
| LLM (tier 3) | Compose text for TYPE_TEXT only when Jev says no goal candidate fits | Per-token, rare |
One Jev call per decision cycle. Speculative fan-out: operation Choice + per-operation target Choices evaluated in one forward pass. Only the target matching the selected operation executes.
| File | Role |
|---|---|
scripts/lib/jev_browser/snapshot.js | In-page snapshot: viewport-visible controls, labels, values, operations, code-owned node ids, freshness guards |
scripts/lib/jev_browser/cdp_driver.mjs | Node ESM, node: builtins only. Launches Chromium, speaks CDP over the built-in WebSocket, evaluates in an isolated world, serves JSON-lines commands: open, observe, fresh, act, navigate, screenshot, close |
scripts/jev-browser-decide.py | One Jev call: operation + target with speculative fan-out, validated against observed ids |
scripts/jev-browser-verify.py | Independent Jev goal check (goal_met Noul, evidence Score, has_error, page_loaded, evidence_element Choice) plus deterministic url_contains / text_contains checks that veto |
scripts/jev-browser-agent.py | Loop: preflight, observe, scrub, decide, text (secret, Jev pick, LLM), freshness, act, log, verify |
| Flag | Meaning |
|---|---|
--url, --goal | Required. Loopback URLs only unless --allow-remote |
--check-url-contains X, --check-text-contains Y | Deterministic checks that must pass for DONE |
--secret-env LABEL=ENV_VAR | Type the variable's value into fields whose label contains LABEL; unset variable fails preflight |
--allow-host HOST | Permit one host and its subdomains (repeatable). Off-origin navigation elsewhere is reverted |
--allow-remote | Permit any host. Page text then reaches Jev and, for composed text, the text model |
--header NAME=ENV_VAR | Send a header on every request with the variable's value (staging bypass tokens). Never logged |
--trace FILE | Write every observed, scrubbed snapshot to FILE |
--headed | Show the browser window |
--max-steps (60), --max-requests (120) | Budgets; requests count Jev calls including text picks and verifies |
--json-compact | Single-line output |
| Env | Meaning |
|---|---|
TYPESAFE_API_KEY | Required |
JEV_KEY_ONLY=1 | Skip the Claude Code plugin toggle check (cron, standalone) |
CHROME_PATH | Chromium binary; default is the newest Playwright cache build |
JEV_BROWSER_SANDBOX=1 | Forbid the --no-sandbox fallback |
TEXT_MODEL (claude-opus-4-6), TEXT_MODEL_BACKEND (auto | api | claude-cli), TEXT_MODEL_BASE_URL (https://api.anthropic.com), TEXT_MODEL_API_KEY (falls back to ANTHROPIC_API_KEY), TEXT_MODEL_REASONING (none) | Tier 3 text model. auto uses the API when a key is set, else claude -p (logged-in CLI, run from /tmp, no tools). Owner prefers opus 4.6 here |
JEV_BROWSER_DEBUG=1 | Enables the driver's debug_eval command for development |
jev-browser-verify.py also opens pages itself:
python3 scripts/jev-browser-verify.py --url http://127.0.0.1:8002/five-star \
--goal "at least 8 promotions can be toggled" --goal "there is a Start button"
python3 scripts/jev-browser-verify.py --audit-file pages.json # {"base": "...", "pages": {"/path": ["goal", ...]}}One browser per audit, one snapshot per page, one Jev call per goal (~100-200 ms each). passed needs goal_met and evidence score >= 0.5. Same --allow-host, --header, --check-* flags as the agent.
snapshot.js; the driver resolves geometry itself and rejects covered, hidden, disabled, or read-only targets.typeof window.__jevBrowser === "undefined" from the page).--allow-host widens per host. If a click leaves the allowed origin (sign-in redirect, external link), the agent returns to the last good URL, tells Jev which action caused it, and blocks after three such trips.(secret); after a secret is typed, every later snapshot is scrubbed before Jev, the text model, or the log sees it. Password inputs never expose their value ((filled)).--no-sandbox only when Chromium reports "No usable sandbox" (user namespaces disabled). The ready line reports sandbox: true|false.observe runs snapshot.js once. Jev sees that snapshot.act compares page_key + the target's guard (value, enabled state, position, nearby text) for targeted actions, or the page marker for scroll/wait. A stale page returns stale: true; the loop re-observes without a stall penalty, capped at STALE_LIMIT (5).act, so a navigation cannot erase the record.jev-browser-verify.py runs as a separate question set; a rejected DONE goes back into history so Jev re-decides with that evidence. Three rejected DONEs mean BLOCKED.operation_probabilities and target_probabilities.(url, target, label, current value).STALL_LIMIT (3); unavailable blocks at once.LOW_CONFIDENCE (0.45) is not executed; the loop re-observes and counts toward the stall guard.observe waits for the DOM to be quiet (600 ms, capped at 3 s) and reports quiet; WAIT pauses 1.5 s then settles up to 8 s; a rejected DONE triggers a WAIT before the next decision. Jev sees page.settled and history notes when content was still changing.offscreen; the driver scrolls them into view. Covered controls (modal backdrop, sticky header) are dropped at snapshot time, so an open modal leaves only its own controls.navigates away to /path or leaves this site, and decide's rules forbid them unless the goal names that page.Order for a TYPE_TEXT target:
--secret-env match on the field label.username X, search for X, numbers).NONE. Accepted at confidence >= 0.5.urllib, no SDK). Strict {"text": "..."} reply.The text model writes one value. It never picks actions or judges progress.
observe evaluates snapshot.js in the isolated world. Output:
[1] heading Sign in []
[2] textbox Username [CLICK, TYPE_TEXT]
[3] combobox Country (value=USA) [SELECT] options 3:1 USA, 3:2 Canada
[4] checkbox Remember (checked=False) [CLICK]
[5] button Sign in [CLICK]Plus actions (e2:fill, e3:sel:ca, scroll_down, wait), page_key, guards, marker, and page text (<= 6000 chars).
Gate: snapshot captured and scrubbed. Phase 2.
jev-browser-decide.py returns operation, target, confidence, needs_text, and both probability maps. Invalid targets resolve to BLOCKED. Jev unavailable resolves to BLOCKED with source: unavailable.
Gate: operation and target decided and logged. Phase 3.
(kind, index). Missing action: record, count toward stall.act with the snapshot's page_key, guards, marker. Stale: re-observe.Gate: action executed. Phase 4.
jev-browser-verify.py with deterministic checks. Verified: stop done. Rejected: history entry, re-decide.STALL_LIMIT (3) consecutive non-WAIT actions with an unchanged marker: stop blocked.MAX_STEPS 60, MAX_REQUESTS 120.Gate: loop or stop. Every exit carries reason.
The loop above picks every step with Jev. For tasks longer than a few steps, use checkpoint search: an LLM or the caller sets subgoals, and Jev beam-searches between them (../../meta/building-with-jev/references/composition-patterns.md, Checkpoint search; scripts/jev_search.py). Branching needs a way back to a kept state (re-navigate to the checkpoint URL and replay); count that cost. The agent loop does not run checkpoint search yet. Adopt it only after this eval:
| Arm | Planner | Step picker |
|---|---|---|
| a | LLM plans every step | LLM |
| b | none | Jev picks every step (current loop) |
| c | LLM sets checkpoints | Jev beam search between them |
Apply Jev production rules when you change the decide, text, or verify calls:
python3 scripts/jev-size-probe.py --payload <dumped requests> (2.5–4k tokens via Gateway until measured). Large pages grow the element table: bound it by the priority sort and field limits rather than sending the whole page.--max-requests.Every Jev failure resolves to BLOCKED or a bounded WAIT retry. Scripts exit 0 with JSON. Preflight fails before Chromium launches on: remote URL without --allow-remote, Jev unavailable, unset secret variable, malformed --secret-env. A failed text tier blocks the run and names the cause in reason. Driver failures return status: error with the Node stderr tail.
| File | Covers |
|---|---|
scripts/tests/test_jev_browser_harness.py | Offline: decide payload/parse, verify parse and veto, agent loop with fake driver (secrets, stale, stall, budget, rejected DONE, Jev-error retry, preflight, scrub) |
scripts/tests/test_jev_browser_live.py | Real Chromium on a loopback fixture: snapshot contract, password masking, isolated world, covered-target rejection, stale guard, select/checkbox/scroll/submit, end-to-end secret scrubbing. Skips without Node + Chromium |
Field-tested on 5 Star Booker (loopback dev server): closes the help modal, selects promotions, picks a mode, starts booking, spins the venue; the three-page audit from mmr-ratings-dev/scripts/jev_browser_validate.py runs through --audit-file unchanged.
docs/PHILOSOPHY.md: three execution tiersscripts/jev_router_common.py: validated_call_jev, bound_text, typesafe_available© notque, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/infrastructure/browser-jev-automation of notque/vexjoy-agent.
Open the folder on GitHubat commit 5218674
Browser Jev Automation 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 |
|---|---|---|---|---|---|---|
| Browser Jev Automation this skillnotque/vexjoy-agent | 439 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Agent Browserquran/quran.com-frontend-next | 1.9k | 40 repos | ~3.3k | Automated safety check: Pass | None | |
| Dev-Browser CLI AutomationSawyerHood/dev-browser | 6.7k | 1 repos | ~455 | Automated safety check: Pass | MIT | |
| Browser Automationopenclaw/openclaw | 392k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Camoufox CLIBin-Huang/camoufox-cli | 350 | 1 repos | ~4.5k | Automated safety check: Pass | MIT | |
| BrowserVibiumDev/vibium | 2.9k | — | ~4.8k | Automated safety check: Pass | Apache-2.0 |
quran/quran.com-frontend-next
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
SawyerHood/dev-browser
Browser automation with persistent named pages via the dev-browser CLI. Use when users ask to navigate websites, fill forms, take screenshots, extract web…
openclaw/openclaw
A skill your agent uses when controlling web pages with the OpenClaw browser tool, especially multi-step flows, login checks, tab management, or recovery from stale refs/timeouts.
Bin-Huang/camoufox-cli
Anti-detect browser automation CLI & Skills for AI agents. An agent skill from Bin-Huang/camoufox-cli.
VibiumDev/vibium
Automate browsers with the Vibium CLI. An agent skill from VibiumDev/vibium.
moeru-ai/airi
Test AIRI display-model imports with agent-browser across stage-tamagotchi Electron, stage-web, and stage-pocket mobile web layouts.
notque/vexjoy-agent
Deterministic palette/matrix pixel art (not AI). An agent skill from notque/vexjoy-agent.
notque/vexjoy-agent
Pull request lifecycle: commit, codex review, sync, review, fix, status, cleanup, and PR mining.
notque/vexjoy-agent
Improve architecture across modules by deepening interfaces.
notque/vexjoy-agent
Code quality: cleanup, linting, formatting, quality gates. An agent skill from notque/vexjoy-agent.
notque/vexjoy-agent
Statistical rule discovery from Go codebase patterns. An agent skill from notque/vexjoy-agent.
notque/vexjoy-agent
Review and fix temporal references in code comments. An agent skill from notque/vexjoy-agent.
Categories
Jev-driven browser automation: Jev picks operations, programs execute, a text model writes field values only when Jev cannot pick one from the goal. Browser Jev Automation is an agent skill from notque/vexjoy-agent. Jev-driven browser automation: Jev picks operations, programs execute, a text model writes field values only when Jev cannot pick one from the goal.
Browser Jev Automation fits situations like: tasks that involve Browser automation.
Run `npx skills add notque/vexjoy-agent --skill browser-jev-automation -a claude-code`. Or copy the skill folder (skills/infrastructure/browser-jev-automation in notque/vexjoy-agent) into .claude/skills/browser-jev-automation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add notque/vexjoy-agent --skill browser-jev-automation -a codex`. Or copy the skill folder (skills/infrastructure/browser-jev-automation in notque/vexjoy-agent) into .agents/skills/browser-jev-automation 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 notque/vexjoy-agent --skill browser-jev-automation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/browser-jev-automation, .gemini/skills/browser-jev-automation, .github/skills/browser-jev-automation and .opencode/skills/browser-jev-automation in your project.
Going by SKILL.md and its folder, Browser Jev Automation needs the command-line tools its instructions call (python3 and claude) and credentials named TYPESAFE_API_KEY, TEXT_MODEL_API_KEY and ANTHROPIC_API_KEY. Our summary lists: Python 3; A credential in TYPESAFE_API_KEY; A credential in TEXT_MODEL_API_KEY.
SKILL.md names 2 domains. In commands or code: api.anthropic.com; 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. Review the folder before installing.
Browser Jev Automation is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k 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 Browser Jev Automation: Agent Browser (quran/quran.com-frontend-next, 1.9k stars), Dev-Browser CLI Automation (SawyerHood/dev-browser, 6.7k stars), Browser Automation (openclaw/openclaw, 392k stars) and Camoufox CLI (Bin-Huang/camoufox-cli, 350 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
notque (a GitHub user) maintains it in notque/vexjoy-agent, which has 439 GitHub stars. The repository holds 61 skills in this directory. The repository was last updated on October 3, 2026.
Source: notque/vexjoy-agent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.