Agent skill

Browser Jev Automation

by notque in 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.

MITAuto-check passedProductivity & Automation

Install Browser Jev Automation

skills CLI
$ npx skills add notque/vexjoy-agent --skill browser-jev-automation -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install notque/vexjoy-agent browser-jev-automation --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
browser-jev-automation
GitHub stars
439
Token cost
~3.5k tokens
SKILL.md length
1,650 words
Files
1
Skills in repo
61
Repo updated
First seen
Licence
MIT

At a glance

Jev-driven browser automation: Jev picks operations, programs execute, a text model writes field values only when Jev cannot pick one from the goal.

  • Works in 4 steps: OBSERVE → DECIDE → EXECUTE → …
  • Tasks that involve Browser automation
  • SKILL.md covers Quick start, Architecture: three tiers…, Components and CLI, plus 13 more sections
  • Calls python3 and claude; reaches api.anthropic.com; needs TYPESAFE_API_KEY and TEXT_MODEL_API_KEY

What it does

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.

When your agent uses it

  • Tasks that involve Browser automation

Example prompts

  • “/browser-jev-automation”

Requirements

  • Python 3
  • A credential in TYPESAFE_API_KEY
  • A credential in TEXT_MODEL_API_KEY

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. OBSERVE
  2. DECIDE
  3. EXECUTE
  4. VERIFY

What it can do on your machine

Read from SKILL.md and the folder at commit 5218674. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • python3
    • claude

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • api.anthropic.com

    Also links to:

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • TYPESAFE_API_KEY
    • TEXT_MODEL_API_KEY
    • ANTHROPIC_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~43
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from notque/vexjoy-agent at commit 5218674, republished under its MIT licence (© notque). 1,650 words, ~3,514 tokens.

Download SKILL.mdSave it as .claude/skills/browser-jev-automation/SKILL.md (or your agent's skills folder).
name
browser-jev-automation
description
Jev-driven browser automation: Jev picks operations, programs execute, a text model writes field values only when Jev cannot pick one from the goal.
version
1.1.0
context
fork
routing.category
infrastructure
routing.pairs_with
testing
routing.triggers
browser automation, browser use, web scraping with jev, jev browser, automated browsing, fill form, click through, navigate site
routing.not_for
Manual browser testing, Playwright E2E test suites, or screenshot comparison. Use e2e-testing or testing-preferred-patterns for those.

Browser Jev Automation

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.

Quick start

bash
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-compact

Requires 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.

Architecture: three tiers applied to browser control

TierRoleCost
Programs (tier 1)Snapshot DOM, extract goal candidates, execute actions, deterministic checks, secret scrubbingCPU 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 fitsPer-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.

Components

FileRole
scripts/lib/jev_browser/snapshot.jsIn-page snapshot: viewport-visible controls, labels, values, operations, code-owned node ids, freshness guards
scripts/lib/jev_browser/cdp_driver.mjsNode 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.pyOne Jev call: operation + target with speculative fan-out, validated against observed ids
scripts/jev-browser-verify.pyIndependent 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.pyLoop: preflight, observe, scrub, decide, text (secret, Jev pick, LLM), freshness, act, log, verify

CLI

FlagMeaning
--url, --goalRequired. Loopback URLs only unless --allow-remote
--check-url-contains X, --check-text-contains YDeterministic checks that must pass for DONE
--secret-env LABEL=ENV_VARType the variable's value into fields whose label contains LABEL; unset variable fails preflight
--allow-host HOSTPermit one host and its subdomains (repeatable). Off-origin navigation elsewhere is reverted
--allow-remotePermit any host. Page text then reaches Jev and, for composed text, the text model
--header NAME=ENV_VARSend a header on every request with the variable's value (staging bypass tokens). Never logged
--trace FILEWrite every observed, scrubbed snapshot to FILE
--headedShow the browser window
--max-steps (60), --max-requests (120)Budgets; requests count Jev calls including text picks and verifies
--json-compactSingle-line output
EnvMeaning
TYPESAFE_API_KEYRequired
JEV_KEY_ONLY=1Skip the Claude Code plugin toggle check (cron, standalone)
CHROME_PATHChromium binary; default is the newest Playwright cache build
JEV_BROWSER_SANDBOX=1Forbid 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=1Enables the driver's debug_eval command for development

Standalone page checks and audits

jev-browser-verify.py also opens pages itself:

bash
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.

Safety invariants

  • Model output never becomes selectors, coordinates, or JavaScript. Every action carries an integer node id issued by snapshot.js; the driver resolves geometry itself and rejects covered, hidden, disabled, or read-only targets.
  • The node registry lives in a CDP isolated world. Page scripts cannot see or rewrite it (live test asserts typeof window.__jevBrowser === "undefined" from the page).
  • Loopback URLs only by default. --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.
  • Secrets: the log shows (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)).
  • Page text reaches Jev and the text model as untrusted data. Instructions say so explicitly.
  • Chromium runs a throwaway profile. Sandboxed launch first; --no-sandbox only when Chromium reports "No usable sandbox" (user namespaces disabled). The ready line reports sandbox: true|false.

