open source · macOS · Apple Silicon

AI agents test your iOS app.

Describe a scenario in plain language. testcat's agent boots real simulators, drives your build, and hands back an evidence-backed verdict — while you watch live.

runs claude code·codex·opencode·ollama 100% local
testcat dashboard — the workbench asking: what do you want to test?

the workbench — profiles · builds · scenarios · live runs · history

no test scripts to maintain

Three steps.
No scripts.

The agent reads the screen the way a QA engineer would — the accessibility tree first, pixels when it matters.

  1. Describe

    A name, a simulator .app build, an agent profile, and the scenario — written the way you'd brief a colleague.

  2. Watch

    The agent boots devices, taps, types and verifies. Its reasoning streams on the left; live simulators paint on the right.

  3. Trust

    A verdict backed by actions and observations — persisted locally with the full evidence trail.

agent profiles

Bring your own agent.

One desktop app, four runtimes. Cloud-strong or fully local — every profile drives real iOS simulators. Models and effort levels are read live from each CLI.

Cl Claude Codeheadless · stream-json sonneteffort highselected
Co Codexexec --json gpt-5.5-codexreasoning high
op opencodesingle-session · no subagents big-picklesteps bounded
Ol Ollama100% local · guided replay gemma4:26bbuilt-in loop
live device grid

Watch it test. Live.

The agent's reasoning streams on the left — every simulator it drives paints live on the right. Up to four per run; the agent decides what to boot.

AGENT OUTPUT
Email screen visible. The field is at y=258 — I'll paste through the simulator clipboard, keyboard-layout safe.
testcat-sim tap --udid 7E89…D1 --x 210 --y 286ok
Field focused. Entering the generated account and continuing to OTP.
testcat-sim describe-ui --udid 7E89…D1ok
Device B is still on the plans list — verifying the order there before I mark this case done.
case 3 / 5in 41.2k · out 3.8k tok
iPhone Air · iOS 26.524 fps
Continue
iPhone Air · iOS 26.431 fps
ge-8599-sim-2@tekna…
Continue
iPhone 17 Pro Max · iOS 26.218 fps
$4.99
Buy eSIM

view-only MJPEG · up to 4 simulators per run

scenarios & verdicts

Plain language in. Evidence out.

Write the test the way you'd brief a QA engineer — testcat turns it into actions, verifications, and a verdict you can trust. A completion gate cross-examines every success claim: no executed actions, no pass.

COMPLETION GATE
"passed" · 1 observation · 0 actionsrejected
hollow claims re-prompted twice — then failed honestly
SCENARIO

Install the build on two simulators. Register with a fresh account on each, buy the cheapest eSIM with the test card, and verify the order appears in both accounts' history.

47 TOOL CALLS · 12M 41S
PASSED 23 actions · 14 verifications · 2 devices
  • fresh accounts registered on both simulators
  • checkout completed with test card · order id captured
  • order visible in history on device A and device B
physical devices

Simulators — and your real iPhone.

The agent drives physical devices through an XCUITest runner testcat signs and installs for you.

TestFlight builds workalready on the phone? no .app file needed — launched by bundle id
Free Apple ID is enoughrunner auto-signed & auto-prepared at the start of every run
Same skill, same agentdescribe-ui refs · layout-safe text entry · evidence discipline
AUTOMATION RUNNING
Continue
run dashboard

Every run, replayable.

Chat, tool calls, screenshots and network traffic — persisted to a local SQLite dashboard. Nothing leaves your Mac.

chat replayscreenshotsnetworkevents
testcat.sqlite · local
Purchase flow — 2 devicesclaude · sonnet · highpassed12m 41stoday 11:54
Onboarding + login replayollama · gemma4:26bpassed4m 07stoday 10:12
Seyahat Arkadaşları Arşivlemeclaude · sonnet · highrunning08:22now
Regression — plans listcodex · gpt-5.5failed9m 58syesterday
Smoke — fresh install bootclaude · haiku · mediumpassed1m 44syesterday

failed runs keep their full evidence trail — reproduce from the exact step that broke

bonus · local-model assist

Small local models,
guided to the finish.

Before a weak local model runs, a strong model explores your build once and caches an app map + login flow. Runs then replay login deterministically with fresh per-run accounts — credentials injected at runtime, redacted in logs.

explore once cache app map replay login let gemma test
get started

Up and running in minutes.

macOS on Apple Silicon · Xcode for simulators · an agent CLI (or a local Ollama daemon)

RECOMMENDED

Download the app

Unsigned build — bypass Gatekeeper once with right-click → Open, or:

xattr -cr /Applications/testcat.app
Get the DMG
FROM SOURCE

Build it yourself

pnpm 9 + Node 24 + Xcode. The in-app setup guide checks the rest.

git clone https://github.com/bozkurtemre/testcat.git cd testcat pnpm install && make sim-build pnpm dev