mobile-ai-agents 1.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +228 -0
- package/CLAUDE.md +236 -0
- package/LICENSE +21 -0
- package/README.md +652 -0
- package/agents/android/android-crash-analyzer/README.md +134 -0
- package/agents/android/android-crash-analyzer/agent.md +206 -0
- package/agents/android/android-crash-analyzer/example-input.md +138 -0
- package/agents/android/android-crash-analyzer/example-output.md +225 -0
- package/agents/android/anr-investigation/README.md +78 -0
- package/agents/android/anr-investigation/agent.md +117 -0
- package/agents/android/anr-investigation/example-input.md +62 -0
- package/agents/android/anr-investigation/example-output.md +103 -0
- package/agents/android/axiom/agent.md +197 -0
- package/agents/android/code-reviewer/README.md +108 -0
- package/agents/android/code-reviewer/agent.md +210 -0
- package/agents/android/code-reviewer/example-input.md +116 -0
- package/agents/android/code-reviewer/example-output.md +115 -0
- package/agents/android/compose-navigation/README.md +76 -0
- package/agents/android/compose-navigation/agent.md +121 -0
- package/agents/android/compose-navigation/example-input.md +49 -0
- package/agents/android/compose-navigation/example-output.md +325 -0
- package/agents/android/compose-screen-builder/README.md +95 -0
- package/agents/android/compose-screen-builder/agent.md +170 -0
- package/agents/android/compose-screen-builder/example-input.md +40 -0
- package/agents/android/compose-screen-builder/example-output.md +568 -0
- package/agents/android/compose-ui-reviewer/README.md +73 -0
- package/agents/android/compose-ui-reviewer/agent.md +253 -0
- package/agents/android/compose-ui-reviewer/example-input.md +84 -0
- package/agents/android/compose-ui-reviewer/example-output.md +102 -0
- package/agents/android/crash-analyzer/README.md +53 -0
- package/agents/android/crash-analyzer/agent.md +295 -0
- package/agents/android/memory-leak-analyzer/README.md +79 -0
- package/agents/android/memory-leak-analyzer/agent.md +116 -0
- package/agents/android/memory-leak-analyzer/example-input.md +78 -0
- package/agents/android/memory-leak-analyzer/example-output.md +128 -0
- package/agents/cross-platform/accessibility-auditor/README.md +47 -0
- package/agents/cross-platform/accessibility-auditor/agent.md +268 -0
- package/agents/cross-platform/accessibility-auditor/example-input.md +84 -0
- package/agents/cross-platform/accessibility-auditor/example-output.md +132 -0
- package/agents/cross-platform/appforge/agent.md +303 -0
- package/agents/cross-platform/ci-cd-generator/README.md +65 -0
- package/agents/cross-platform/ci-cd-generator/agent.md +422 -0
- package/agents/cross-platform/ci-cd-generator/example-input.md +69 -0
- package/agents/cross-platform/ci-cd-generator/example-output.md +261 -0
- package/agents/cross-platform/crasher/agent.md +221 -0
- package/agents/cross-platform/figma/agent.md +247 -0
- package/agents/cross-platform/launchpad/agent.md +330 -0
- package/agents/cross-platform/mobile-harness/agent.md +422 -0
- package/agents/cross-platform/mobile-memory/agent.md +429 -0
- package/agents/cross-platform/perf/agent.md +261 -0
- package/agents/cross-platform/pipeline/agent.md +288 -0
- package/agents/cross-platform/release-notes-generator/README.md +63 -0
- package/agents/cross-platform/release-notes-generator/agent.md +218 -0
- package/agents/cross-platform/release-notes-generator/example-input.md +71 -0
- package/agents/cross-platform/release-notes-generator/example-output.md +96 -0
- package/agents/cross-platform/scribe/agent.md +180 -0
- package/agents/cross-platform/security-scanner/README.md +61 -0
- package/agents/cross-platform/security-scanner/agent.md +287 -0
- package/agents/cross-platform/security-scanner/example-input.md +77 -0
- package/agents/cross-platform/security-scanner/example-output.md +141 -0
- package/agents/cross-platform/sentinel/agent.md +217 -0
- package/agents/cross-platform/store-listing-writer/README.md +58 -0
- package/agents/cross-platform/store-listing-writer/agent.md +380 -0
- package/agents/cross-platform/store-listing-writer/example-input.md +67 -0
- package/agents/cross-platform/store-listing-writer/example-output.md +131 -0
- package/agents/flutter/bloc-feature-builder/README.md +101 -0
- package/agents/flutter/bloc-feature-builder/agent.md +225 -0
- package/agents/flutter/bloc-feature-builder/example-input.md +47 -0
- package/agents/flutter/bloc-feature-builder/example-output.md +838 -0
- package/agents/flutter/dart/agent.md +223 -0
- package/agents/flutter/widget-generator/README.md +66 -0
- package/agents/flutter/widget-generator/agent.md +264 -0
- package/agents/flutter/widget-generator/example-input.md +71 -0
- package/agents/flutter/widget-generator/example-output.md +163 -0
- package/agents/gaming/forge/agent.md +197 -0
- package/agents/gaming/unreal/agent.md +200 -0
- package/agents/ios/crash-analyzer/README.md +69 -0
- package/agents/ios/crash-analyzer/agent.md +300 -0
- package/agents/ios/crash-analyzer/example-input.md +83 -0
- package/agents/ios/crash-analyzer/example-output.md +126 -0
- package/agents/ios/swift/agent.md +206 -0
- package/agents/ios/swift-reviewer/README.md +68 -0
- package/agents/ios/swift-reviewer/agent.md +231 -0
- package/agents/ios/swift-reviewer/example-input.md +100 -0
- package/agents/ios/swift-reviewer/example-output.md +127 -0
- package/agents/react-native/bridge/agent.md +212 -0
- package/agents/react-native/performance-optimizer/README.md +81 -0
- package/agents/react-native/performance-optimizer/agent.md +284 -0
- package/agents/react-native/performance-optimizer/example-input.md +104 -0
- package/agents/react-native/performance-optimizer/example-output.md +132 -0
- package/agents/unity/shader-generator/README.md +77 -0
- package/agents/unity/shader-generator/agent.md +270 -0
- package/agents/unity/shader-generator/example-input.md +70 -0
- package/agents/unity/shader-generator/example-output.md +160 -0
- package/agents/unreal/blueprint-advisor/README.md +71 -0
- package/agents/unreal/blueprint-advisor/agent.md +311 -0
- package/agents/unreal/blueprint-advisor/example-input.md +73 -0
- package/agents/unreal/blueprint-advisor/example-output.md +217 -0
- package/cli/index.js +1091 -0
- package/docs/agent-guide.md +138 -0
- package/docs/chatgpt-integration.md +219 -0
- package/docs/core-loops.md +143 -0
- package/docs/cursor-integration.md +143 -0
- package/docs/getting-started.md +132 -0
- package/docs/index.html +711 -0
- package/docs/installation.md +271 -0
- package/docs/mobile-harness.md +160 -0
- package/docs/mobile-mcp.md +172 -0
- package/docs/mobile-memory.md +349 -0
- package/docs/release-process.md +85 -0
- package/docs/releases/release-v1.0.0.md +165 -0
- package/docs/roadmap/github-issues.md +239 -0
- package/docs/skill-categories.md +125 -0
- package/docs/vscode-copilot-integration.md +104 -0
- package/docs/wiki.md +615 -0
- package/install.sh +507 -0
- package/mobile-karpathy.md +79 -0
- package/package.json +57 -0
- package/skills/android/README.md +31 -0
- package/skills/android/android-tdd.md +89 -0
- package/skills/android/anr-investigation.md +251 -0
- package/skills/android/code-review.md +98 -0
- package/skills/android/compose-migration.md +48 -0
- package/skills/android/compose-review.md +78 -0
- package/skills/android/kotlin-modernize.md +51 -0
- package/skills/android/memory-leak-investigation.md +256 -0
- package/skills/android/proguard-rules.md +48 -0
- package/skills/cross-platform/accessibility-audit.md +63 -0
- package/skills/cross-platform/api-versioning.md +59 -0
- package/skills/cross-platform/clean-code-audit.md +239 -0
- package/skills/cross-platform/crash-triage.md +53 -0
- package/skills/cross-platform/deeplink-debug.md +57 -0
- package/skills/cross-platform/feature-slice.md +48 -0
- package/skills/cross-platform/grill-mobile.md +64 -0
- package/skills/cross-platform/mobile-mcp-qa.md +193 -0
- package/skills/cross-platform/mobile-memory-graph.md +179 -0
- package/skills/cross-platform/mobile-memory-save.md +210 -0
- package/skills/cross-platform/mobile-memory-search.md +154 -0
- package/skills/cross-platform/perf-audit.md +61 -0
- package/skills/cross-platform/prd-verification.md +324 -0
- package/skills/cross-platform/release-prep.md +64 -0
- package/skills/cross-platform/security-audit.md +281 -0
- package/skills/cross-platform/store-listing.md +75 -0
- package/skills/flutter/README.md +32 -0
- package/skills/flutter/dart-modernize.md +47 -0
- package/skills/flutter/flutter-review.md +59 -0
- package/skills/flutter/flutter-tdd.md +73 -0
- package/skills/flutter/widget-extract.md +41 -0
- package/skills/flutter/widget-gen.md +131 -0
- package/skills/gaming/blueprint-to-cpp.md +51 -0
- package/skills/gaming/game-perf.md +54 -0
- package/skills/gaming/shader-gen.md +44 -0
- package/skills/gaming/unity-tdd.md +85 -0
- package/skills/ios/README.md +45 -0
- package/skills/ios/data-persistence.md +151 -0
- package/skills/ios/ios-tdd.md +90 -0
- package/skills/ios/networking.md +139 -0
- package/skills/ios/performance.md +122 -0
- package/skills/ios/swift-concurrency.md +57 -0
- package/skills/ios/swift-review.md +124 -0
- package/skills/ios/swiftui-review.md +49 -0
- package/skills/ios/swiftui-state.md +122 -0
- package/skills/ios/unit-testing.md +144 -0
- package/skills/ios/xcode-warnings.md +37 -0
- package/skills/react-native/README.md +42 -0
- package/skills/react-native/bridge-audit.md +104 -0
- package/skills/react-native/expo-optimize.md +55 -0
- package/skills/react-native/new-arch-migrate.md +53 -0
- package/skills/react-native/performance.md +124 -0
- package/skills/react-native/rn-review.md +53 -0
- package/skills/react-native/rn-tdd.md +76 -0
- package/skills/shared/README.md +46 -0
- package/skills/shared/accessibility-audit.md +132 -0
- package/skills/shared/crash-analysis.md +110 -0
- package/skills/shared/security-scan.md +149 -0
- package/skills/unity/README.md +31 -0
- package/skills/unity/shader-review.md +110 -0
- package/templates/agent-template.md +88 -0
- package/templates/prompt-template.md +50 -0
- package/templates/skill-template.md +64 -0
- package/templates/workflow-template.md +48 -0
- package/workflows/app-launch.md +66 -0
- package/workflows/appforge-workflow.md +232 -0
- package/workflows/ci-setup.md +77 -0
- package/workflows/crash-to-fix.md +71 -0
- package/workflows/feature-ship.md +61 -0
- package/workflows/game-level.md +72 -0
- package/workflows/mobile-harness.md +319 -0
- package/workflows/mobile-mcp-qa.md +228 -0
- package/workflows/mobile-memory-workflow.md +243 -0
- package/workflows/new-project-setup.md +93 -0
- package/workflows/new-screen.md +68 -0
- package/workflows/perf-sprint.md +78 -0
- package/workflows/release-cycle.md +71 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Skill β /crash-triage
|
|
2
|
+
|
|
3
|
+
**Platform:** Cross-Platform
|
|
4
|
+
**Slash Command:** `/crash-triage`
|
|
5
|
+
**Composable With:** agents/cross-platform/crasher/agent.md
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Rapid crash triage for any mobile platform. Paste a stacktrace, get a root cause and fix. The first thing to run when a crash alert fires.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Skill Prompt
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Triage the provided mobile crash stacktrace:
|
|
19
|
+
|
|
20
|
+
STEP 1 β CLASSIFY
|
|
21
|
+
Identify the crash type:
|
|
22
|
+
- NullPointerException / nil dereference
|
|
23
|
+
- IndexOutOfBoundsException / array out of bounds
|
|
24
|
+
- ClassCastException / invalid cast
|
|
25
|
+
- ANR (Application Not Responding) β main thread blocked
|
|
26
|
+
- OOM (OutOfMemoryError) β memory exhaustion
|
|
27
|
+
- EXC_BAD_ACCESS β iOS memory corruption / dangling pointer
|
|
28
|
+
- Unhandled exception / promise rejection (RN)
|
|
29
|
+
- Assertion failure / fatalError (Swift)
|
|
30
|
+
- Stack overflow (infinite recursion)
|
|
31
|
+
|
|
32
|
+
STEP 2 β FIND THE ORIGIN
|
|
33
|
+
Read the stacktrace top to bottom:
|
|
34
|
+
- The top frame is usually the symptom, not the cause.
|
|
35
|
+
- Find the first frame in YOUR code (not framework code).
|
|
36
|
+
- The origin is usually 3β8 frames below the top.
|
|
37
|
+
|
|
38
|
+
STEP 3 β STATE THE ROOT CAUSE
|
|
39
|
+
One sentence: "The crash occurs because X happens when Y condition is true."
|
|
40
|
+
|
|
41
|
+
STEP 4 β THE FIX
|
|
42
|
+
Concrete code change. Not "add a null check" β the actual check, in the actual function.
|
|
43
|
+
|
|
44
|
+
STEP 5 β REGRESSION TEST
|
|
45
|
+
One sentence: "Write a test that calls [function] with [condition] and asserts [expected behavior]."
|
|
46
|
+
|
|
47
|
+
Output format:
|
|
48
|
+
CRASH TYPE: <type>
|
|
49
|
+
ORIGIN: <file:function:line>
|
|
50
|
+
ROOT CAUSE: <one sentence>
|
|
51
|
+
FIX: <code snippet>
|
|
52
|
+
REGRESSION TEST: <description>
|
|
53
|
+
```
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Skill β /deeplink-debug
|
|
2
|
+
|
|
3
|
+
**Platform:** Cross-Platform
|
|
4
|
+
**Slash Command:** `/deeplink-debug`
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Diagnoses broken deep links across Android and iOS. Notoriously painful β this skill walks through every failure mode systematically.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Skill Prompt
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Debug the described deep link issue step by step:
|
|
18
|
+
|
|
19
|
+
PROVIDE THIS INFORMATION:
|
|
20
|
+
1. Deep link URL or app link (e.g. https://app.example.com/product/123 or myapp://product/123)
|
|
21
|
+
2. Platform: Android, iOS, or both
|
|
22
|
+
3. Symptom: doesn't open app / opens wrong screen / opens app but crashes / works on dev not prod
|
|
23
|
+
4. Link type: App Link (Android) / Universal Link (iOS) / Custom URL scheme / Branch.io / Firebase Dynamic Link
|
|
24
|
+
|
|
25
|
+
ANDROID APP LINKS CHECKLIST:
|
|
26
|
+
[ ] android:autoVerify="true" in the intent-filter (without this, App Links don't work)
|
|
27
|
+
[ ] Intent filter scheme is "https" (not "http") for App Links
|
|
28
|
+
[ ] /.well-known/assetlinks.json served at the exact domain, over HTTPS, with correct JSON
|
|
29
|
+
[ ] assetlinks.json contains the correct SHA-256 certificate fingerprint
|
|
30
|
+
(Get fingerprint: keytool -list -v -keystore debug.keystore β debug != production!)
|
|
31
|
+
[ ] assetlinks.json is accessible without redirect (redirects break App Link verification)
|
|
32
|
+
[ ] App is installed and App Link verification has been triggered (reboot or reinstall)
|
|
33
|
+
[ ] Test: adb shell am start -a android.intent.action.VIEW -d "https://yourdomain.com/path"
|
|
34
|
+
|
|
35
|
+
iOS UNIVERSAL LINKS CHECKLIST:
|
|
36
|
+
[ ] apple-app-site-association (AASA) file served at /.well-known/apple-app-site-association
|
|
37
|
+
[ ] AASA is served with Content-Type: application/json (not .well-known/apple-app-site-association.json)
|
|
38
|
+
[ ] AASA contains the correct appID (TeamID.BundleID) in the "applinks" section
|
|
39
|
+
[ ] AASA path patterns match the URLs being tested (wildcards: * matches one path component, ** matches any)
|
|
40
|
+
[ ] Associated Domains entitlement includes applinks:yourdomain.com
|
|
41
|
+
[ ] Test on real device (simulator doesn't support Universal Links)
|
|
42
|
+
[ ] Test: Settings β Developer β Universal Links β Diagnostics tool (iOS 16+)
|
|
43
|
+
|
|
44
|
+
CUSTOM URL SCHEMES (fallback):
|
|
45
|
+
[ ] Scheme registered in AndroidManifest.xml / Info.plist
|
|
46
|
+
[ ] Scheme not conflicting with another installed app (no guarantee of uniqueness)
|
|
47
|
+
[ ] Test: adb shell am start -a android.intent.action.VIEW -d "myapp://path"
|
|
48
|
+
xcrun simctl openurl booted "myapp://path"
|
|
49
|
+
|
|
50
|
+
COMMON FAILURES AND FIXES:
|
|
51
|
+
- "Works in dev, not prod": different signing certificate β different SHA-256 fingerprint in assetlinks.json
|
|
52
|
+
- "Opens browser instead of app": assetlinks.json or AASA not found / served with wrong Content-Type
|
|
53
|
+
- "App opens but wrong screen": intent/URL handler not matching the path pattern
|
|
54
|
+
- "Crashes on open": deep link handler accessing null navigation state before initialization
|
|
55
|
+
|
|
56
|
+
Output a step-by-step diagnosis with the most likely cause first.
|
|
57
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Skill β /feature-slice
|
|
2
|
+
|
|
3
|
+
**Platform:** Cross-Platform
|
|
4
|
+
**Slash Command:** `/feature-slice`
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Breaks a mobile feature epic into independently shippable, correctly-sized tickets. Works with Jira, Linear, and GitHub Issues. Prevents the "one giant PR" anti-pattern.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Skill Prompt
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Slice the described mobile feature into independently shippable tickets:
|
|
18
|
+
|
|
19
|
+
SLICING RULES:
|
|
20
|
+
1. Each ticket should be shippable behind a feature flag without breaking existing behavior.
|
|
21
|
+
2. Each ticket should be completable by one engineer in 1β3 days.
|
|
22
|
+
3. Tickets are ordered: data layer first, then domain, then UI.
|
|
23
|
+
4. "Independently shippable" means the app still works if only this ticket is merged.
|
|
24
|
+
|
|
25
|
+
LAYER ORDER (mobile Clean Architecture):
|
|
26
|
+
1. Data models / API contract (can be merged immediately, no visible change)
|
|
27
|
+
2. Repository / data source implementation
|
|
28
|
+
3. Domain use case
|
|
29
|
+
4. ViewModel / state management
|
|
30
|
+
5. UI scaffold (empty screen, no data)
|
|
31
|
+
6. UI with real data
|
|
32
|
+
7. Error states and edge cases
|
|
33
|
+
8. Analytics / logging
|
|
34
|
+
9. Tests (can be bundled with each layer or as a final ticket)
|
|
35
|
+
|
|
36
|
+
OUTPUT PER TICKET:
|
|
37
|
+
Title: [PLATFORM] Layer β What it does
|
|
38
|
+
Acceptance Criteria:
|
|
39
|
+
- [ ] Criterion 1
|
|
40
|
+
- [ ] Criterion 2
|
|
41
|
+
Dependencies: <ticket numbers this depends on>
|
|
42
|
+
Estimated effort: <S | M | L> (S=4h, M=1d, L=2-3d)
|
|
43
|
+
|
|
44
|
+
Also flag:
|
|
45
|
+
- Any tickets that can be done in parallel (no dependency between them)
|
|
46
|
+
- Any ticket that is a blocker for everything else (do it first)
|
|
47
|
+
- Any ticket that touches existing code and needs a regression test
|
|
48
|
+
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Skill β /grill-mobile
|
|
2
|
+
|
|
3
|
+
**Platform:** Cross-Platform
|
|
4
|
+
**Slash Command:** `/grill-mobile`
|
|
5
|
+
**Viral Potential:** HIGHEST β 20 questions before any mobile code is written
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Asks 20 mobile-specific alignment questions before writing a single line of code. Prevents the most common mobile AI mistakes: wrong API level, reinventing native components, ignoring platform constraints.
|
|
12
|
+
|
|
13
|
+
Inspired by mattpocock's `/grill-me` β the mobile-specific version.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Skill Prompt
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
Before writing any code for this mobile feature, ask the following 20 questions.
|
|
21
|
+
Wait for answers before proceeding. Group them into 5 rounds of 4 questions each
|
|
22
|
+
so the conversation feels natural rather than overwhelming.
|
|
23
|
+
|
|
24
|
+
ROUND 1 β Platform Basics
|
|
25
|
+
1. What platform(s) are we targeting? (Android, iOS, Flutter, React Native, Unity/Unreal?)
|
|
26
|
+
2. What is the minimum OS version / SDK level we support?
|
|
27
|
+
3. Is this a new feature in a greenfield project or modifying an existing codebase?
|
|
28
|
+
4. Which design system or component library is in use? (Material3, Cupertino, custom?)
|
|
29
|
+
|
|
30
|
+
ROUND 2 β Technical Context
|
|
31
|
+
5. What state management solution is in use? (ViewModel/StateFlow, Bloc, Riverpod, Redux, Zustand, none?)
|
|
32
|
+
6. What dependency injection framework, if any? (Hilt, Koin, Provider, none?)
|
|
33
|
+
7. Are there existing components in the codebase that already solve part of this?
|
|
34
|
+
8. What is the target frame rate? (30fps for low-end, 60fps, 120fps for premium?)
|
|
35
|
+
|
|
36
|
+
ROUND 3 β User & Device Reality
|
|
37
|
+
9. What type of device is the primary target? (High-end flagship, mid-range, low-RAM budget?)
|
|
38
|
+
10. Will this feature work offline? What is the offline behavior?
|
|
39
|
+
11. Are there users with accessibility needs we should design for? (Screen reader, large text, motor?)
|
|
40
|
+
12. What is the expected data size? (A handful of items, hundreds, thousands?)
|
|
41
|
+
|
|
42
|
+
ROUND 4 β Integration & Constraints
|
|
43
|
+
13. What API or backend does this feature connect to? Any rate limits or auth requirements?
|
|
44
|
+
14. Are there any app store policies affecting this feature? (Location, permissions, content?)
|
|
45
|
+
15. What is the target app size budget? Any constraints on adding dependencies?
|
|
46
|
+
16. Is this screen deep-linkable? What parameters does the deep link carry?
|
|
47
|
+
|
|
48
|
+
ROUND 5 β Quality & Delivery
|
|
49
|
+
17. What is the test strategy? (Unit only, integration, UI test, manual only?)
|
|
50
|
+
18. Has this feature been designed in Figma or another tool? Can you share the spec?
|
|
51
|
+
19. What does "done" look like? What are the acceptance criteria?
|
|
52
|
+
20. What are the top 3 edge cases we must handle before this ships?
|
|
53
|
+
|
|
54
|
+
After receiving answers, summarize your understanding of the feature in 3 bullet points
|
|
55
|
+
and confirm with the developer before writing any code.
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Notes
|
|
61
|
+
|
|
62
|
+
- Use this at the start of every non-trivial feature implementation.
|
|
63
|
+
- Answers to questions 1, 2, 8, 9 directly prevent the most common AI mobile coding mistakes.
|
|
64
|
+
- The summary-and-confirm step catches misunderstandings before they become wrong code.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Skill β /mobile-mcp-qa
|
|
2
|
+
|
|
3
|
+
**Platform:** Android / iOS / Flutter / React Native
|
|
4
|
+
**Slash Command:** `/mobile-mcp-qa`
|
|
5
|
+
**Composable With:** APPFORGE, AXIOM, SWIFT, DART, BRIDGE, CRASHER, PERF, Mobile Memory
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Use Mobile MCP to run AI-assisted QA on a real device, emulator, or simulator. This skill turns a feature flow into a repeatable device test plan using screenshots, accessibility snapshots, element inspection, taps, typing, swipes, app install, app launch, and device orientation checks.
|
|
12
|
+
|
|
13
|
+
Mobile MCP is best used after implementation, during APPFORGE Stage 7 Full QA, or before store submission.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Prerequisites
|
|
18
|
+
|
|
19
|
+
Install Mobile MCP in your AI tool:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"mcpServers": {
|
|
24
|
+
"mobile-mcp": {
|
|
25
|
+
"command": "npx",
|
|
26
|
+
"args": ["-y", "@mobilenext/mobile-mcp@latest"]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Claude Code:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
claude mcp add mobile-mcp -- npx -y @mobilenext/mobile-mcp@latest
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Codex:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
codex mcp add mobile-mcp npx "@mobilenext/mobile-mcp@latest"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
You also need at least one available Android emulator/device or iOS simulator/device.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Input Format
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
COMMAND: /mobile-mcp-qa
|
|
52
|
+
PLATFORM: <Android | iOS | Flutter | React Native>
|
|
53
|
+
APP_ID: <Android package name or iOS bundle id>
|
|
54
|
+
BUILD_PATH: <optional apk/ipa/app path>
|
|
55
|
+
DEVICE: <optional target device name>
|
|
56
|
+
FLOW:
|
|
57
|
+
<numbered user flow to test>
|
|
58
|
+
EXPECTED:
|
|
59
|
+
<expected UI state, navigation, data, and analytics>
|
|
60
|
+
EDGE_CASES:
|
|
61
|
+
<offline, invalid input, rotation, restart, permissions, api errors>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Skill Prompt
|
|
67
|
+
|
|
68
|
+
```text
|
|
69
|
+
Run a Mobile MCP QA pass for the provided mobile app flow.
|
|
70
|
+
|
|
71
|
+
STEP 1 β VERIFY SETUP
|
|
72
|
+
- List available devices.
|
|
73
|
+
- Select the requested device, or choose the first available emulator/simulator.
|
|
74
|
+
- If BUILD_PATH is provided, install the app.
|
|
75
|
+
- Launch APP_ID.
|
|
76
|
+
- Capture screen size and orientation.
|
|
77
|
+
|
|
78
|
+
STEP 2 β BASELINE SCREEN
|
|
79
|
+
- Take a screenshot.
|
|
80
|
+
- List elements on screen.
|
|
81
|
+
- Record the initial screen name and visible primary actions.
|
|
82
|
+
- If accessibility data is incomplete, fall back to screenshot-based coordinate reasoning.
|
|
83
|
+
|
|
84
|
+
STEP 3 β EXECUTE FLOW
|
|
85
|
+
For each user-flow step:
|
|
86
|
+
- Identify the target element.
|
|
87
|
+
- Prefer accessibility element interaction when available.
|
|
88
|
+
- Use coordinate tap only when element metadata is missing.
|
|
89
|
+
- Type text where required.
|
|
90
|
+
- Swipe only when the target is off-screen.
|
|
91
|
+
- Take a screenshot after every major state transition.
|
|
92
|
+
|
|
93
|
+
STEP 4 β VERIFY EXPECTED RESULT
|
|
94
|
+
Check:
|
|
95
|
+
- Correct screen reached
|
|
96
|
+
- Correct labels and values rendered
|
|
97
|
+
- Loading, empty, and error states behave as expected
|
|
98
|
+
- Navigation stack and back behavior work
|
|
99
|
+
- Keyboard behavior is sane
|
|
100
|
+
- Orientation does not break layout
|
|
101
|
+
- App restart preserves required state
|
|
102
|
+
- Offline/API error behavior is user-safe
|
|
103
|
+
|
|
104
|
+
STEP 5 β REPORT
|
|
105
|
+
Return:
|
|
106
|
+
MOBILE MCP QA REPORT
|
|
107
|
+
====================
|
|
108
|
+
Platform:
|
|
109
|
+
Device:
|
|
110
|
+
App:
|
|
111
|
+
Flow:
|
|
112
|
+
Result: PASS | FAIL | BLOCKED
|
|
113
|
+
|
|
114
|
+
Steps Executed:
|
|
115
|
+
| Step | Action | Evidence | Result |
|
|
116
|
+
|---|---|---|---|
|
|
117
|
+
|
|
118
|
+
Issues:
|
|
119
|
+
| Severity | Screen | Issue | Repro Step | Fix |
|
|
120
|
+
|---|---|---|---|---|
|
|
121
|
+
|
|
122
|
+
Screenshots Captured:
|
|
123
|
+
- <screenshot name or description>
|
|
124
|
+
|
|
125
|
+
Accessibility Findings:
|
|
126
|
+
- <missing labels, small targets, focus issues>
|
|
127
|
+
|
|
128
|
+
Recommended Next Action:
|
|
129
|
+
<single concrete fix or next test>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Example
|
|
135
|
+
|
|
136
|
+
### Input
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
COMMAND: /mobile-mcp-qa
|
|
140
|
+
PLATFORM: Android
|
|
141
|
+
APP_ID: com.example.invoice
|
|
142
|
+
FLOW:
|
|
143
|
+
1. Launch app.
|
|
144
|
+
2. Tap Add Invoice.
|
|
145
|
+
3. Enter client "Acme Studio".
|
|
146
|
+
4. Enter amount "450".
|
|
147
|
+
5. Set due date tomorrow.
|
|
148
|
+
6. Save invoice.
|
|
149
|
+
7. Confirm invoice appears on dashboard.
|
|
150
|
+
EXPECTED:
|
|
151
|
+
Dashboard shows Acme Studio, $450, due tomorrow, status Unpaid.
|
|
152
|
+
EDGE_CASES:
|
|
153
|
+
Rotate on dashboard, restart app, verify invoice persists.
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Output
|
|
157
|
+
|
|
158
|
+
```text
|
|
159
|
+
MOBILE MCP QA REPORT
|
|
160
|
+
====================
|
|
161
|
+
Platform: Android
|
|
162
|
+
Device: Pixel_7_API_35
|
|
163
|
+
App: com.example.invoice
|
|
164
|
+
Flow: Create invoice and verify dashboard persistence
|
|
165
|
+
Result: FAIL
|
|
166
|
+
|
|
167
|
+
Steps Executed:
|
|
168
|
+
| Step | Action | Evidence | Result |
|
|
169
|
+
|---|---|---|---|
|
|
170
|
+
| 1 | Launched app | Home screenshot shows empty dashboard | PASS |
|
|
171
|
+
| 2 | Tapped Add Invoice | Add Invoice screen visible | PASS |
|
|
172
|
+
| 3 | Entered client and amount | Form fields populated | PASS |
|
|
173
|
+
| 4 | Saved invoice | Returned to dashboard | PASS |
|
|
174
|
+
| 5 | Restarted app | Dashboard empty after relaunch | FAIL |
|
|
175
|
+
|
|
176
|
+
Issues:
|
|
177
|
+
| Severity | Screen | Issue | Repro Step | Fix |
|
|
178
|
+
|---|---|---|---|---|
|
|
179
|
+
| CRITICAL | Dashboard | Invoice is not persisted after app restart | Save invoice, terminate app, relaunch | Verify Room insert is awaited before navigation |
|
|
180
|
+
|
|
181
|
+
Screenshots Captured:
|
|
182
|
+
- home-empty-initial
|
|
183
|
+
- add-invoice-filled
|
|
184
|
+
- dashboard-after-save
|
|
185
|
+
- dashboard-after-restart
|
|
186
|
+
|
|
187
|
+
Accessibility Findings:
|
|
188
|
+
- Add Invoice button has label.
|
|
189
|
+
- Amount field missing content description for currency expectation.
|
|
190
|
+
|
|
191
|
+
Recommended Next Action:
|
|
192
|
+
Fix invoice persistence by awaiting InvoiceDao.insert() before navigating back to Dashboard, then rerun the restart persistence flow.
|
|
193
|
+
```
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Skill β /mobile-memory-graph
|
|
2
|
+
|
|
3
|
+
**Platform:** Cross-Platform
|
|
4
|
+
**Slash Command:** `/mobile-memory-graph`
|
|
5
|
+
**Composable With:** Mobile Memory, AXIOM, SWIFT, DART, BRIDGE, FORGE, UNREAL
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Build the Knowledge Graph section of `MOBILE_MEMORY.md` from pasted mobile code files. Use it when the user wants architecture context, dependency flow, god node detection, or a token-reduced map of a codebase.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Input Format
|
|
16
|
+
|
|
17
|
+
````text
|
|
18
|
+
COMMAND: /mobile-memory-graph
|
|
19
|
+
FILES:
|
|
20
|
+
FILE: <relative/path/File.kt>
|
|
21
|
+
```kotlin
|
|
22
|
+
<code>
|
|
23
|
+
```
|
|
24
|
+
FILE: <relative/path/File.swift>
|
|
25
|
+
```swift
|
|
26
|
+
<code>
|
|
27
|
+
```
|
|
28
|
+
````
|
|
29
|
+
|
|
30
|
+
Accept Kotlin, Java, Swift, Dart, TypeScript, TSX, JavaScript, JSX, C#, and Blueprint/C++ snippets.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Platform Detection
|
|
35
|
+
|
|
36
|
+
| Signal | Platform |
|
|
37
|
+
|---|---|
|
|
38
|
+
| `.kt`, `androidx`, `ViewModel`, `StateFlow`, `HiltViewModel` | Android |
|
|
39
|
+
| `.swift`, `SwiftUI`, `ObservableObject`, `@Published`, `MainActor` | iOS |
|
|
40
|
+
| `.dart`, `Widget`, `StateNotifier`, `Bloc`, `Riverpod` | Flutter |
|
|
41
|
+
| `.tsx`, `.jsx`, `React Native`, `NativeModules`, `FlatList` | React Native |
|
|
42
|
+
| `.cs`, `MonoBehaviour`, `Update()`, `Rigidbody` | Unity |
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Skill Prompt
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
Build the Knowledge Graph section of MOBILE_MEMORY.md from the provided code files.
|
|
50
|
+
|
|
51
|
+
Output only:
|
|
52
|
+
## πΊοΈ Knowledge Graph
|
|
53
|
+
|
|
54
|
+
Required subsections:
|
|
55
|
+
1. Nodes table
|
|
56
|
+
2. Key Edges table
|
|
57
|
+
3. God Nodes table
|
|
58
|
+
4. Architecture Violations list
|
|
59
|
+
5. Token Reduction Summary
|
|
60
|
+
|
|
61
|
+
Node types:
|
|
62
|
+
[UI] [VM] [UC] [REPO] [NET] [DB] [DI] [NAV] [TEST]
|
|
63
|
+
|
|
64
|
+
Health values:
|
|
65
|
+
OK, CRITICAL, WARNING, DEBT
|
|
66
|
+
|
|
67
|
+
Edge types:
|
|
68
|
+
OBSERVES, CALLS, INJECTS, NAVIGATES_TO, EMITS, VIOLATES
|
|
69
|
+
|
|
70
|
+
Every edge note must start with a confidence tag:
|
|
71
|
+
- EXTRACTED: direct code evidence exists
|
|
72
|
+
- INFERRED: strongly implied by naming/imports/framework convention
|
|
73
|
+
- AMBIGUOUS: possible relationship but insufficient code shown
|
|
74
|
+
|
|
75
|
+
Platform checks:
|
|
76
|
+
- Android: flag GlobalScope, repository construction in ViewModel, exposed MutableStateFlow, UI navigation from ViewModel, repository called by 2+ ViewModels.
|
|
77
|
+
- iOS: flag retain cycles, force unwraps, MainActor misuse, ObservableObject with 6+ @Published, class with 4+ protocol conformances.
|
|
78
|
+
- Flutter: flag expensive build() work, missing const constructors, unawaited futures, StateNotifier with 3+ consumers, build() over 200 lines.
|
|
79
|
+
- React Native: flag bridge calls in hot paths, missing keys on lists, Context with 5+ consumers, component over 150 lines.
|
|
80
|
+
- Unity: flag Update() abuse, GC allocations in hot paths, physics calls in Update(), class with 5+ responsibilities.
|
|
81
|
+
|
|
82
|
+
Token reduction estimate:
|
|
83
|
+
Estimate raw file tokens from code volume and compare to graph token count. Use conservative math and state assumptions.
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Output Format
|
|
89
|
+
|
|
90
|
+
```markdown
|
|
91
|
+
## πΊοΈ Knowledge Graph
|
|
92
|
+
|
|
93
|
+
### Nodes
|
|
94
|
+
| Node | Type | Layer | Health |
|
|
95
|
+
|---|---|---|---|
|
|
96
|
+
| [ClassName] | [VM/REPO/UI/etc] | [UI/Domain/Data] | [OK/CRITICAL/WARNING/DEBT] |
|
|
97
|
+
|
|
98
|
+
### Key Edges
|
|
99
|
+
| From | Edge | To | Note |
|
|
100
|
+
|---|---|---|---|
|
|
101
|
+
| [Node] | OBSERVES | [Node] | EXTRACTED: [why this matters] |
|
|
102
|
+
|
|
103
|
+
### God Nodes
|
|
104
|
+
| Node | Connections | Platform Risk | Recommendation |
|
|
105
|
+
|---|---|---|---|
|
|
106
|
+
|
|
107
|
+
### Architecture Violations
|
|
108
|
+
- [Class] VIOLATES [rule] β [explanation] β [fix]
|
|
109
|
+
|
|
110
|
+
### Token Reduction Summary
|
|
111
|
+
- Raw files estimated: [N] tokens
|
|
112
|
+
- Graph summary: [N] tokens
|
|
113
|
+
- Reduction: [XΓ]
|
|
114
|
+
- Assumption: [how estimate was calculated]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Example
|
|
120
|
+
|
|
121
|
+
### Input
|
|
122
|
+
|
|
123
|
+
````text
|
|
124
|
+
COMMAND: /mobile-memory-graph
|
|
125
|
+
FILE: app/cart/CartViewModel.kt
|
|
126
|
+
```kotlin
|
|
127
|
+
@HiltViewModel
|
|
128
|
+
class CartViewModel @Inject constructor() : ViewModel() {
|
|
129
|
+
val uiState = MutableStateFlow(CartState())
|
|
130
|
+
private val repo = CartRepository(RetrofitCartApi())
|
|
131
|
+
|
|
132
|
+
fun checkout(activity: Activity) {
|
|
133
|
+
GlobalScope.launch {
|
|
134
|
+
repo.checkout()
|
|
135
|
+
activity.startActivity(Intent(activity, PaymentActivity::class.java))
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
````
|
|
141
|
+
|
|
142
|
+
### Output
|
|
143
|
+
|
|
144
|
+
```markdown
|
|
145
|
+
## πΊοΈ Knowledge Graph
|
|
146
|
+
|
|
147
|
+
### Nodes
|
|
148
|
+
| Node | Type | Layer | Health |
|
|
149
|
+
|---|---|---|---|
|
|
150
|
+
| CartViewModel | VM | UI | CRITICAL |
|
|
151
|
+
| CartRepository | REPO | Data | WARNING |
|
|
152
|
+
| RetrofitCartApi | NET | Data | OK |
|
|
153
|
+
| PaymentActivity | NAV | UI | WARNING |
|
|
154
|
+
|
|
155
|
+
### Key Edges
|
|
156
|
+
| From | Edge | To | Note |
|
|
157
|
+
|---|---|---|---|
|
|
158
|
+
| CartViewModel | CALLS | CartRepository | EXTRACTED: ViewModel constructs and calls repository directly |
|
|
159
|
+
| CartRepository | CALLS | RetrofitCartApi | INFERRED: repository receives RetrofitCartApi constructor dependency |
|
|
160
|
+
| CartViewModel | NAVIGATES_TO | PaymentActivity | EXTRACTED: ViewModel starts Activity through Activity reference |
|
|
161
|
+
| CartViewModel | VIOLATES | Coroutine ownership | EXTRACTED: uses GlobalScope inside ViewModel |
|
|
162
|
+
|
|
163
|
+
### God Nodes
|
|
164
|
+
| Node | Connections | Platform Risk | Recommendation |
|
|
165
|
+
|---|---|---|---|
|
|
166
|
+
| CartViewModel | 4 | High: mixes state, DI, coroutine ownership, and navigation | Inject repository, use viewModelScope, emit navigation event |
|
|
167
|
+
|
|
168
|
+
### Architecture Violations
|
|
169
|
+
- CartViewModel VIOLATES Clean Architecture β constructs CartRepository and RetrofitCartApi directly β inject dependencies with Hilt.
|
|
170
|
+
- CartViewModel VIOLATES state encapsulation β exposes MutableStateFlow publicly β expose StateFlow via asStateFlow().
|
|
171
|
+
- CartViewModel VIOLATES lifecycle ownership β uses GlobalScope β use viewModelScope.
|
|
172
|
+
- CartViewModel VIOLATES navigation ownership β starts Activity directly β emit navigation event and let UI navigate.
|
|
173
|
+
|
|
174
|
+
### Token Reduction Summary
|
|
175
|
+
- Raw files estimated: 180 tokens
|
|
176
|
+
- Graph summary: 125 tokens
|
|
177
|
+
- Reduction: 1.4Γ
|
|
178
|
+
- Assumption: Small snippet; larger projects improve because repeated code bodies collapse into nodes and edges.
|
|
179
|
+
```
|