jevis
Flutter integration-test package where Jev picks the next registered UI action and judges whether the test goal is reached.
Overview
Jevis is a Dart package built on Flutter's integration_test framework. A test registers the actions it may use (tap, enter text from a fixed list, scroll, back), states a goal and an instruction in plain language, and sets an action budget. Jevis then drives the app on a device or emulator without a scripted sequence of steps.
At each step Jevis reads the current UI, sends it with the action descriptions to TypeSafe's Jev model, and Jev chooses the next action. Jev is also asked whether the goal has been reached; if it is reached the test returns a JevisReport, and if the budget runs out Jevis throws JevisTestFailure so the Flutter test fails. It is aimed at Flutter developers who want goal-based end-to-end tests that tolerate small UI changes. The README notes that API requests include on-screen text, so tests should use test accounts and data.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Which registered action should be taken next on the current screen? | — |
| Yes / no | Has the test goal been reached? | — |
How it works
- Register allowed actions and describe the goal, instruction and attempt budget
- Jevis captures the current UI text and controls
- Jev chooses the next action from the registered set and Jevis executes it
- After each step Jev evaluates whether the goal is met
- Test passes with a report or fails with JevisTestFailure when the budget is spent
Strengths
- Goal-based tests without hand-written step sequences
- Action space is limited to what the test registers
- Runs inside the standard Flutter test runner
- Published on pub.dev with multilingual docs
Caveats
- Calls the hosted Jev API on every step and needs a TypeSafe key
- Screen text is sent to the API, so real user data should be avoided
- Early version (0.1.x)
Getting started
Add jevis to dev_dependencies, put TYPESAFE_API_KEY in jev.local.json, then run: flutter test integration_test/jevis_smoke_test.dart --dart-define-from-file=jev.local.jsonAt a glance
- Type
- Library
- Status
- beta
- Language
- Dart
- Runtime
- Flutter integration_test
- Has code
- yes
- Has tests
- yes
- License
- Apache-2.0
Use cases and integrations
How curated lists describe it
A Flutter integration\_test package that registers allowed UI actions and lets Jev pick the next action and whether the goal is done.
logicrw/awesome-jev-projects
Frequently asked questions
What does Jev decide in Jevis?
It picks the next allowed UI action from the current screen and judges whether the stated goal has been met.
How is this different from a scripted Flutter test?
You list capabilities and a goal instead of an exact sequence; the model chooses the steps within your action budget.
What do I need to run it?
The Flutter SDK with Dart 3.4+, a device or emulator, and a TypeSafe API key passed via --dart-define-from-file.
Related projects
Plain-English end-to-end tests for Android and iOS apps where Jev works out the taps and a lockfile replays every decision exactly.
AppbetaPythonVerified computer-use agent: a Jev guard checks claimed completions and gates irreversible actions; Jev also takes simple steps.
ProjectbetaPythonGoal-driven browser agent where each step is one Jev choice over the page's controls, then reviews the run for root causes.
AppbetaTypeScriptFork of mobile-mcp that adds OCR and lets Jev pick which recognised text element to tap on Android and iOS devices.
MCP serverbetaTypeScriptFast iOS Simulator and Android navigator built on sim-use where Jev picks each tap instead of a frontier-model turn.
ProjectbetaSelf-hostable harness to run coding agents from your phone; a mobile testing script can use Jev to pick the next UI interaction.
ProjectbetaTypeScript