Skip to main content
The noqa CLI brings the platform to your terminal: inspect devices, drive the screen, author and edit test cases, run them with the noqa agent, and read results — all scriptable, and easy to wire into CI or an AI coding agent. It ships with the macOS desktop app and talks to it locally, so there’s nothing separate to configure.
You need the noqa macOS app running and the CLI installed. To drive it with an AI agent, see CLI for agents: skill setup, token-efficient screen reads, and the agent test loop.

Setup

1

Install and open the app

Download noqa and install it. Keep the app running — the CLI talks to it locally, so it must be open for any command to work. Sign in for account features (test management, running the agent); base commands work without an account.
2

Install the CLI

In the app, open Settings → Tools and click Install CLI. This links the noqa command into ~/.local/bin and adds it to your PATH — no sudo required. Restart your terminal afterward.
3

Install the skill (for AI agents)

In the same Settings → Tools, click Install skill to install the noqa-testing skill for your coding agent, so it knows the commands and workflows. Skip it if you only use the CLI by hand. See CLI for agents.
4

Verify

Base commands

No account and no app prefix needed. Connect a device first with noqa devices connectscreen and action run against the connected device.

Devices

Inspect the screen

For how noqa screen, --full, and a screenshot compare by token cost, see Reading the screen.

Actions

Gestures (tap, swipe, drag, pinch, input) target an element two ways. Prefer describing the element (grounding) — it’s the recommended approach; fall back to explicit relative coordinates only when needed. By description (automatic grounding, recommended) — describe the element in plain language and noqa grounds it to the right spot on screen, no coordinates needed. Requires being signed in:
By coordinates (fallback)0–1000, relative to the screen; read them from noqa screen. Use when grounding mislocates a target or you already know the exact spot:
App & system controls take no target:

Test management

Author and maintain your test suite from the terminal — free, with an account. Every command here takes your app prefix as its first argument (shown as APP); find it with noqa apps list. See Test Cases for how cases and flows fit together.

Apps & context

app_context is a shared description injected into every run — credentials, screen names, and rules the agent should always follow. update overwrites, so read the current value first, then send the full replacement.

Test cases

A test case has a title, optional tags, and a list of flows (steps + expected results).
Each flow is either inline ({"instructions": "...", "result": "..."}) or a reference to a reusable flow ({"id": "..."}) — never both. Tags are created automatically when named.
For how to phrase instructions and expected results, see Writing Good Test Cases.

Reusable flows & tags

A reusable flow is a named step shared across cases (e.g. “Go through onboarding”). Update it once and every case that references it updates too.

Builds & test runs

Register builds and run test cases with the noqa agent on a connected device. Each run uses credits.

Builds

Build paths must be absolute (e.g. /Users/me/build/App.ipa, not build/App.ipa).

Run tests

Hand saved cases (by number) or ad-hoc cases (inline JSON) to the noqa agent, which runs them autonomously on the connected device.
Omitting both build flags reuses whatever is already installed on the device — quick, but the app keeps its existing state across cases. Pass a build so each run starts clean for a regression suite. --build-path and --build-id are mutually exclusive; connect a device first with noqa devices connect.
delete commands (cases, flows, runs, builds) are irreversible. Double-check the id before running.

Output & scripting

Most read commands accept --json for raw output you can pipe into jq or a script:
Errors go to stderr with a non-zero exit code, so the CLI composes cleanly in CI pipelines and agent tooling.

Test cases

How cases and flows work

CLI for agents

Let an AI agent drive the CLI