Key patterns (learned from jev-ultrafast)

  • Speculative fan-out: one request asks "which operation?" and "which target for CLICK/TYPE_TEXT/SELECT?" at once. Unused heads are discarded.
  • One read per cycle: observe runs snapshot.js once. Jev sees that snapshot.
  • Semantic freshness guards: 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).
  • Decision consumed before mutation: the log entry is written before act, so a navigation cannot erase the record.
  • Independent verification: DONE is a claim. 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.
  • Full distributions logged: every step records operation_probabilities and target_probabilities.
  • Text reuse only on identical context: cached by (url, target, label, current value).
  • Transient Jev errors retry as WAIT up to STALL_LIMIT (3); unavailable blocks at once.
  • Low-confidence picks are held: a non-DONE operation under LOW_CONFIDENCE (0.45) is not executed; the loop re-observes and counts toward the stall guard.
  • Settle before judging: 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.
  • Whole-page element table: rendered controls below the fold are offered too, marked 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.
  • Links say where they go: navigates away to /path or leaves this site, and decide's rules forbid them unless the goal names that page.
Show full SKILL.md (675 more words)Show less

Text value selection

Order for a TYPE_TEXT target:

  1. --secret-env match on the field label.
  2. Program extracts candidate literals from the goal (quoted strings, emails, username X, search for X, numbers).
  3. Jev Choice over candidates plus NONE. Accepted at confidence >= 0.5.
  4. LLM via Anthropic Messages API (urllib, no SDK). Strict {"text": "..."} reply.

The text model writes one value. It never picks actions or judges progress.


Phase 1: OBSERVE

observe evaluates snapshot.js in the isolated world. Output:

