Skip to main content
Qalti is now open-source under MIT license. The full source code is available on GitHub.
Qalti is an AI agent for mobile app testing. It visually inspects your app and interacts with it the way a user would: tapping buttons, entering text, scrolling, opening URLs, etc. You provide a test in plain English; Qalti executes it and reports. Qalti is a macOS Application with an included CLI. This lets you run tests against local iOS Simulators and connected iPhone/iPad devices with minimal latency. The same binaries run in your environment on macOS (e.g., GitHub Actions on macOS runners or self‑hosted Macs) for CI. To run tests, add your own OpenRouter API key in Qalti Settings (UI) or pass it via OPENROUTER_API_KEY / --token for CLI and CI flows.

How does it work

Qalti Agent behaves like a manual QA engineer: it sees the on‑screen UI like a human and decides what to do next like a human. Under the hood, Qalti reads the test instructions you provided and runs a tight perception–action loop on your app’s real UI:
  • View — capture and understand the current screen.
  • Decide — pick the next best action toward the goal.
  • Act — execute the tap, type, scroll, or open URL.
  • Verify — compare the screen with the expected state.
  • Repeat — iterate until the test flow is done.
Then it produces a run report with a step‑by‑step log and screenshots.

Qalti Design principles

  • App is the black box — No source code or UI hierarchy required; Qalti interacts only with the rendered UI. This is why it works for native apps and custom‑rendered UIs (incl. game engines, cross‑platform toolkits).
  • You’re in control — You define the exact flow, inputs, and assertions. The Agent executes deterministically and won’t take alternate paths unless explicitly allowed.
  • Common sense, surfaced — Benign variations are handled (dismiss transient pop‑ups, tolerate minor label changes) to keep runs stable, and every adaptation is highlighted in the report; if semantics would change, the test fails.

Examples

RUN App. Training numbers consistency

RUN is a training app that tracks your running workouts. Its Home‑screen widget shows a snapshot of the latest run with some numbers. The same metrics are visible inside the RUN app and in Apple’s Fitness app (Sessions). In this example we verify that all three views stay consistent. Below is a Qalti test and how the Agent executes it. The goal: verify that the RUN widget shows the same numbers as both the RUN app and Apple’s Fitness app.
While running, the Agent highlights the step it is executing. On the “Scroll down to see the Training” step, it detects that the target content is already visible and skips scrolling. The Agent compares the numbers across views and notices a 1 BPM difference, so the test is marked as failed. You can pause the video at any moment to read the Agent’s on‑screen reasoning and see why a particular action or comparison was chosen. This is the final state reported by Qalti Agent: In the Fitness app session details, all workout statistics are visible. Every value matches the widget except Heart Rate, which differs by 1 BPM, resulting in a failed run under strict validation criteria. If a 1 BPM difference is acceptable in your case, add that tolerance to the test, and the Agent will treat the run as passed. It is easy to run on your app. Install Qalti, then check out our step-by-step guide with video to write and run your first test on the iOS Simulator or a connected device.

Platform Support

Because it operates at the screen level, apps built with virtually any UI framework are supported. Runs on iOS and iPadOS, on Simulator and real devices. Android will be added soon.