Skip to content

Article

Exploring Jev for AI-Driven Mobile QA

Give Jev a screen snapshot and a task, and it chooses the next action for agent-driven mobile QA. Ships as a CLI you can point at a real app.
Format
Article
Reading time
3 min
Published by
Community
Author
Callstack
Last verified
Sep 2026

Highlights

  • agent-device reads accessibility snapshots like '@e2 [text]' and '@e4 [button]', turning each control into a described action for Jev.
  • State is { task, screen, previousScreen, previousAction }; Jev answers a Choice over action descriptions and the runner presses the ref.
  • Jev can also choose pass, fail, or incomplete to end the run, judging from the current and previous screens and the previous action.
  • The recorded demo run took 14 seconds and cost $0.0023 in model inference.
  • Ships as a CLI (npm run qa -- --app ... --platform ios) and Jev reads text only, not screenshots or video.

Quickstart

ts
import { TypeSafeClient, choice } from '@typesafe-ai/sdk';

const jev = new TypeSafeClient();
const options = Object.fromEntries(
  actions.map(action => [action.id, action.description])
);

const { answers } = await jev.systemOne({
  model: 'jev-latest',
  state: { task: prompt, screen: snapshot, previousScreen, previousAction },
  questions: {
    nextAction: choice('Choose the next action for the task.', options),
  },
});

const actionId = answers.nextAction.choice;

Watch out

Jev does not read screenshots or video, so the approach depends on the app exposing usable accessibility information and the runner must execute each chosen action itself.

Questions about this entry

Short answers drawn from the linked project or page.

Reactions & coverage

Posts, threads, and videos about this entry from around the web.

X: Website to App turns any URL into a native app

X: End-to-end tests run by agents

From the Jev guides

Original write-ups on what this entry is for.

From the Jev AI model community

Posts from builders shipping with Jev right now.

Follow @typesafeai