Midscene JEV Runner
Community runner for Midscene Test adding jevAct, jevAssert and jevWaitFor nodes that use Jev over a bounded, non-text action space.
Overview
Midscene JEV Runner is a community integration for Midscene Test, independent of the Midscene project. It provides a bounded ReAct loop over a caller-owned Playwright page (runJev), a single read-only assertion against the current browser observation (evaluateJevAssertion), repeated read-only checks until a condition passes or times out (waitForJevAssertion), and registration of strict-schema jevAct, jevAssert and jevWaitFor nodes for Midscene tests.
jevAct is meant as a faster replacement for one atomic aiAct intent, not a whole-test planner; it may take a short bounded sequence when an interaction opens a menu, observing after each action until it reaches DONE, BLOCKED or a limit. Its action space is intentionally non-text: click, select, scroll, wait and dismiss; it does not type, clear inputs, navigate or close the page, so text input is composed separately with Midscene's aiInput. Version 0.2.0 removed earlier text actions. Offline Chromium scenes and safety regressions run in CI, and real-model end-to-end scenes gate stable releases. The key is read from the environment, never YAML.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Which non-text action should be taken next (click, select, scroll, wait, dismiss)? | click · select · scroll · wait · dismiss |
| Yes / no | Does the current page satisfy this assertion? | — |
| Choice | Is the intent DONE, BLOCKED or should it continue?(inferred) | DONE · BLOCKED · continue |
How it works
- Register Jev nodes in a Midscene test
- jevAct observes the page and picks a bounded action
- Observe after each action until DONE, BLOCKED or limit
- jevAssert or jevWaitFor check observable conditions
- Text input is handled separately by aiInput
Strengths
- Faster than generative aiAct for atomic intents
- Bounded, non-text action space
- Release gates include real-model scenes
Caveats
- Pre-1.0 with breaking changes
- Community project, not official Midscene
- Requires a Jev key
Getting started
pnpm add @chlrc/midscene-jev-runner @midscene/test playwright, then export MIDSCENE_JEV_API_KEY.At a glance
- Type
- Plugin
- Status
- beta
- Language
- TypeScript
- Runtime
- Node library for Midscene Test with Playwright
- Has code
- yes
- Has tests
- yes
Use cases and integrations
How curated lists describe it
Community-maintained JEV runner integration for Midscene Test.
hellogumbo/awesome-jevCommunity runner for Midscene Test that adds `jevAct`, `jevAssert` and `jevWaitFor` nodes over a Playwright page, with a bounded non-text action space: click, select, scroll, wait, dismiss.
MrJev/awesome-jev
Frequently asked questions
Can it type text?
No, its actions are non-text; use Midscene's aiInput for typing.
Is it a full test planner?
No, jevAct replaces one atomic intent; workflows remain ordered Midscene steps.
Is it official?
No, it is community-maintained.
Related projects
CodexQA browser skill that indexes in-page controls and has Jev pick the operation and target each step, with no screenshots needed.
Agent skillbetaGoal-driven browser agent where each step is one Jev choice over the page's controls, then reviews the run for root causes.
AppbetaTypeScriptChinese UI test framework where Jev scores candidate page elements for each step of a natural-language test case.
ProjectbetaPythonCucumber runner where Jev resolves each Gherkin step against the live page and Playwright executes it, so tests need only the .feature file.
ProjectbetaTypeScriptBrowser tests written as user steps: Jev finds each control once, the path is recorded, and replays run without the model.
ProjectbetaTypeScriptNode CLI for goal-driven E2E tests: Jev picks the next step from a code-generated action space, playwright-cli executes, code asserts.
CLIbetaJavaScript