Debug-only framework that gives LLM agents structured access to your iOS, Android, Flutter, and React Native apps. Like Playwright, but for native -- with direct access to UI, state, navigation, network traffic, and WebView DOM.
One line of code starts a standards-compliant MCP server in your debug build. Agents find it automatically over the local network.
Add the library and call AppReveal.start() in your debug build.
An HTTP server starts on a dynamic port and advertises via mDNS on the LAN.
Any MCP client on the network discovers the service automatically.
The agent calls MCP tools to inspect, navigate, and interact with the app.
Screenshot-based automation is fragile and token-expensive. AppReveal gives agents direct access to what they actually need.
From UI inspection to network traffic capture, all through a standardized MCP interface.
Know exactly which screen is active with controller chains, route state, and confidence scoring.
Every visible interactive element with type, label, state, frame, and available actions.
Tap, type, scroll, navigate back, dismiss modals, switch tabs -- all by element ID.
Read login status, user data, cart contents, feature flags, and navigation stack directly.
Every HTTP call with method, URL, status, duration, and response data. Sensitive headers redacted.
Full DOM inspection and interaction inside WebViews -- click, type, select, evaluate JS.
Every tool works the same way on iOS, Android, Flutter, and React Native.
get_screen Current screen identity and metadataget_elements Visible interactive elementsget_view_tree Full view hierarchytap_element Tap by element IDtap_point Tap at coordinatestype_text Type into a fieldclear_text Clear a text fieldscroll Scroll a containerscroll_to_element Scroll until visiblescreenshot Capture as PNG/JPEGselect_tab Switch tabsnavigate_back Pop navigationdismiss_modal Dismiss modalopen_deeplink Open a URLget_state App state snapshotget_navigation_stack Current routes and modalsget_feature_flags Active feature flagsget_network_calls Recent HTTP trafficget_logs Recent app logsget_recent_errors Captured errorslaunch_context App and device infodevice_info Hardware, OS, screen, batteryget_webviews List all web viewsget_dom_tree Full or partial DOMget_dom_interactive Inputs, buttons, linksquery_dom CSS selector queryfind_dom_text Find by text contentweb_click Click DOM elementweb_type Type into inputweb_select Select dropdown optionweb_toggle Toggle checkbox/radioweb_scroll_to Scroll to elementweb_evaluate Run JavaScriptweb_navigate Navigate to URLweb_back Go backweb_forward Go forwardget_dom_summary Page overviewget_dom_text Visible text onlyget_dom_links All linksget_dom_forms All forms with fieldsget_dom_headings H1-H6 structureget_dom_images All imagesget_dom_tables Table databatch Execute multiple tools at onceAdd the dependency, call start, and your app is agent-ready.
// Package.swift dependency .package(url: "https://github.com/UnlikeOtherAI/AppReveal.git", from: "0.4.0") // In your AppDelegate or @main struct #if DEBUG AppReveal.start() #endif
// build.gradle.kts debugImplementation("com.appreveal:appreveal") releaseImplementation("com.appreveal:appreveal-noop") // In your Application.onCreate() if (BuildConfig.DEBUG) { AppReveal.start(this) }
# pubspec.yaml dependencies: appreveal: path: Flutter/appreveal // main.dart void main() { WidgetsFlutterBinding.ensureInitialized(); AppReveal.start(); // no-ops in release runApp(AppReveal.wrap(const MyApp())); }
// Install npm install react-native-appreveal cd ios && pod install // In your App.tsx import { AppReveal } from 'react-native-appreveal'; if (__DEV__) { AppReveal.start(); }
Zero production footprint. Compile-time guarantees, not runtime checks.
All framework code is wrapped in compiler directives. Not a single byte ships in release builds.
Library is a debug dependency only. The no-op stub ensures release builds compile without code changes.
The HTTP server binds to the local network interface. Not accessible from the internet.
Authorization, Cookie, and other sensitive headers are automatically redacted in network captures.