This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
The Mobile App Developer Tools Cursor plugin is at v1.0.0. It helps developers go from zero to a published app in the stores. Supports React Native/Expo and Flutter with 43 skills, 12 rules, and a companion MCP server exposing 36 tools.
SnapLog is a companion photo journal app that demonstrates 16 of the 43 skills in a real project. Reference it when explaining what the plugin can do.
.cursor-plugin/plugin.json - Plugin manifest
skills/<skill-name>/SKILL.md - AI workflow definitions
rules/<rule-name>.mdc - Code quality and security rules
mcp-server/ - MCP server with 36 tools
packages/mobile-dev-tools/ - NPM package (stub for name claim)
| Skill | Purpose |
|---|---|
| mobile-project-setup | Guided Expo project creation with TypeScript, file-based routing, ESLint |
| mobile-dev-environment | Cross-platform dependency detection (Node, Watchman, Xcode, Android Studio, Expo CLI) |
| mobile-run-on-device | Running on a physical device via Expo Go, dev builds, QR code, tunnel mode |
| mobile-navigation-setup | Expo Router file-based navigation: tabs, stack, drawer, typed routes, deep linking |
| mobile-state-management | When to use React state vs Zustand vs Jotai vs React Query; patterns and examples |
| mobile-component-patterns | Reusable component architecture, compound components, StyleSheet vs NativeWind, testing |
| mobile-camera-integration | expo-camera setup, permissions, photo capture, barcode scanning, video recording |
| mobile-ai-features | AI API integration (OpenAI, Anthropic, Google) with backend proxy, vision, text, audio |
| mobile-permissions | Cross-platform permission request patterns, rationale strings, denied/blocked handling |
| mobile-auth-setup | Authentication with Supabase, Firebase, Clerk; secure token storage, protected routes |
| mobile-push-notifications | expo-notifications, EAS Push, Android channels, deep link on tap, local notifications |
| mobile-local-storage | AsyncStorage, expo-sqlite, expo-secure-store, MMKV; migrations and data cleanup |
| mobile-api-integration | REST/GraphQL clients, React Query, auth headers, retry, offline queue, optimistic updates |
| mobile-ios-submission | EAS Build/Submit, certificates, provisioning profiles, TestFlight, App Store review |
| mobile-android-submission | Play Console, signing keys, AAB, service accounts, staged rollouts |
| Skill | Purpose |
|---|---|
| mobile-flutter-project-setup | Guided flutter create with structure, linting, packages, flavors |
| mobile-flutter-navigation | GoRouter: declarative routing, shell routes for tabs, auth guards, deep linking |
| mobile-flutter-run-on-device | USB/wireless debugging, hot reload vs restart, build modes, troubleshooting |
| mobile-flutter-state-management | Riverpod (recommended), Bloc, Provider, setState; async data, code generation |
| Skill | Purpose |
|---|---|
| mobile-app-store-prep | App icons, screenshots, metadata, privacy policy, age ratings, review guidelines |
| mobile-monetization | In-app purchases, subscriptions, RevenueCat, StoreKit 2, sandbox testing |
| mobile-deep-links | Universal links, app links, URL schemes, deferred deep links, attribution |
| mobile-analytics | Crash reporting (Sentry, Crashlytics), event tracking (PostHog), source maps |
| mobile-ota-updates | EAS Update channels, runtime versions, staged rollouts, rollback, Shorebird |
| mobile-testing | Unit and integration testing with Jest, React Native Testing Library, flutter_test, snapshot testing |
| mobile-e2e-testing | End-to-end testing with Detox, Maestro, Patrol; device farm setup |
| mobile-ci-cd | GitHub Actions workflows, EAS Build pipelines, build caching, code signing in CI |
| mobile-animations | Reanimated, Lottie, Rive for React Native; implicit/explicit animations for Flutter |
| mobile-maps-location | MapView, geolocation, geofencing, background location tracking |
| mobile-i18n | Internationalization, RTL layout, locale detection, pluralization, translation files |
| mobile-forms-validation | React Hook Form + Zod for RN, Form + TextFormField for Flutter; multi-step forms |
| mobile-real-time | WebSockets, Supabase Realtime, Socket.IO, SSE; reconnection and presence |
| mobile-security | SSL pinning, code obfuscation, jailbreak/root detection, certificate transparency |
| mobile-offline-sync | Offline-first architecture, background sync, conflict resolution, operation queuing |
| mobile-background-tasks | Background fetch, WorkManager (Android), BGTaskScheduler (iOS), headless JS |
| mobile-debugging | Flipper, React DevTools, Flutter DevTools, memory leak detection, network inspection |
| mobile-app-monitoring | Production APM with Sentry Performance, Datadog, Instabug; OpenTelemetry spans, Apdex scoring |
| mobile-theming | Design tokens, dark mode, system appearance detection, NativeWind, Material 3, persistent preference |
| mobile-feature-flags | Feature toggles with PostHog, LaunchDarkly, Firebase Remote Config; A/B testing, staged rollouts |
| mobile-accessibility-testing | Automated a11y audits, WCAG compliance, screen reader testing, CI integration |
| mobile-native-modules | Expo Modules API (Swift/Kotlin), Turbo Modules, JSI bridging, native view components |
| mobile-config-plugins | Config plugin authoring, CNG patterns, Xcode/Gradle automation, modifier previews |
| mobile-sdk-upgrade | SDK version migration, dependency audit, breaking change detection, rollback strategy |
| Rule | Scope | Purpose |
|---|---|---|
| mobile-secrets.mdc | Global | Flags API keys, signing credentials, keystore passwords, Firebase config, EAS tokens |
| mobile-platform-check.mdc | .ts, .tsx |
Flags platform-specific APIs used without Platform.OS or Platform.select() guards |
| mobile-image-assets.mdc | .ts, .tsx, .json |
Flags oversized images, unoptimized formats, missing density variants, uncached remote images |
| mobile-env-safety.mdc | .ts, .tsx, .json |
Flags hardcoded production endpoints, missing EXPO_PUBLIC_ prefix, server-only secrets in client code |
| mobile-performance.mdc | .ts, .tsx, .dart |
Flags inline styles, missing list keys, unnecessary re-renders (RN); missing const constructors, inline widgets (Flutter) |
| mobile-accessibility.mdc | .ts, .tsx, .dart |
Flags missing a11y labels, small touch targets, images without alt text, color-only indicators |
| mobile-bundle-size.mdc | .ts, .tsx, .json, .dart |
Flags large dependencies, unoptimized imports, heavy packages with lighter alternatives |
| mobile-test-coverage.mdc | .ts, .tsx, .dart |
Flags untested components, missing test files, low coverage thresholds, snapshot-only tests |
| mobile-i18n-strings.mdc | .ts, .tsx, .dart |
Flags hardcoded user-facing strings not wrapped in a translation function |
| mobile-security-audit.mdc | .ts, .tsx, .dart, .json, .xml |
Flags insecure storage, missing SSL pinning, debug flags in release builds, cleartext traffic |
| mobile-color-contrast.mdc | .ts, .tsx, .dart |
Flags insufficient color contrast, missing dark mode variants, non-semantic color usage |
| mobile-native-compat.mdc | .ts, .tsx, .dart |
Flags deprecated native APIs, bridge-only patterns, New Architecture incompatibilities |
Tools use the mobile_ prefix (for example mobile_checkDevEnvironment).
| Tool | Description |
|---|---|
| mobile_checkDevEnvironment | Detect installed tools and SDKs (Node, Expo CLI, Watchman, Xcode, Android Studio, JDK); report what is missing |
| mobile_scaffoldProject | Generate a new Expo project from a template with chosen options |
| mobile_runOnDevice | Start dev server and provide instructions for connecting a physical device |
| mobile_generateScreen | Create a new Expo Router screen file with navigation wiring and boilerplate |
| mobile_generateComponent | Create a React Native component with typed props, StyleSheet, and optional tests |
| mobile_installDependency | Install a package via npx expo install with native module detection and warnings |
| mobile_addPermission | Add platform permission with iOS rationale string to app.json config plugins |
| mobile_integrateAI | Scaffold AI API client with provider config, error handling, and TypeScript types |
| mobile_checkBuildHealth | Validate app.json, check dependencies, verify TypeScript, detect native module issues |
| mobile_addPushNotifications | Add expo-notifications plugin to app.json, create notification handler, configure Android channel |
| mobile_configureDeepLinks | Set scheme, add Android intent filters, iOS associated domains, generate AASA template |
| mobile_resetDevEnvironment | Nuclear reset: clear Metro cache, .expo dir, node_modules cache, optionally Pods and Gradle |
| mobile_buildForStore | Create a production build for app store submission via EAS Build |
| mobile_validateStoreMetadata | Check app.json for all required store listing fields (name, bundle ID, icon, etc.) |
| mobile_submitToAppStore | Submit latest iOS production build to App Store Connect via EAS Submit |
| mobile_submitToPlayStore | Submit latest Android production build to Google Play Console via EAS Submit |
| mobile_generateScreenshots | Generate screenshot capture script and list required store dimensions |
| mobile_analyzeBundle | Analyze app bundle for large dependencies, heavy assets, and optimization opportunities |
| mobile_configureOTA | Configure EAS Update for over-the-air JavaScript updates with channels and runtime versions |
| mobile_runTests | Execute test suite (Jest or flutter test) and return structured pass/fail summary |
| mobile_setupCI | Generate GitHub Actions CI workflow for build, test, and optional EAS Build deployment |
| mobile_generateTestFile | Scaffold a test file for an existing component or module with matching boilerplate |
| mobile_setupI18n | Initialize i18n config with locale files and translation structure |
| mobile_addMap | Add map view with provider config, permissions, and marker support |
| mobile_generateForm | Scaffold a validated form with typed fields, validation, and error handling |
| mobile_setupRealtime | Add real-time client with connection management, reconnection, and typed events |
| mobile_securityAudit | Scan project for common mobile security anti-patterns |
| mobile_profilePerformance | Analyze project for performance anti-patterns and flag jank, slow renders, memory issues |
| mobile_checkOfflineReady | Validate offline-first setup: local DB, network listener, query cache, mutation queue |
| mobile_setupMonitoring | Configure APM with Sentry Performance or Datadog RUM; error capture, tracing, release health |
| mobile_setupTheming | Initialize design token system with light/dark themes, semantic colors, and persistent preference |
| mobile_auditAccessibility | Scan project for a11y violations: missing labels, small touch targets, images without alt text |
| mobile_setupFeatureFlags | Add typed feature flag provider with default values, remote sync, and provider integration |
| mobile_createNativeModule | Scaffold an Expo Module or Flutter plugin with Swift/Kotlin stubs and TS/Dart bindings |
| mobile_upgradeSDK | Generate SDK upgrade plan with dependency fixes, breaking changes, and rollback strategy |
| mobile_checkNativeCompat | Audit packages for New Architecture support, flag bridge-only and deprecated dependencies |
- Skills and rules: No build step; edit
SKILL.mdand.mdcfiles directly. - MCP server: From repo root, run
cd mcp-server && npm install && npm run build. - NPM package: From repo root, run
cd packages/mobile-dev-tools && npm install && npm run build.
Symlink the plugin for local Cursor development
- Windows (PowerShell) - run as Administrator if required for symlink creation:
New-Item -ItemType SymbolicLink -Path "$env:USERPROFILE\.cursor\plugins\mobile-app-developer-tools" -Target (Get-Location)- macOS / Linux:
ln -s "$(pwd)" ~/.cursor/plugins/mobile-app-developer-toolsRun each command from the repo root. Adjust paths if your clone is elsewhere.
- Default framework: Expo (React Native) with TypeScript.
- File-based routing: Use Expo Router, not React Navigation stack config.
- MCP tool prefix:
mobile_(e.g.mobile_checkDevEnvironment). - Never hardcode API keys, signing credentials, or tokens. Use environment variables or
.envfiles. - Platform checks: Always use
Platform.OSwhen writing platform-specific code.