How it works
Jev: how QaReN judges phrase steps
When QaReN asks Jev to resolve a phrase or judge a check, what it can see, and how to run without a key.
Jev is QaReN's screen judge. QaReN asks it to resolve targets described in words and judge phrase checks against captured screen evidence. Quoted targets resolve locally; literal checks evaluate the screen text locally.
Which lines need Jev
| Plan line | Uses Jev? |
|---|---|
Tap the tasks tab | Yes: a phrase target. Phrase press, fill, wait and scroll-until targets need Jev. |
✓ The heading shows "Welcome" and no error is visible | Yes: a phrase check. Text outside the quotes makes the whole expectation a phrase. |
| A line with a verb the grammar does not recognize | Yes: an unrecognized verb requires Jev. |
Tap "tab-tasks" or Wait for "Welcome" to appear | No: a quoted target. Prefer a testID over a label for action targets. |
✓ "Welcome" | No: a literal check, whose entire payload is one quoted string. |
| Recognized back, dialog and fixed-scroll steps | No. |
An unchanged saved block replays its stored identities without Jev for quoted targets and literal checks. Phrase checks still ask Jev. See the saved-block contract for replay eligibility and when a block walks again.
See Write a plan for the supported grammar.
Key and readiness
Set TYPESAFE_API_KEY in the environment that runs QaReN when the plan needs Jev.
See environment variables.
Plans that need Jev run a readiness probe before device selection or leasing;
a missing or rejected key refuses JEV_UNREACHABLE. For probe ordering and model-free
steps, follow the plan readiness contract.
A plan containing only quoted targets and literal checks needs no key. Without a key, that plan makes no Jev calls. With a key, interruption recovery may still ask Jev for a safety veto; the step recovery contract owns the guards and limits on that veto.
What Jev sees
Jev receives captured screen evidence and the plan's phrase; protected values use opaque
identity tokens in model requests, while durable text uses •••. Runtime inputs default
to SECRET, and a secure field promotes its runtime input to SECRET even if marked TEST-PII.
Model-facing secure-field protection uses known-value masking, so an unknown pre-filled
secret echoed as ordinary text can still reach Jev. See the
input value masking contract
and runtime-input contract
for the protection rules and their limits, including separate media eligibility.
Receipts and timings
The receipt reports the run's verdict, failure and available
artifact paths; the walk writes ledger.json and report.md when it reaches reporting.
Each walked attempt row's timing.jevMs records judgment time within resolveMs, including
HTTP retries and backoff; it overlaps the timing partition, so do not add it to total.
The report prints speed summaries, while Watch a run displays
step timings, including time spent asking Jev. See the
walk timing contract
for the fields and their limits.
Write a plan that needs no key
Quote every action target and make each check's entire payload one quoted string.
Use visible labels and testIDs read from the app's source. The plugin's task example
uses quoted targets and literal checks:
## QA
### Add a task
1. Tap "tab-tasks"
2. Tap "add-task"
3. Fill "task-title" with "Buy milk"
4. Tap "save-task"
5. Wait for "Buy milk" to appear
✓ "Buy milk"
This plan needs no TYPESAFE_API_KEY. Without one, it runs without Jev. Adding text
outside a check's quoted payload makes it a phrase check and requires the key.
The CLI's plan and screen-evidence contract and the plugin's using-qaren skill are the sources for these plan-writing rules.