iOS and Android testing for coding agents

Your app’s flows, tested in seconds

Describe a flow in plain English. TestedOK taps through it on your simulator or emulator and tells your coding agent the exact step that broke.

$ curl -fsSL https://testedok.dev/install | sh
Works with

Free during the beta · 200 credits, no card · iOS and Android

TestedOK · tests/sign-up.json
❯ testedok run tests/sign-up.json
goal: “sign up with a new email and reach the home screen”
✓1Launch app2.8s
✓2Tap "Create account"0.5s
✓3Type email and password0.7s
✓4Tap "Continue"0.5s
✓5Check the home screen is showing0.4s
Tested OK · 5 steps · 4.9s
  • iOS
  • Android
  • React Nativebeta
  • Flutterbeta

Simulator, emulator, or a phone on your desk

Why TestedOK

You ship faster than ever. Testing hasn't caught up.

Nobody re-checks sign-up, onboarding, and checkout after the 40th generated change, and screenshot-based agents crawl, waiting on a large model at every step.

Median time per test
Screenshot-based agent39.4s
TestedOK4.3s

12 flows (Settings, Calendar, Reminders, and two of our own apps) on an iPhone 17 Pro simulator, September 2026. The screenshot-based agent is Claude Opus 5 looking at a screenshot every step.

How it works

Describe a flow, get pass or fail.

One sentence of plain English, no selectors or recordings. TestedOK taps through it on your simulator or emulator and names the exact step that broke.

  • The text you expect at the end proves it worked, not the text you typed.
  • Re-running a flow that passed takes about 3 seconds.
  • Low confidence hands the step to Claude with a screenshot.
Write your first flow →
tests/onboarding.json
goal: “sign up with a new email and reach the home screen”
✓ 1 Tap “Create account”
✓ 2 Type the email and password
✗ 3 Tapped Continue, but the home screen never appeared

For coding agents

Built for your coding agent.

Claude Code, Cursor, Codex, or any MCP client runs your flows after every edit, reads back the failing step, and fixes it before you look up.

  • Claude Code: claude mcp add testedok -- testedok mcp
  • Cursor, Codex, Windsurf: add testedok mcp to the MCP config.
  • Runs started by an agent show up in the dashboard, marked as such.
Connect Claude Code →
Claude Code
› I changed the onboarding screen. Running the flow.
❯ testedok run tests/onboarding.json
✓ 1 Tap “Get started” 0.6s
✓ 2 Type the email 0.7s
✗ 3 Tapped Continue, but the home screen never appeared
› Continue lost its action in my edit. Fixing ContinueView.swift and re-running.

Dashboard

Every flow at a glance.

The dashboard shows what's passing, what broke, and how each flow has done over its last ten runs, whether you ran it or your agent did.

  • Failing flows say which step broke and why.
  • Run history keeps each step's screenshot for 30 days.
  • Copy a failure straight into your agent's prompt.
Open the dashboard →
Flows5 flows · last run 2m ago
Onboarding
Sign in
Add a habit
Checkout
Daily check-in

Every step, with its screen. Open a failed run to see what TestedOK saw at the step that broke.

✓ Tap “Create account”
✓ Type the email and password
✗ Tap “Continue”: the home screen never appeared
Why it failed · Copy for agent

One project per app, shared with your team. Credits are shared across your projects; teammates join by invite.

HHabitly12 flows · 2 failing
LLedgerly7 flows · all passing
PPocket Chef3 flows · all passing
Credits128 / 200

Runs on your machine. TestedOK drives the iOS Simulator or Android emulator you already have. No uploading builds, no device farm, no queue.

Your build stays with you. Your app binary never leaves your Mac. Screenshots go out only when a step needs the vision model, and for your run history, kept 30 days.

iOS-native. Built for SwiftUI and UIKit apps. Not a web tool with mobile bolted on.

Questions

Does it work with SwiftUI and Compose?
Yes. SwiftUI, UIKit, Jetpack Compose and Android Views all work: TestedOK reads what the app exposes for accessibility, not its framework.
React Native and Flutter are marked beta — what does that mean?
They should work for the same reason as anything else: React Native renders real native views, and Flutter builds its accessibility tree as soon as a driver attaches. We haven’t run either against a real app yet, so they are beta rather than supported. Tell us how it goes and we will drop the label.
What do I need?
For iOS, a Mac with Xcode and the iOS Simulator. For Android, an emulator or a plugged-in phone. TestedOK is a single command-line tool; it sets up its own driver on first run.
What if my app has custom or unusual UI?
When TestedOK isn't sure about a step, it hands that step to a vision model with a screenshot, then carries on.
Do I need to write code?
No. Describe the flow in plain English, with the text you expect to see at the end.
What does it cost?
Nothing, during the beta. Every account gets 200 credits, with no card. A credit covers a run of up to 10 steps, and most flows are five. Projects, flows and teammates are unlimited. Paid plans come later, and you will hear about them well before anything costs money.
Can one project cover both platforms?
A project tests one app, so an iOS app and an Android app are two projects. Flows read the same on either.

Ship the change. Know it still works.