SkillAgentSearch skills...

jev-computer-use

Use when driving a desktop GUI through a computer-use driver — windows, menus, native apps, OS dialogs. You build a table of safe actions; Jev picks the next one in about 0.4 seconds.

Install / Use

npx skills add kerpopule/hermes-jev-skills --skill jev-computer-use

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

85/100

Supported Platforms

Universal

Tags

Our assessment of jev-computer-use

jev-computer-use scores 85/100 on our quality scale, 2650th of 4,650 Development & Engineering skills we index.

Its SKILL.md is 18 KB long, well organised into 10 sections with 3 code examples: a thorough specification that gives an agent plenty to work with.

With 1,266 GitHub stars, it is one of the more widely adopted skills in the catalogue.

Substance
30/30
Structure
18/20
Description
15/15
Adoption
13/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 9 days ago, so jev-computer-use is actively maintained.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

jev-computer-use compared with similar skills

All 4 of these similar skills score higher than jev-computer-use; compare them before choosing.

SkillScoreStarsUpdatedFormat
jev-computer-use (this skill)by kerpopule851.3k9d agoSKILL.md
taste-skillby Leonxlnx100111.8ktodayCLAUDE.md
ai-job-searchby ai-job-search-dev10070.4ktodayCLAUDE.md
claude-howtoby luongnv8910046.7k5d agoCLAUDE.md
lobehubby lobehub10084.4ktodayMCP Server

Frequently asked questions

How do I install jev-computer-use?
Run npx skills add kerpopule/hermes-jev-skills --skill jev-computer-use. The install tabs above show the steps for each supported agent.
Which AI agents does jev-computer-use work with?
It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
Is jev-computer-use safe to use?
It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is jev-computer-use still maintained?
The repository was last updated 9 days ago, so jev-computer-use is actively maintained.

name: jev-computer-use description: Use when driving a desktop GUI through a computer-use driver — windows, menus, native apps, OS dialogs. You build a table of safe actions; Jev picks the next one in about 0.4 seconds. version: 0.1.0 license: MIT metadata: hermes: tags: [jev, typesafe, computer-use, gui, cua] related_skills: [jev-browser-use]

Computer use with Jev

You stay the planner and the hands. Jev is only the fast "which one next?" in the middle. It returns an id from a table you built, so it cannot invent coordinates, text, selectors or tool calls. The worst a wrong answer can do is pick another action you already judged safe.