text
[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.

Phase 2: DECIDE

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.

Phase 3: EXECUTE

  1. Resolve the observed action by (kind, index). Missing action: record, count toward stall.
  2. TYPE_TEXT: pick text per the order above.
  3. act with the snapshot's page_key, guards, marker. Stale: re-observe.
  4. Driver settles: two animation frames or 50 ms; combobox fills wait up to 200 ms for visible options.

Gate: action executed. Phase 4.

Phase 4: VERIFY

  • DONE: jev-browser-verify.py with deterministic checks. Verified: stop done. Rejected: history entry, re-decide.
  • BLOCKED: stop.
  • Stall guard: STALL_LIMIT (3) consecutive non-WAIT actions with an unchanged marker: stop blocked.
  • Budget: 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:

ArmPlannerStep picker
aLLM plans every stepLLM
bnoneJev picks every step (current loop)
cLLM sets checkpointsJev beam search between them
  • Run the same task set through all three arms, bucketed by task length (for example 1–5, 6–15, 16+ steps).
  • Report per bucket: success rate (verified DONE), total tokens (Jev plus LLM), and wall time.
  • Price and pace the eval per rule 7 of the production rules; use a held-out task set for the final report.

Request sizing and retries

Apply Jev production rules when you change the decide, text, or verify calls:

  • Keep each request at or under the reliable size from 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.
  • Use Vercel AI Gateway. Too much context is the most common failure, and page snapshots are the usual cause: estimate each request before sending and trim the element table or split questions rather than send an oversized request. A ~100-token probe that returns proves the cause is size.
  • Retry a lone fast Gateway 503 after 50–150 ms. Back off exponentially on 429/529. Never retry 401/402/422.
  • Every retry counts against --max-requests.

Error handling

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.

Tests

FileCovers
scripts/tests/test_jev_browser_harness.pyOffline: 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.pyReal 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.

References

  • jev-ultrafast: patterns studied, code not reused
  • docs/PHILOSOPHY.md: three execution tiers
  • scripts/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

Files

Just SKILL.md in skills/infrastructure/browser-jev-automation of notque/vexjoy-agent.

Open the folder on GitHubat commit 5218674

Compare with similar skills

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.

Browser Jev Automation compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Browser Jev Automation this skillnotque/vexjoy-agent439—~3.5kAutomated safety check: PassMIT
Agent Browserquran/quran.com-frontend-next1.9k40 repos~3.3kAutomated safety check: PassNone
Dev-Browser CLI AutomationSawyerHood/dev-browser6.7k1 repos~455Automated safety check: PassMIT
Browser Automationopenclaw/openclaw392k—~2.9kAutomated safety check: PassMIT
Camoufox CLIBin-Huang/camoufox-cli3501 repos~4.5kAutomated safety check: PassMIT
BrowserVibiumDev/vibium2.9k—~4.8kAutomated safety check: PassApache-2.0

Similar skills

  • Agent Browser

    quran/quran.com-frontend-next

    Automates browser interactions for web testing, form filling, screenshots, and data extraction.

    1.9k GitHub starsUsed in 40 repos~3.3k tokens
    Productivity & AutomationAuto-check passed
  • Dev-Browser CLI Automation

    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…

    6.7k GitHub starsUsed in 1 repo~455 tokens
    Productivity & AutomationAuto-check passed
  • Browser Automation

    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.

    392k GitHub stars~2.9k tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Camoufox CLI

    Bin-Huang/camoufox-cli

    Anti-detect browser automation CLI & Skills for AI agents. An agent skill from Bin-Huang/camoufox-cli.

    350 GitHub starsUsed in 1 repo~4.5k tokens
    Productivity & AutomationAuto-check passed
  • Browser

    VibiumDev/vibium

    Automate browsers with the Vibium CLI. An agent skill from VibiumDev/vibium.

    2.9k GitHub stars~4.8k tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Test AIRI display-model imports with agent-browser across stage-tamagotchi Electron, stage-web, and stage-pocket mobile web layouts.

    50k GitHub stars~1.1k tokensUpdated today
    Productivity & AutomationAuto-check passed

More from notque/vexjoy-agent

All 61 skills in this repo
  • Game Asset Generator

    notque/vexjoy-agent

    Deterministic palette/matrix pixel art (not AI). An agent skill from notque/vexjoy-agent.

    439 GitHub stars~2.3k tokensUpdated 6 days ago
    Auto-check: notes
  • PR Workflow

    notque/vexjoy-agent

    Pull request lifecycle: commit, codex review, sync, review, fix, status, cleanup, and PR mining.

    439 GitHub stars~2.8k tokensUpdated 6 days ago
    Auto-check: notes
  • Architecture Deepening

    notque/vexjoy-agent

    Improve architecture across modules by deepening interfaces.

    439 GitHub stars~3.3k tokensUpdated 6 days ago
    Auto-check: notes
  • Code Quality

    notque/vexjoy-agent

    Code quality: cleanup, linting, formatting, quality gates. An agent skill from notque/vexjoy-agent.

    439 GitHub stars~1.5k tokensUpdated 6 days ago
    Auto-check: notes
  • Codebase Analyzer

    notque/vexjoy-agent

    Statistical rule discovery from Go codebase patterns. An agent skill from notque/vexjoy-agent.

    439 GitHub stars~2k tokensUpdated 6 days ago
    Auto-check: notes
  • Comment Quality

    notque/vexjoy-agent

    Review and fix temporal references in code comments. An agent skill from notque/vexjoy-agent.

    439 GitHub stars~2k tokensUpdated 6 days ago
    Auto-check: notes

Questions about Browser Jev Automation

What does Browser Jev Automation do?

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.

When should I use Browser Jev Automation?

Browser Jev Automation fits situations like: tasks that involve Browser automation.

How do I install Browser Jev Automation in Claude Code?

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.

How do I install Browser Jev Automation in Codex?

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.

Can I use Browser Jev Automation in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Browser Jev Automation need to run?

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.

Does Browser Jev Automation access the network?

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.

Is Browser Jev Automation safe to install?

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.

What licence does Browser Jev Automation use?

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.

How many tokens does Browser Jev Automation use?

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.

What are the alternatives to Browser Jev Automation?

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.

Who maintains Browser Jev Automation?

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.