Jev (TypeSafe System One) inner loop for ego-browser — one ~0.4s typed decision per DOM step instead of an LLM turn. Agent skill for ego lite.
See the codeAn 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.)
| Jev decision (TypeSafe direct) | ~300–550 ms, 20–120 elements |
| Snapshot + DOM walk | ~20 ms |
| Tokens | ≈ 11K input ≈ $0.0005 (output free) |
| The LLM-turn alternative | seconds of reasoning + a screenshot |
| op | what runs |
|---|---|
click / fill / select | ego page.click / fill / selectOption on @N; dN via tagged CSS or viewport coordinates |
scroll / wait | reveal an element or let async content settle |
done / escalate / blocked | loop exits loud — your verify decides if done is real |
Guarded targets (pay / delete / upload / confirm, EN + 中文) escalate by default; so do login pages, free text, low confidence and repeated actions.
ego-browser command and the TaskSpace/Page runtime this skill drives.ego-browser agent skill (TaskSpace and Page rules; ego-jev only
replaces the per-step "which element" judgment).TYPESAFE_API_KEY from console.typesafe.ai
(fastest, ~300–550 ms/step), orAI_GATEWAY_API_KEY for Jev through the Vercel AI Gateway.~/.config/ego-jev/secrets.env (export NAME=value).npx skills add ZephyrDeng/ego-jev
or with the GitHub CLI:
gh skill install ZephyrDeng/ego-jev
or 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.mjs
Read 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
8 commits
JavaScript
100.0%
Jev (TypeSafe System One) inner loop for ego-browser — one ~0.4s typed decision per DOM step instead of an LLM turn. Agent skill for ego lite.
See the codeAn 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.)
| Jev decision (TypeSafe direct) | ~300–550 ms, 20–120 elements |
| Snapshot + DOM walk | ~20 ms |
| Tokens | ≈ 11K input ≈ $0.0005 (output free) |
| The LLM-turn alternative | seconds of reasoning + a screenshot |
| op | what runs |
|---|---|
click / fill / select | ego page.click / fill / selectOption on @N; dN via tagged CSS or viewport coordinates |
scroll / wait | reveal an element or let async content settle |
done / escalate / blocked | loop exits loud — your verify decides if done is real |
Guarded targets (pay / delete / upload / confirm, EN + 中文) escalate by default; so do login pages, free text, low confidence and repeated actions.
ego-browser command and the TaskSpace/Page runtime this skill drives.ego-browser agent skill (TaskSpace and Page rules; ego-jev only
replaces the per-step "which element" judgment).TYPESAFE_API_KEY from console.typesafe.ai
(fastest, ~300–550 ms/step), orAI_GATEWAY_API_KEY for Jev through the Vercel AI Gateway.~/.config/ego-jev/secrets.env (export NAME=value).npx skills add ZephyrDeng/ego-jev
or with the GitHub CLI:
gh skill install ZephyrDeng/ego-jev
or 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.mjs
Read 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
8 commits
JavaScript
100.0%