Part of Mobile DevTools — open-source tools for mobile engineering teams.
Claude reviews mobile PRs by booting a cloud simulator, tapping through the app, and posting a link to the recording.
That's a real PR review. Claude read the diff, started a Pixel 7 simulator on Revyl, navigated to the changed screen, hit a bug, and posted a comment with the recording link. ~90 seconds. No test code, no YAML, no maintenance.
Two recordings from the bundled Bug Bazaar sample app — the same flow, different platforms in parallel:
- Android — session 76a6daae · Pixel 7 · 1:36
- iOS — session 2960f466 · iPhone 17 Pro Max · 1:34
A full sample PR comment is in examples/sample-pr-comment.md.
-
Fork this repo. The bundled
sample-app/is Bug Bazaar — it builds out of the box and has a real bug to demo against. -
Add 5 secrets in Settings → Secrets and variables → Actions:
Secret Where to get it ANTHROPIC_API_KEYconsole.anthropic.com REVYL_API_KEYapp.revyl.ai → Settings → API Keys REVYL_APP_ID_ANDROIDrevyl app create --name "myapp-android" --platform android --jsonREVYL_APP_ID_IOSrevyl app create --name "myapp-ios" --platform ios --jsonEXPO_TOKENOnly if your build uses Expo (the sample app does) -
Open a PR. The bot reviews on PR open and on
/reviewcomments.
If you only support one platform, set just that platform's REVYL_APP_ID_* and drop the other from strategy.matrix.platform in .github/workflows/review.yml.
For each PR, two parallel jobs (Android + iOS) start a Revyl cloud simulator, hand control to Claude, and let it loop:
1. revyl device screenshot → Read the PNG
2. Decide the next action from what's on screen
3. revyl device tap --target "..." (or swipe / type)
4. Repeat
When Claude is done — or sees a bug — it posts a PR comment with the recording link. The recording has the video and every action Claude took. Claude is the planner; there's no test plan written ahead of time, no DSL, no YAML.
Three files the bot reads: CLAUDE.md (the reactive loop), CLAUDE-test.md (optional /test mode), .github/workflows/review.yml (the trigger). That's the whole product.
If your team already has Revyl tests or workflows, the bot can trigger one against the PR build instead of doing a free-form review. Add one of these as a repo secret:
REVYL_TEST_NAME— name of an existing Revyl testREVYL_WORKFLOW_NAME— name of an existing Revyl workflow
Then comment /test on a PR. Claude runs revyl test run "$REVYL_TEST_NAME" --json --verbose, parses report_link, posts it. No test design, no YAML — trigger and report. Leave both secrets unset to disable. See CLAUDE-test.md.
Replace sample-app/ with your source, or point the Build app step in .github/workflows/review.yml at your existing CI artifact:
- name: Build app
run: |
if [ "${{ matrix.platform }}" = "android" ]; then
./gradlew assembleDebug
else
xcodebuild -scheme MyApp -sdk iphonesimulator -configuration Debug
fiThen edit the bottom of CLAUDE.md (the "Demo hint" section) to describe your screens — bottom tabs, top-level routes, login flow, anything Claude needs to know to navigate confidently.
To swap models, edit claude_args: --model claude-sonnet-4-5 in the workflow. claude-opus-4-6 for harder reviews, claude-haiku-4-5 for cheaper smoke tests.
MIT
