An agent skill that gives ego lite a Jev (TypeSafe System One) inner loop — one ~0.4 s typed decision per DOM step instead of a full LLM turn.

ego executes; Jev decides. Each step: snapshot → number the interactive elements → one System One call picks the operation and its target together → ego clicks, fills, selects. Jev never writes text and never sees a screenshot. Login, payment, free text, canvas and content reading escalate back to the planner.

Sibling project: jev-ultrafast runs the same idea as a standalone browser agent — Zürich → London on Google Flights in 7.1 s. This skill brings that loop into ego lite, so the agent keeps the user's real browser, sessions and logins.

Every observation produces a numbered element table — a11y refs @N plus

DOM-discovered "dark matter" dN (div cards, cursor:pointer, iframe and

shadow content the snapshot never refs):

@2 textbox "Customer name"

@5 button "Apply filters"

d1 div "member card G18655"

...

one System One request

┌───────────────────────────┐

page → element table → operation │

│ click_target │

│ fill_target │

│ select_target, if present │

└─────────────┬─────────────┘

use the matching target

CLICK @5 ─────┤──→ ego-browser

FILL @2 ─────┘

Target questions are speculative: only the selected operation's target can execute. Two decisions, one network round trip, and each target head carries only role-compatible elements.

Four Jev decisions on a live form — each step numbers the elements, picks an operation and target in one call, then ego executes it:

(docs/demo.mp4 for a crisper version.)

Guarded targets (pay / delete / upload / confirm, EN + 中文) escalate by default; so do login pages, free text, low confidence and repeated actions.

- ego lite installed and onboarded — it provides the

ego-browsercommand and the TaskSpace/Page runtime this skill drives.

- The ego-browseragent skill (TaskSpace and Page rules; ego-jev only replaces the per-step "which element" judgment).

- One backend key:

- TYPESAFE_API_KEYfrom console.typesafe.ai (fastest, ~300–550 ms/step), or

- AI_GATEWAY_API_KEYfor Jev through the Vercel AI Gateway.

- Put either in ~/.config/ego-jev/secrets.env(export NAME=value).

npx skills add ZephyrDeng/ego-jevor with the GitHub CLI:

gh skill install ZephyrDeng/ego-jevor as a Claude Code plugin:

/plugin marketplace add ZephyrDeng/ego-jev

/plugin install ego-jev@ego-jev

No key yet? The offline selftest drives the loop with a mock decider inside ego-browser — same mechanics, nothing to configure:

cd skills/ego-jev && ego-browser nodejs < scripts/selftest.mjsRead skills/ego-jev/SKILL.md — the entry point

your agent loads. The loop itself is dependency-free Node in

skills/ego-jev/scripts/jev-loop.mjs;

options, thresholds, backends and latency numbers live in

skills/ego-jev/reference.md.

const { runJevLoop } = await import(`file://${SKILL_DIR}/scripts/jev-loop.mjs`);

const result = await runJevLoop(page, {

goal: "Open the Billing page and show the credit balance",

verify: async (p) => /billing/.test(await p.url()),

});Offline smoke test (mock decider, no key, runs inside ego-browser):

cd skills/ego-jev && ego-browser nodejs < scripts/selftest.mjs- browser-use/jev-ultrafast — the standalone browser agent this loop is ported from

- TypeSafe docs — the Jev / System One decision API

- ego lite — the Chromium browser for humans and agents this skill drives

- Bugs and feature requests: Issues

- Questions and show-and-tell: Discussions

- Maintained by @ZephyrDeng