An introduction for developers
Your agent reads the code all day. It has never once seen the app run.
The problem
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
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
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. About sixty tools land in the agent's hands, and it picks the right ones on its own.
Capabilities
Console and native logs, full network traffic, screenshots, OCR, and a text snapshot of the whole screen with tap-ready coordinates.
Tap by testID, visible text or component name — with fallback down to accessibility, OCR, then raw coordinates. Swipe, long-press, type, pinch, deep-link.
The React fiber tree: props, hooks, state, per-ancestor frames, and the source file and line behind any coordinate on screen.
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.
Nine prebuilt skills chain these into workflows. /session-setup, /debug-logs, /network-inspect, /component-inspect and five more — each with trigger rules, so the agent reaches for the right one unprompted rather than improvising a tool order.
A real session
src/store/cartSlice.ts:52
Nothing 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
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.
"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.
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
execbro-sdk buffers from the first line and closes that gap.Setup · about four minutes
# this project only — writes .mcp.json, commit it for the team
claude mcp add execbro --scope project -- npx -y execbro@latest
Prefer project scope: --scope user starts ExecBro in every session, including repos with no simulator. Swap in user only if you live in React Native. No install either way — npx fetches the latest. Relaunch Claude Code afterwards.
brew install cameroncooke/axe/axe
Only needed for tap, swipe and typing on the iOS Simulator. Skip it if you're on Android.
npm i execbro-sdk
One 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 }, }); }
The ask
› Connect to the simulator and tell me why the cart badge stays at zero
Pick something you'd normally spend an afternoon on, hand it over, and let the agent do the tapping. Then tell me where it fell over — I wrote it, so a broken tool is a bug I can fix, not a limitation you have to work around.