Mobile Development
PLThe mobile cookbook holds five recipes for building iOS and Android apps with Claude Code, Codex, or Cursor: Expo, React Native, Flutter, native Swift and Kotlin, and cross-platform UI patterns. Each recipe pins the framework version, installs the vendor’s skills, and proves every change with type checks, tests, and simulator evidence instead of a diff read line by line.
This hub is for developers and tech leads who ship a mobile app with an agent. The agent reports “done”, the code compiles, and the screen still breaks on the Android emulator nobody opened. Pick a recipe and require the same evidence from every change.
Before you start, give the repository an agent instructions file; the prompts below write into it, and AGENTS.md and CLAUDE.md: concise repository context keeps it short. For recipes outside mobile, see the cookbook overview.
Which mobile recipe fits your stack?
Section titled “Which mobile recipe fits your stack?”| Your app | Start with | What the recipe adds |
|---|---|---|
| New cross-platform app, or a team on Expo’s build and update services | Expo | Expo skills and MCP, Expo Router auth gates, a fingerprint-gated EAS pipeline, safe over-the-air (OTA) updates |
| React Native app that has outgrown the demo stage | React Native | Offline-first state, a janky list rebuilt on FlashList, biometric auth, CI to TestFlight and Play, failures the simulator never shows |
| Dart codebase, or a team that wants one rendering engine on both platforms | Flutter | Riverpod, go_router, Dio, clean architecture, widget tests |
| Swift/SwiftUI or Kotlin/Compose | Native iOS and Android | One build-and-test script per platform, simulator and emulator loops, UI-test evidence |
| Any of the above, and you need a screen built | React Native and Flutter UI recipes | 12 prompts: adaptive navigation, feed lists, offline-first data, animations, push notifications, store submission |
The Expo and React Native recipes are complementary: the Expo recipe covers the platform (routing, EAS builds, OTA updates), and the React Native recipe covers the app code that runs on it. On a new app, read the Expo recipe first.
Give the agent your stack’s official skills first
Section titled “Give the agent your stack’s official skills first”Install only your stack’s set, because skill descriptions compete for the agent’s attention. The claude, codex mcp and skills commands were checked on 2026-09-26 against claude 2.1.283, codex 0.157.1, and the skills CLI 1.7.0; the Codex Expo commands were rerun on 2026-10-02 with the same versions. Codex’s openai-curated marketplace also lists an Expo plugin, but on 2026-10-02 it shipped 13 skills under older names and no MCP server, so the Codex tab installs Expo’s current set and server directly. With --agent codex or --agent cursor, the skills CLI writes to .agents/skills/ in the project.
# Expo: 24 skills plus Expo's remote MCP server# If the marketplace is missing: claude plugin marketplace add anthropics/claude-plugins-officialclaude plugin install expo@claude-plugins-official
# Flutter and Dart: skills plus the Dart MCP serverclaude plugin marketplace add flutter/agent-pluginsclaude plugin install dart-flutter@dart-flutter
# React Native (Callstack, community) through the skills CLInpx skills@latest add callstackincubator/agent-skills --skill '*' --agent claude-code -y
# iOS builds: MobileBuildMCP (needs macOS 14.5+ and Xcode 16+)claude mcp add mobilebuild -- npx -y mobilebuildmcp@latest mcp# Expo: the current skill set from expo/skills plus Expo's remote MCP servernpx skills@latest add expo/skills --skill '*' --agent codex -ycodex mcp add expo --url https://mcp.expo.dev/mcp# If the server asks you to sign in: codex mcp login expo
# Flutter and React Native skills through the cross-agent skills CLInpx skills@latest add flutter/agent-plugins --skill '*' --agent codex -ynpx skills@latest add callstackincubator/agent-skills --skill '*' --agent codex -y
# iOS builds: MobileBuildMCP (needs macOS 14.5+ and Xcode 16+)codex mcp add mobilebuild -- npx -y mobilebuildmcp@latest mcp# Cursor installs skills through the cross-agent skills CLInpx skills@latest add expo/skills --skill '*' --agent cursor -ynpx skills@latest add flutter/agent-plugins --skill '*' --agent cursor -ynpx skills@latest add callstackincubator/agent-skills --skill '*' --agent cursor -yMCP servers, including MobileBuildMCP, go in .cursor/mcp.json; each recipe shows its entry.
| Stack | Skill or server | Publisher | GitHub stars, 2026-09-26 |
|---|---|---|---|
| Expo | expo/skills | Expo (official) | 2,612 |
| Flutter and Dart | flutter/agent-plugins (renamed from flutter/skills) | Flutter team (official) | 2,996 |
| React Native | callstackincubator/agent-skills | Callstack (community, not Meta) | 1,656 |
| iOS builds | MobileBuildMCP (npm mobilebuildmcp 2.7.1, formerly XcodeBuildMCP) | Sentry | about 6,400 |
Skill or MCP server? See the frontend skills roundup and the dev-server MCP servers.
How do you verify a mobile change without reading every line?
Section titled “How do you verify a mobile change without reading every line?”Make the agent produce evidence, and review the evidence. Every recipe uses the same four gates, in order:
- Static gates. Run
npx tsc --noEmitand your linter for React Native, orflutter analyzefor Flutter. For Expo, addnpx expo install --checkto catch dependency versions the agent wrote by hand. - Unit and widget tests. Run
flutter test, or your JavaScript test runner with React Native Testing Library. Write the acceptance criteria as tests before the agent writes the feature. - Both platforms, on a simulator or emulator. The agent launches the app on iOS and Android and attaches a screenshot of each changed screen (Maestro in the Expo recipe, XCUITest and Compose UI tests in the native one).
- Release safety. A staged rollout in the store, and for Expo a fingerprint check so an OTA update never targets a build that lacks its native code.
The developer who opened the task signs off on the evidence; a tech lead owns the release gate. The evidence bundle carries it into a pull request, and mobile app testing patterns cover device matrices and flaky tests.
What breaks when agents build mobile apps?
Section titled “What breaks when agents build mobile apps?”- The agent pins versions from memory, writing APIs and config keys from an older SDK. Put the pinned version in
AGENTS.md, and letnpx expo installorflutter pub addchoose package versions. - “Done” without a device run. Reject any summary without a screenshot from each platform, and rerun the second prompt.
- One platform only. The agent tested whichever simulator was running; layout, permissions, and keyboard behaviour differ on the other. Name both targets in the prompt.
- Paid cloud builds run unattended. The
eas-*skills drive paid Expo Application Services builds. Keep builds, submissions, and OTA publishes behind your approval. - Too many tools in context. Each MCP server adds its tool list to every turn. Enable only what the task needs; the native recipe shows how to narrow MobileBuildMCP’s workflows.
Where to go next with mobile development
Section titled “Where to go next with mobile development”Cursor users: see the Cursor mobile development guide. To supervise a long agent run from your phone, see driving agents from your phone.