Ship with proof.

Your coding agent has hands — tapp gives it judgment. Autonomous QA that explores the app like a user (iOS simulator or real browser), detects what's broken, and returns a deterministic ship/no-ship verdict with evidence. No test code. No app changes.

View on GitHub Hosted release gate →
claude mcp add tapp -- npx -y tapp-mcp mcp
you: "Add a logout button to the settings screen"
agent: *writes the Swift*
agent: *tapp: builds, opens the app, navigates to Settings, screenshots it*
agent: "Done — and here it is working on the simulator: [screenshot]"
Platforms

One judgment layer. Every surface your agent builds for.

Every driver speaks the same protocol, so the exploration, detectors, verdict, and regression gate are identical everywhere.

📱

iOS — the missing Playwright for iOS

Hands and judgment: a generic XCUITest harness drives any app on the simulator via the accessibility surface. Native — no Appium, no WebDriverAgent, no SDK.

🌐

Web — beta

Built on Playwright: your agent already has browser hands; tapp adds autonomous exploration and detectors for uncaught exceptions, failed requests, dead buttons, broken links, and error pages.

🖥

tapp.app — coming soon

A macOS cockpit around the same engine: import a project, click Run, watch QA live, get the decision card. Free download, in packaging.

Free, forever, local

19 tools. No test code. No app changes.

tapp explores like a user, acts like a user, screenshots what it sees. Everything runs locally on your Mac; nothing leaves it.

👁

tapp_open_app

Launch the app, get a screenshot + accessibility tree back in seconds.

🕹

tapp_session_*

Interactive driving — the Playwright loop. Tap, type, swipe, back, wait.

🧪

tapp_run_qa

Autonomous QA — explores the app (iOS bundle id or web URL), returns {verdict, confidence, findings[]}.

🔁

tapp_flow_*

Record a session as a replayable Flow, or generate one from a goal in plain English.

📱

tapp_boot_simulator

Simulator + app install management — list, boot, install.

🩺

tapp_health

Diagnostics, capture history, marker parsing.

The verdict you can trust

Deterministic. No LLM in the run loop.

tapp explores like a user and detects crashes, failed sign-ins, dead buttons, stuck loading screens, navigation dead ends — and on web, uncaught exceptions, failed requests, and broken links — then commits to a verdict. Same build in, same verdict out. A shallow run is never ready. Absence of findings is not a pass.

🟢 ready

Genuinely explored, no blockers found.

🟡 caution

Issues to review, or the run couldn't see enough.

🔴 blocked

A release-blocking issue was found.

For teams

The release gate, hosted.

Install the tapp GitHub App and every PR gets one question answered with evidence: did this break anything that worked in your last release? A fleet of simulated users runs your app's real workflows — new crashes, dead screens, lost content, and broken flows are caught against a baseline and posted as a check + comment, with an honest account of what wasn't checked. No runners, no PATs, no YAML. iOS today; web next.

  • Explores your PR build on a real simulator, no test code required
  • Fails the check on new high/critical findings — not pre-existing debt
  • Sticky PR comment with the verdict, evidence, and a full report link
  • Currently onboarding a small number of design partners by hand
🟢 SHIP-READY
Confidence100%
Screens explored4
Findings0
GatePASS