ExecBroReact Native DevTools for AI Coding Agents
Like Chrome DevTools MCP — but for React Native. Your AI agent navigates the UI, reads network, logs, and internal state, and builds and debugs features end to end.
- 1e9bc702124/30 days2,768
- 2a5c7605822/30 days2,377
- 3d6e1167f20/30 days1,127
- 48b40e35c20/30 days1,058
- 54d5f286519/30 days18,376
- 6a4671acf19/30 days2,264
- 70d4e816718/30 days3,083
- 8e732237d16/30 days4,422
- 9bedeb36016/30 days3,874
- 10fbce743316/30 days2,326
For developers, on their own development builds, simulators, and emulators. Not for production apps or end-user devices.
The problem
Today, you are the agent's hands.
↺ repeat 6–10 times per bug
Half of every debugging session is a human being used as an I/O device. The agent is not slow because it's dumb — it's slow because it's working from a description of the app instead of the app.
The blind spot
Static truth is not runtime truth.
What the agent has
at rest- ✓Every source file, fully
- ✓Types, imports, the dependency graph
- ✓Git history and past decisions
- ✓Test output — for code paths tests reach
What it can't reach
while running- ✕What's actually on screen right now
- ✕Console output and native crashes
- ✕The real request, the real response body
- ✕Redux / Query state at the moment it breaks
- ✕Which component renders that pixel
- ✕Whether its own fix worked
A large share of real bugs live entirely in that right-hand column. It's exactly the column the agent has to ask you about.
What it is
One MCP server that plugs the agent into the running app.
It speaks the protocols the tooling already uses — Chrome DevTools Protocol through Metro's inspector, plus adb and simctl for the device itself. Nothing to change in the app to start: point it at a running Metro and it connects to every attached device. 62 toolsland in the agent's hands, and it picks the right ones on its own.
Capabilities
Four things it gains: eyes, hands, x-ray, a lever.
Read the running app
Console and native logs, full network traffic, screenshots, OCR, and a text snapshot of the whole screen with tap-ready coordinates.
- get_logs · get_network_requests
- get_screen_state · ios_screenshot
Drive the device
Tap by testID, visible text or component name — with fallback down to accessibility, OCR, then raw coordinates. Swipe, long-press, type, pinch, deep-link.
- tap · swipe · input_text
- reload_app · navigate
Inspect what rendered
The React fiber tree: props, hooks, state, per-ancestor frames, and the source file and line behind any coordinate on screen.
- inspect_at_point · find_components
- redux_get_state · execute_in_app
Bend the conditions
Mock or tamper with a response so the error branch runs through your real code. Go offline, fail only the first retry, replay a captured request with one field changed.
- network_mock · network_condition
- network_replay
A real session
One prompt. No human in the loop.
src/store/cartSlice.ts:52Nothing here was pasted in by hand. It navigated, tapped, watched the network, read the store, and located the line — then it can fix it and tap the button again to confirm.
Where it pays off
Three jobs most teams do the hard way.
Debug something reproducible
Describe the symptom and let it reproduce the bug itself. It reaches the screen, triggers the failure, and reads logs, network and state at the moment it happens — instead of asking you for all three, one message at a time.
Verify what you just shipped
“You changed the checkout flow — go run it.” It walks the whole flow on the simulator and reports what it saw. Catches the class of miss where the code is right and the wiring isn't.
Test error paths without breaking a backend
Mock the 500, the timeout, the malformed body, the flaky first attempt. Your real request builder, error branch and retry all run — no staging changes, no asking a backend team to break something for ten minutes.
Honest limits
What it does not do.
Setup · about four minutes
Getting it running.
Register the server with Claude Code
# this project only — writes .mcp.json, commit it and the team gets it too
claude mcp add execbro --scope project -- npx -y execbro@latest
# or everywhere, if you live in React Native
claude mcp add execbro --scope user -- npx -y execbro@latestPrefer --scope project. ExecBro does nothing without a Metro server, so --scope user starts it in every session you open — including the backend and web repos where there is no simulator to talk to. Project scope also writes a .mcp.json you can commit, so the rest of the team gets it without doing anything.
No install either way — npx fetches the latest on demand. Quit and relaunch Claude Code afterwards so it picks the server up.
Add the iOS automation driver
brew install cameroncooke/axe/axeOnly needed for tap, swipe and typing on the iOS Simulator. Skip it if you're on Android.
Optional — but the biggest single upgrade
npm i execbro-sdkOne init() in the app entry hands the agent direct references to the things it otherwise has to guess at from the outside — whatever state containers the app uses, the navigation container, and the HTTP client itself, so it can issue a request through the app's real interceptors. Plus full request and response bodies, and every log from the first line of startup.
// index.js — dev only, tree-shaken out of release
import { init } from "execbro-sdk";
import { store } from "./store"; // Redux, Zustand, MobX…
import { queryClient } from "./queryClient"; // TanStack, Apollo…
import { http } from "./api/client"; // axios, ky, fetch wrapper
import { navigationRef } from "./navigation";
if (__DEV__) {
init({
// any state containers, keys are yours to name
stores: { redux: store, queryClient },
// routes and params it can inspect
navigation: navigationRef,
// anything else worth reaching — HTTP client,
// MMKV, feature flags, your own singletons
custom: { http },
});
}Optional — hand it the workflows
Nine prebuilt Claude Code skills chain these tools into the sequences that actually work — /session-setup, /debug-logs, /network-inspect, /component-inspect and five more. Each one also carries its own trigger rules, so Claude reaches for the right one unprompted: /bundle-check when it sees a red screen, /session-setup when nothing is connected yet. Browse the skills →
Try it
Take one bug this week and don't touch the simulator.
Pick something you'd normally spend an afternoon on, hand it over, and let the agent do the tapping. The whole first message looks like this:
No tool names, no setup ceremony — scan_metro finds every attached device on its own, and the agent picks the rest.
For developers, on their own development builds, simulators, and emulators. Not for production apps or end-user devices.