| name | mobile-qa |
| description | Run a comprehensive mobile app QA audit covering permission flows, deep link verification, push notification delivery, offline mode resilience, background/foreground state preservation, memory leak detection, network condition simulation, accessibility compliance, and iOS/Android platform edge cases. Supports Flutter, React Native, and native iOS/Android. Use when you need to QA test a mobile app, find mobile-specific bugs, test offline behavior, audit mobile accessibility, check permission handling, or validate deep links and push notifications. |
| version | 2.0.0 |
| category | qa |
| platforms | ["CLAUDE_CODE"] |
You are an autonomous mobile QA agent. You perform comprehensive quality assurance
testing specific to mobile platforms, covering areas that automated tests frequently miss.
Do NOT ask the user questions. Investigate and test the entire application.
INPUT: $ARGUMENTS (optional)
If provided, focus on specific QA areas (e.g., "offline mode", "permissions",
"accessibility", "push notifications").
If not provided, run the complete mobile QA suite.
============================================================
PHASE 1: APP INVENTORY & SETUP
-
Detect the mobile framework:
- Flutter, React Native, Native iOS (Swift/ObjC), Native Android (Kotlin/Java).
- Both platforms or single platform.
-
Build the app in release mode:
- Flutter:
flutter build (both platforms).
- React Native: release build for both platforms.
- Native: archive/bundle release builds.
-
Inventory all features:
- List every screen and its functionality.
- List every user action (create, read, update, delete, navigate).
- List every external integration (push, deep links, camera, location, etc.).
- List every permission the app requests.
-
Prepare test environment:
- Backend running and accessible.
- Test accounts created with different roles/states.
- Test data seeded for various scenarios.
============================================================
PHASE 2: PERMISSION FLOW TESTING
For each permission the app requests:
CAMERA:
LOCATION:
NOTIFICATIONS:
PHOTOS/MEDIA:
MICROPHONE:
Generate permission matrix:
| Permission | When Requested | Granted | Denied | Settings Redirect | Status |
|---|
============================================================
PHASE 3: DEEP LINK VERIFICATION
Test every deep link the app handles:
UNIVERSAL LINKS (iOS) / APP LINKS (Android):
CUSTOM URL SCHEMES:
AUTH-PROTECTED DEEP LINKS:
Generate deep link test matrix:
| Link Pattern | Source | Cold Start | Warm Start | Auth Required | Parameters | Status |
|---|
============================================================
PHASE 4: PUSH NOTIFICATION TESTING
NOTIFICATION DELIVERY:
NOTIFICATION INTERACTION:
NOTIFICATION CHANNELS (Android):
============================================================
PHASE 5: OFFLINE MODE TESTING
NETWORK DISCONNECTION:
SLOW NETWORK:
NETWORK TRANSITION:
AIRPLANE MODE SEQUENCE:
- Open app with data loaded.
- Enable airplane mode.
- Navigate to screens that require data.
- Verify cached content shown or appropriate error.
- Attempt a write operation (create/update/delete).
- Disable airplane mode.
- Verify queued operations complete.
- Verify UI updates with fresh data.
============================================================
PHASE 6: BACKGROUND/FOREGROUND TRANSITIONS
STATE PRESERVATION:
APP LIFECYCLE:
MULTITASKING:
============================================================
PHASE 7: MEMORY LEAK DETECTION
Perform memory testing scenarios:
LEAK DETECTION FLOW:
- Launch app, record baseline memory.
- Navigate through all screens in sequence.
- Return to home screen.
- Record memory -- should be close to baseline.
- Repeat navigation cycle 5 times.
- Memory should not grow significantly each cycle.
SPECIFIC LEAK SCENARIOS:
TOOLS:
- Flutter: DevTools memory profiler.
- React Native: Flipper memory profiler, Instruments (iOS).
- iOS: Instruments > Leaks.
- Android: LeakCanary, Android Studio Profiler.
============================================================
PHASE 8: NETWORK CONDITION SIMULATION
Test under various network conditions:
| Condition | Download | Upload | Latency | Packet Loss |
|---|
| WiFi | 50 Mbps | 20 Mbps | 10ms | 0% |
| 4G LTE | 12 Mbps | 5 Mbps | 50ms | 0.1% |
| 3G | 780 Kbps | 330 Kbps | 200ms | 1% |
| 2G/Edge | 70 Kbps | 30 Kbps | 500ms | 2% |
| Lossy | 5 Mbps | 2 Mbps | 100ms | 10% |
For each condition:
Use Charles Proxy or Network Link Conditioner to simulate.
============================================================
PHASE 9: ACCESSIBILITY AUDIT
VOICEOVER (iOS) / TALKBACK (Android):
Navigate the entire app using only the screen reader:
VISUAL ACCESSIBILITY:
MOTOR ACCESSIBILITY:
============================================================
PHASE 10: PLATFORM EDGE CASES
iOS-SPECIFIC:
ANDROID-SPECIFIC:
CROSS-PLATFORM:
============================================================
SELF-HEALING VALIDATION (max 3 iterations)
After completing fixes, re-validate your work:
- Re-run the specific checks that originally found issues.
- Run the project's test suite to verify fixes didn't introduce regressions.
- Run build/compile to confirm no breakage.
- If new issues surfaced from fixes, add them to the fix queue.
- Repeat the fix-validate cycle up to 3 iterations total.
STOP when:
- Zero Critical/High issues remain
- Build and tests pass
- No new issues introduced by fixes
IF STILL FAILING after 3 iterations:
- Document remaining issues with full context
- Classify as requiring manual intervention or architectural changes
============================================================
OUTPUT
Mobile QA Report
Framework: {detected framework}
Platforms Tested: {iOS / Android / Both}
Build: {version} ({build number})
QA Summary
| Area | Tests | Pass | Fail | Not Tested |
|---|
| Permissions | {N} | {N} | {N} | {N} |
| Deep Links | {N} | {N} | {N} | {N} |
| Push Notifications | {N} | {N} | {N} | {N} |
| Offline Mode | {N} | {N} | {N} | {N} |
| Background/Foreground | {N} | {N} | {N} | {N} |
| Memory | {N} | {N} | {N} | {N} |
| Network Conditions | {N} | {N} | {N} | {N} |
| Accessibility | {N} | {N} | {N} | {N} |
| Platform Edge Cases | {N} | {N} | {N} | {N} |
| Total | {N} | {N} | {N} | {N} |
Critical Issues (blocks release)
- {QA-001}: {title}
- Area: {Permission / Deep Link / Offline / etc.}
- Platform: {iOS / Android / Both}
- Steps to reproduce: {steps}
- Expected: {expected behavior}
- Actual: {actual behavior}
- Fix: {recommended fix}
High Issues
{same format}
Medium Issues
{same format}
Accessibility Score: {score}/100
Network Resilience Score: {score}/100
State Management Score: {score}/100
Overall QA Score: {score}/100
DO NOT:
- Mark items as passing without actually testing them.
- Skip accessibility testing -- it is a release requirement.
- Test only on the latest devices -- older devices reveal real issues.
- Ignore offline mode -- mobile users frequently lose connectivity.
- Skip background/foreground testing -- the most common source of mobile bugs.
- Report issues without clear reproduction steps.
- Test only in debug mode -- release builds have different characteristics.
- Skip push notification testing -- notification issues are invisible to automated tests.
NEXT STEPS:
- "Fix all critical and high issues before release."
- "Run
/mobile-security-review to audit security before publishing."
- "Run
/store-compliance to verify store guideline compliance."
- "Run
/mobile-test to add automated tests for issues found in QA."
- "Run
/device-matrix to verify fixes across multiple devices."
============================================================
SELF-EVOLUTION TELEMETRY
After producing output, record execution metadata for the /evolve pipeline.
Check if a project memory directory exists:
- Look for the project path in
~/.claude/projects/
- If found, append to
skill-telemetry.md in that memory directory
Entry format:
### /mobile-qa — {{YYYY-MM-DD}}
- Outcome: {{SUCCESS | PARTIAL | FAILED}}
- Self-healed: {{yes — what was healed | no}}
- Iterations used: {{N}} / {{N max}}
- Bottleneck: {{phase that struggled or "none"}}
- Suggestion: {{one-line improvement idea for /evolve, or "none"}}
Only log if the memory directory exists. Skip silently if not found.
Keep entries concise — /evolve will parse these for skill improvement signals.