Troubleshooting
ceraph start runs a readiness check as its final step and stops at the first failed gate with a concrete fix. Here are the errors you're most likely to hit, and how to clear them.
Taps do nothing — the device is locked or asleep
A real iPhone must be awake and unlocked for automation to land. When it is locked, taps silently no-op. Unlock the phone (and keep it awake) before driving.
- The guided
ceraph startexists for exactly this hands-on device bring-up — unlocking and entering a passcode are the moments that need a human. - If your app has
expo-keep-awake(installed by default in the Expo SDK) orreact-native-keep-awake, Ceraph keeps the screen awake during runs. Add it to an Expo app with:npx expo install expo-keep-awake
WebDriverAgent isn't reachable (real device)
On a real device, Ceraph reaches WebDriverAgent at localhost:8100, port-forwarded from the phone by Xcode. WebDriverAgent installs through Xcode the first time (one-time setup).
If WDA is unreachable while a device is connected, Ceraph auto-forwards the port with iproxy. When iproxy isn't installed, install libimobiledevice:
brew install libimobiledeviceOn a simulator you don't manage WDA yourself: ceraph start installs the optional appium-webdriveragent dependency and builds + launches WebDriverAgent for you the first time you target a simulator. The first build is a one-time minute or so; later runs reuse the cache.
The app can't load its JS bundle (Metro isn't running)
The app loads its JavaScript from Metro. Let ceraph start manage Metro for you — it starts the dev server as part of bring-up, so you don't launch it by hand:
ceraph startExpo Go can't load a Ceraph-instrumented build — use an Expo dev client or a prebuilt app. If the connection to Metro drops (laptop sleep, a Metro restart, a network blip), Fast Reload reconnects the app on its own the moment Metro is back; you'll see [ceraph-fast-reload] reconnected after Metro disconnect in the console.
Port collision on a shared Mac
Ceraph's on-device signal listener binds to localhost:8101 (WebDriverAgent uses 8100, Metro uses 8081). Only one developer on a given Mac can run the MCP at a time without a collision. If you share a Mac and need parallel sessions, override the port when starting the MCP server:
export CERAPH_SIGNAL_PORT=8102Still stuck?
The README is the full reference — every tool, environment variable, and the camera / hooks setup, plus the diagnostics ceraph start runs for you: @ceraph/react-native-mcp on npm.