Web pages belong to jev-browser-use. This skill is for desktop apps and OS surfaces, driven through whatever computer-use driver you have (CUA Driver over MCP, the platform's native computer-use tool, an accessibility bridge).

First choice on a Mac: Co-Agent does the loop for you

If Co-Agent is installed (its engine answers on http://127.0.0.1:8792), let it drive. It already holds the Mac's Accessibility and Screen Recording permissions, runs this same loop natively (fresh observation, Jev picks one id from a closed menu, one action, a new observation to verify) and adds what hand-built loops kept getting wrong:

  • it hit-tests every click and brings a covered window forward (or refuses with occluded), instead of clicking whatever app is really on top;
  • it reads apps with no accessibility tree (Epic Games Launcher, games, canvases) with on-device OCR, and clicks them in a way Unreal and WebKit accept;
  • it applies the owner's policy per action with no dialog for ordinary input, and answers needs_approval with a ticket at once for purchases, deleting, sending, legal acceptance, sign-in and security settings; it never types credentials;
  • it names a lock screen or a macOS permission prompt as blocked instead of hanging.

Agents with MCP use its tools computer_status, computer_observe, computer_act and computer_run. Agents that shell out use the bundled client:

python3 <this skill>/scripts/coagent_cu.py setup --name "Hermes"      # once per machine user
python3 <this skill>/scripts/coagent_cu.py status
python3 <this skill>/scripts/coagent_cu.py run --app "System Settings" --open \
  --goal "Open the Appearance settings pane" --expect-text Appearance
python3 <this skill>/scripts/coagent_cu.py run --app Safari \
  --goal "Fill in the profile form and save it" \
  --input "Full name=Ada Lovelace" --input "Email address=ada@example.com" --expect-text "Thanks Ada"
python3 <this skill>/scripts/coagent_cu.py click --app "Epic Games Launcher" --target Library --near "top bar"

Always give --expect-text (or --expect-title) so success is checked, not assumed. Put text to enter in --input; it is typed only into a field whose label matches. Exit codes: 0 done, 3 needs approval (nothing happened: tell the person what it wants and stop; do not look for another way to do it), 4 not verified / stalled / loop, 5 blocked (say what blocks it: the lock screen, the prompt's text, the missing permission), 2 usage or connection error. The same privacy boundary holds: Co-Agent sends Jev element ids, roles and short labels, never screenshots, field values or secure fields.

Use the loop below yourself only when Co-Agent is not installed on the machine.

The loop

  1. Observe with your driver. Prefer accessibility/semantic state over pixels. Every ref, capture id and coordinate is good for this observation only.

  2. Build the candidate table locally. Each row is an opaque id plus one complete, prevalidated action. Always include:

    • reobserve: look again, change nothing
    • abstain: stop and ask for help
  3. Privacy gate. Nothing sensitive goes to Jev: no credentials, tokens, cookies, password-field contents, payment data, customer data, screenshots, files or unbounded page text. If the screen holds such content, abstain or handle it without Jev.

  4. Ask once:

    jev choose < request.json          # Hermes: the jev_choose_action tool, argument `request`
    
    {"schema": "jev.action_choice_request_v1",
     "goal": "Open Settings and select Appearance.",
     "observation_id": "capture-0042",
     "regions": [{"id": "r1", "role": "button", "label": "Appearance", "interactive": true}],
     "history": [{"selected_id": "open-settings", "outcome": "settings window opened"}],
     "candidates": [
       {"id": "select-appearance", "description": "Click the Appearance row in the Settings sidebar."},
       {"id": "reobserve", "description": "Take a fresh observation without changing anything."},
       {"id": "abstain", "description": "Do not act; ask the person for help."}]}
    

    Pass the JSON on stdin or from a temp file. Never interpolate it into a shell string.

  5. Run exactly the one action behind selected_id. Confidence under the floor (0.65, measured — see scripts/calibrate_choose.py; a second "does any candidate match" question was measured against the same cases and reduced no wrong actions, so it is not asked — see evals/choose-match/), or any Jev failure, comes back as reobserve. Always send regions: they are Jev's evidence the element is really on screen, and the same request scored 0.60 without them and 1.00 with them. Never derive an action from anything but the id.

  6. Observe again and verify the postcondition yourself. A chosen id, a delivered click or a screenshot is not proof. Check application state before the next step. Stop after a bounded number of steps.

The bundled runner compares fresh local Accessibility state after each mutation (window title, controls, selection and field changes; ephemeral driver tokens are ignored). If the same chosen mutation leaves that state unchanged twice, it stops as stalled_action before asking Jev a third time. An unchanged screen is not proof that the requested effect failed forever (some apps update asynchronously): report the unverified result or make a new bounded attempt after the app settles, rather than claiming success. Unknown choice ids stop as invalid_choice without dispatch. Neither screen contents nor the local comparison fingerprint are sent to Jev.

This is a conceptual adaptation of the fresh-observation/unchanged-state loop in Jev Voice / jev-cua at commit 098e9348fbfc7afae61575960c15cdaaae960b0b. The linked Swift repository has no tracked license at that commit, so no code was copied. Its sped-up demo preview is not evidence of runtime speed, and its no-confirmation queue does not supersede the approval rules below. Our runner retains cua-driver, closed candidate ids, and independent goal verification. The bundled AX runner does not issue raw coordinate input; a grounded manual Jev + Cua Driver pixel loop remains available for AX-invisible content. Neither path uses AppleScript input.

Authority

Driving a GUI gives you no new permissions. Sending, publishing, paying, purchasing, deleting, changing credentials or security settings, and anything touching customer data still need the person's explicit yes, exactly as they would without a GUI. Use your driver's standard permission mode; never an approval-bypass flag. The person does all sign-ins, 2FA and payment prompts themselves.

If the driver, the key or the target is unavailable: stop and say what is missing. Do not improvise another way to control the screen.

jev choose --mock answers reobserve with no network call, for testing your loop.

Bundled runner

The loop above is the contract. scripts/jev_gui_agent.py is a working implementation of it — the desktop counterpart to jev-browser-use's runner — so you do not have to rebuild the observe/choose/act cycle by hand:

python3 <this skill>/scripts/jev_gui_agent.py \
  --pid 26955 --window-id 46041 \
  --goal 'Open the Library page in YouTube Music' \
  --expect 'Library' --max-steps 12 --json

It drives cua-driver over MCP, builds the candidate table from the accessibility tree, sends jev.action_choice_request_v1, and performs only the action behind the returned id. The runner uses jevkit's provider selection and credential lookup (TypeSafe, then OpenRouter, then Venice); it never copies a fallback provider's credential into TYPESAFE_API_KEY. Exit 0 verified, 4 unverified, 2 refused to start, 6 abstained. --max-regions defaults to 26 so the table stays inside the 32-candidate contract once reobserve and abstain are added.

If the driver binary is missing or does not speak MCP, the runner prints one FAIL: line and exits 2. Set CUA_DRIVER_BIN or install the driver; do not retry the same command.

If the AX snapshot contains only window chrome and the macOS menu bar (as Epic Games Launcher can), the runner now stops with no interactive elements observed rather than asking Jev to click a global menu item. This is a safe stop, not proof that the app has no visible controls. A grounded manual Jev + Cua Driver pixel loop may be used for custom-drawn content: derive coordinates from the current screenshot's actual pixel geometry, not screenshot_scale; choose only safe actions, then independently read back the page. Cua Driver's effect: unverifiable means it posted input, not that the app responded. If grounded clicks still do not change the page, stop rather than retrying an inert action or claiming a driver fix.

For an opt-in end-to-end local smoke on macOS, run python3 scripts/smoke_gui_fixture.py from the source checkout. It compiles a disposable AppKit window, discovers its exact Cua window id, and runs the bundled Jev chooser + Cua AX runner twice against a changing window title. It requires the real driver and Jev credential, checks one activation and a verified title transition per run, and terminates the fixture even on failure. It does not validate custom-drawn Epic UI or pixel delivery. Do not treat a passing fixture as Epic navigation proof.

If you cannot run it, fall back to the loop above by hand — but do not fall back to AppleScript UI scripting, xdotool or another GUI driver. Stop and say what is missing.

--plan: a multi-step command in one run

python3 <this skill>/scripts/jev_gui_agent.py --plan \
  --goal 'Open System Settings, go to General and then open About' \
  --expect 'About' --json

Use it when the person gave a spoken-style command with several steps, above all one that starts by opening an app or a site. Without it you run the loop once per hop and spend a full turn of your own composing each command: measured, the loop took 8 seconds and the agent around it took 36. With --plan the same command is one run: about 1 second to plan, then each step.

Do not use it for a single navigation goal such as "open the Library page". The plain loop is already one step there, and a plan adds a model call and sends the command to one more service for nothing. Do not use it either when each hop needs its own --expect: a plan is verified once, at the end.

What it does:

  1. One call to a small text model with reasoning switched off (JEV_PLAN_MODEL, else TEXT_MODEL, at TEXT_MODEL_BASE_URL; key from TEXT_MODEL_API_KEY or OPENROUTER_API_KEY, else the OS secret store) turns the command into ordered steps from a closed vocabulary.
  2. Steps with no on-screen target run directly: open_app (open -a <name>, a name and never a path), open_url (http and https only), press_key, menu, scroll, wait.
  3. click and type_text go through the same Jev loop, one action each. Dictated text is typed as given, into a field Jev picked, never at wherever the focus happens to be. After the action, the runner reads the window again (and once more after a short settle if unchanged). A driver's delivery acknowledgement alone is not a completed step: an unchanged AX state ends t

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars1.3k
CategoryDevelopment
Updated9d ago
Forks124

Languages

Python

Trust signals

100/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

No cautions