Or run the package directly: npx -y @aarwitz/tapp@latest init . --explore
Unedited footage of the tapp desktop app. Drop a repo in, and tapp builds it, boots a simulator, explores the app on its own, finds the bugs that were planted in it, and maps every screen it reached.
iOS, Android, web, and Windows desktop — tapp drives the real thing, not a mock. Same commands, same evidence, same CI check on every platform.
Runs your app on the iOS Simulator using Apple's own UI-testing hooks. Nothing gets added to your app — no SDK, no Appium.
Drives your app on an emulator or a plugged-in device through ADB. Point it at an APK, or let it build your Gradle project.
Explores your web app in a real Chromium browser and catches broken links, failed requests, missing assets, and JavaScript errors.
WPF, WinForms, and WinUI apps, driven through Windows UI Automation — the same commands, evidence, and CI check. Early Windows runs are set up through the pilot.
Give it to your agent as a skill, run it from the terminal, add it over MCP to get screenshots inside the chat, or run the same check in GitHub Actions — on macOS, Linux, or Windows.
Every one runs on your machine, on the real app, and hands back evidence. No API key.
tapp_exploreExplore the app on its own and report what it found, what it covered, and what it couldn't reach. An observation, not a verdict.
tapp_lookOne screen: a summary and a screenshot, with the accessibility tree on request.
tapp_sessionDrive the app step by step — tap, type, swipe, go back, wait — and see each screen.
tapp_runReplay a committed Flow, Task, contract, or Scenario. Deterministic, keyless.
tapp_mapThe UI map a run built: which screens exist and how it got to each one.
tapp_ciThe merge gate. The only thing here that returns pass, fail, or inconclusive.
Exploration behaves like a curious user: it taps everything and reports crashes, dead buttons,
failed sign-ins, screens stuck loading, and dead ends — and on web, broken links, failed
requests, and JavaScript errors. It reports; it doesn't decide. The
gate decides, and it's deterministic: the same evidence and the same rules
always give the same answer. If a run was too shallow to tell, the answer is
inconclusive — never a pass.
The checks that matter ran and passed.
Something broke, or a journey that used to work no longer does.
tapp couldn't gather enough evidence to say — so it doesn't.
Pick the journeys that must keep working — checkout, sign-in, onboarding — and tapp runs them on the real app for every PR. Each PR gets one answer, with evidence: did this change break something that used to work?
We're taking a small number of paid pilot teams. We set tapp up on your repo, pick the journeys that matter, and wire up the CI check — together. tapp itself is MIT licensed and runs on infrastructure you control.