# @aarwitz/tapp

Let coding agents verify UI changes on real iOS, Android, and web surfaces, then enforce reviewed proof in deterministic CI.

- **Type:** MCP server
- **Trust:** 60/100 (B), scored on the package rubric
- **Verification:** community-indexed — nobody has claimed this listing
- **Version:** 0.17.3
- **Author:** io.github.aarwitz
- **License:** MIT
- **npm:** @aarwitz/tapp
- **Source:** https://github.com/aarwitz/tapp
- **Compatible clients:** claude-code, cursor, copilot, gemini (basis: transport)

## Trust

60/100 (B), scored on the package rubric
- Publisher verified: no
- Install scripts: nothing suspicious found
- Prompt-injection scan: not run
- Obfuscation scan: not run
- Evidence age: 0 days

## Security scan

- **Status:** clean
- **Scanned:** 2026-08-29T02:09:11.085Z
- **Version scanned:** 0.17.3
- **CVEs:** none found by OSV at scan time

## Tools

33 declared. Statically extracted from the shipped source — a floor on the surface, not a census.
- `checkoutCreatesDurableOrder`
- `test-app` — Use Tapp's real app surfaces to inspect, drive, or explore this repository and report evidence honestly.
- `goal` — What to verify, such as finding bugs or exercising checkout
- `target` — Optional repo target, bundle/app id, APK path, or owned URL
- `tapp_health` — Check Tapp workspace and toolchain availability
- `tapp_build` — Build the user's iOS app for the simulator from an Xcode project/workspace (auto-detects the
- `tapp_capture` — Run headless capture workflows using scripts/quick-capture.sh
- `tapp_parse_markers` — Parse OCQA markers from a capture run into structured summary
- `tapp_list_captures` — List recent capture runs from captures/
- `tapp_capture_summary` — Show summary metadata for a capture run
- `tapp_explore` — Autonomously explore iOS (appBundleId), Android (androidAppId), OR a web app
- `tapp_init`
- `tapp_actor_config` — Manage the repository-native .tapp/project.json actor/session contract used by init, release-contract generation, and CI. `read` is inspect-only. `set` writes a
- `tapp_release_plan`
- `tapp_ci_setup` — Complete the local release-contract onboarding loop from the shared application model. `inspect` renders a target-aware GitHub workflow and machine-readable CI 
- `tapp_ui_map` — Use Tapp's first-class platform-neutral UI Map: evidence-grounded screen states, semantic controls, transitions, platform variants, provenance, and task/contrac
- `tapp_task` — Work with repository-native compositional Tasks in .tapp/tasks. Tasks define inputs, outputs, pre/postconditions, platform implementations, and the UI Map state
- `tapp_release_contract` — Work with repository-native TypeScript release contracts in .tapp/contracts. Contracts express business guarantees through reusable Tasks, named actors, exact/e
- `tapp_pr_plan`
- `tapp_flow_run` — Replay a deterministic, authored end-to-end test (a Flow) against iOS (XCUITest), Android
- `tapp_scenario_run` — Replay a repository-native system test whose named actors run in isolated browser contexts against shared application state.
- `tapp_flow_generate` — Write a deterministic E2E Flow from a natural-language goal (e.g. 'sign in and open Settings'),
- `tapp_flow_save` — Save what you've done in the CURRENT interactive session as a reusable, deterministic Flow
- `tapp_ui_tree` — Dump the accessibility (UI) tree of the current screen of an installed iOS or Android app —
- `tapp_screenshot` — Return an inline image of whatever is CURRENTLY on the booted simulator. It does NOT launch or
- `tapp_open_app` — Launch an installed iOS or Android app and return a SCREENSHOT of the screen it lands on
- `tapp_list_simulators` — List available iOS simulators (name, udid, state, runtime, booted) so you can pick or boot one before running QA.
- `tapp_boot_simulator` — Boot an iOS simulator by udid (preferred) or name so Tapp can run against it. No-op if already booted.
- `tapp_install_app` — Build a target iOS app for the booted simulator and install it, so it's ready for tapp_explore or
- `tapp_session_start` — Start a PERSISTENT interactive session against an installed iOS/Android app, a web URL, or an
- `tapp_focus`
- `tapp_session_act` — Perform ONE action in the active interactive session and get the resulting screen back (the fresh
- `tapp_session_end` — End the active interactive session (quits the app + harness). Always call this when done.

## Install

**Verdict: review** — Installable, but 1 thing to check first: No publisher has proved control of this listing; it is indexed, not vouched for.
**Cautions** (coverage gaps and advisories — never blocking)
- No publisher has proved control of this listing; it is indexed, not vouched for.
**Config** (claude-code):
```json
"{\n  \"mcpServers\": {\n    \"tapp\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@aarwitz/tapp\"\n      ]\n    }\n  }\n}"
```

## Blast radius

Moderate to extensive — no credential declaration found, from the publisher, the upstream registry, or the README. Known so far: mutates data; runs on your machine.
- Floor 30, ceiling 54 (tier: unknown)
- `unknown` means the floor and ceiling land in different bands — not measured enough to name one. It does not mean low.
- This is impact, not likelihood. A high radius is not a defect: a filesystem server is supposed to write files. It is never part of the trust score.

## Machine-readable views of this entry

- Signed JSON: https://forgeregistry.com/api/v1/packages/%40aarwitz%2Ftapp
- Install plan: https://forgeregistry.com/api/v1/packages/%40aarwitz%2Ftapp/install-plan
- Alternatives: https://forgeregistry.com/api/v1/alternatives/%40aarwitz%2Ftapp
- HTML page: https://forgeregistry.com/registry/%40aarwitz%2Ftapp
- MCP: POST https://forgeregistry.com/api/mcp → `forge_get_package` / `forge_install_plan`

## About this document

Generated by Forge (https://forgeregistry.com) — a compact rendering of the same record served, signed, at the JSON URL above. Trust and scan facts are the registry's own measurements; anything Forge did not measure is named as unmeasured rather than omitted.
