Skip to main content
Your coding agent can take the phone out of your hands. It opens your app on a real device, sees what’s on screen, taps and types its way through, and tells you what happened — you stay in your editor. This page is what it can do there. How agents connect to noqa is on CLI & MCP; setup and every option live in the CLI reference.

Connect a device

One device is active at a time, and every screen read and action goes to it.

Read the screen

Your agent reads the screen on every step, so how it reads drives the token bill. The three ways differ enormously — measured on the same screen (the Lingua Talks paywall):
  • noqa screen --full is the raw accessibility tree straight from Appium — every wrapper, container, and duplicated label. Complete, but noisy and heavy, and it balloons on complex screens.
  • A screenshot is cheap in tokens, but it’s pixels only: the model has to infer where elements are and read small text visually, which hurts tap precision and misses anything off-screen.
  • noqa screen is our cleaned element tree — the redundant nodes stripped, the meaningful elements kept with their exact bounding boxes. Here that’s ~7× fewer tokens than the raw tree, and lighter than a screenshot — while still giving precise, structured positions to act on.

Act by description

Working out pixel coordinates from a screenshot is where agents lose their footing: a tap lands 40 pixels off and the run is wrong from there. So the CLI takes the target in plain language and noqa grounds it — finds that element on the current screen and places the touch itself.
Describe what a person would look for — position, colour, and the words on it all help (“the X in the top-right corner of the paywall”). Grounding is free; it only needs an account. It works where locators don’t, because it never asks the app for an element tree: a Unity button, a WebView, an ad overlay and a native control are all just things on the screen. If grounding puts the touch in the wrong place, fall back to the relative coordinates you just read from noqa screen (0–1000 on both axes):

Control the app and the system

restart-app is how your agent gets back to a known state without touching the device by hand.

The loop

Put together, it’s inspect → act → verify, one step at a time and never an action fired blind:
  1. Inspectnoqa screen to confirm the target is there and the UI is in the expected state.
  2. Act — one noqa action …, by description.
  3. Verifynoqa screen again, or noqa screenshot for a visual check.
That loop is enough to check a feature you just built. To turn it into saved tests that run on every release, see Full-cycle testing.

Full-cycle testing

From a build to passing tests

CLI reference

Every command and option