๐ฑ reis-mobile
A mobile app is not a generic project. A code review that does not know about BuildContext after await, android:exported, NSAllowsArbitraryLoads or Podfile.lock lets through exactly the bugs that only show up on the device. reis-mobile detects your project's stack, picks the right specialist and loads only the skills that apply to Flutter, Android, iOS, React Native or Kotlin Multiplatform.
AI agents and skills for mobile development โ Flutter, Android, iOS, React Native and Kotlin Multiplatform. A plugin for Claude Code and Codex with specialist agents and skills for code review, debugging, tests, architecture, security and Firebase.
๐ Detects the stack on its own. Flutter (app or plugin), React Native (including Expo), Kotlin Multiplatform, native Android and iOS, with languages and target platforms. A Flutter app with android/ and ios/ is still Flutter.
๐ฅ 21 agents and 17 mobile skills. Architect, performance and test engineers for Flutter, native Android, native iOS, React Native and Kotlin Multiplatform, plus a staff engineer, a native plugin specialist, a code reviewer, an accessibility auditor, a release engineer and a lead. Topic skills cover the five stacks with focused references for debugging, tests, security, Firebase, accessibility, releases, performance budgets, offline sync and production observability.
๐งฉ Project-specific context. /reis-mobile:project records real app symbols, owners, boundaries and validation commands in .reis-mobile/project.md; the team can add product rules that code cannot reveal. Refreshing the verified map preserves team-authored text.
๐ Answers in English or Portuguese. reis-mobile init eng or reis-mobile init pt sets the language of reports, explanations and debates.
๐งญ Routes to the right specialist. Describe the problem in English or Portuguese, and the router identifies the intent, the stack and the platform in focus. "The Android build of my Flutter app broke" loads Flutter and Android context.
๐ก๏ธ Real mobile security. Checklist based on OWASP MASVS, with concrete per-stack checks: flutter_secure_storage, network_security_config, ATS, Keychain and AsyncStorage.
๐ฉบ A doctor that understands mobile. Checks Flutter, Dart, Java, Android SDK, Xcode, CocoaPods, Gradle wrapper and lock files, but only what matters for the detected stack.
๐ Secrets never reach the model. The diff sent for review goes through a layer that masks API keys, tokens, JWTs, private keys and keystore passwords.
๐ชถ Two commands to install. npm install -g reis-mobile and reis-mobile init eng set it up in Claude Code and Codex, with zero npm dependencies and no external provider.
What's new
v0.8.0
Added
mobile-performance topic skill: measurement before optimization, budgets for startup, rendering, memory, battery and app size, and regression detection in CI, with a reference per stack (Flutter DevTools and integration_test summaries, Android Macrobenchmark, Baseline Profiles and vitals, iOS Instruments, MetricKit and XCTMetric baselines, React Native Hermes profiling and list tuning, KMP shared-versus-host isolation) plus a cross-stack guide to background execution and battery.
mobile-offline-sync topic skill: local store as the source of truth, a durable outbox with client-generated idempotency keys, ordering and operation collapsing, retry with backoff, conflict strategies per entity, reconnection triggers, offline UX and nine failure cases to test, with a reference per stack (drift and workmanager, Room and WorkManager, Core Data/SwiftData and BGTaskScheduler, SQLite with NetInfo and OTA-aware drains, SQLDelight and Ktor in commonMain).
mobile-observability topic skill: the signals that explain a production failure, mandatory segmentation by version and cohort, error context and grouping, correlation ids shared with the backend, rate-based alerting per version, sampling and cost, and what must never be collected, with a reference per stack (Flutter's three capture layers and Dart symbol upload, Android vitals and ApplicationExitInfo, MetricKit and Organizer, React Native source maps and OTA update ids, KMP Telemetry boundary and Kotlin/Native crash hooks).
offline and observability intents in the router. offline goes to the stack's architect and falls back to mobile-staff-engineer; observability goes to mobile-release-engineer.
mobile-security/references/auth.md: OAuth 2.0 and OIDC for native apps following RFC 8252 โ authorization code with PKCE (S256), no client secret, system browser instead of a WebView, redirect URI choices, token rotation with reuse detection, and biometrics gating a key rather than a boolean.
mobile-release/references/billing.md: in-app purchase and subscription lifecycle โ server-side entitlement, store server notifications, the states between active and expired, acknowledgement deadlines and automatic refunds, restore and account mapping, and the per-stack client libraries.
mobile-accessibility/references/localization.md: strings, CLDR plurals, locale-aware formatting, right-to-left layout and icon mirroring, translation growth, per-app language settings and pseudolocalization.
Changed
- The five
*-architect agents also serve the offline intent, and mobile-release-engineer also serves observability; mobile-staff-engineer covers both when no stack is detected.
Earlier highlights
v0.7.0: /reis-mobile:test runs, writes, audits or fixes tests using the app's existing setup, including XCTest/XCUITest and Espresso. The 18 agents now use a shared project brief and role-specific investigations tied to actual files, symbols and constraints.
๐ v0.4.0: every mobile stack. Native Android, native iOS and React Native get their own architect, performance and test specialists, and /reis-mobile:debug finds the cause of a failing build with the toolchain versions in hand.
/reis-mobile:debug Execution failed for task ':app:compileDebugKotlin'
/reis-mobile:debug pod install could not find compatible versions for Firebase
Tests and Firebase are one skill each โ mobile-test and mobile-firebase โ with a guide per platform, so a request loads only what your stack needs.
| v0.7.3 | /reis-mobile:release audits store readiness per target, with evidence gates and a GO / GO WITH RISKS / NO-GO verdict. |
| v0.7.2 | Kotlin Multiplatform specialists and a mobile-kmp skill; /reis-mobile:project records the app's real objects. |
| v0.7.1 | Update notices on Claude Code and Codex session start, plus a single-source version and CI-driven release process. |
| v0.7.0 | /reis-mobile:test, native XCTest and Espresso guidance, and project-specific contracts for the 18 specialists. |
| v0.6.0 | mobile-accessibility-auditor and mobile-release-engineer agents with the new mobile-accessibility and mobile-release skills: accessibility audits on every stack, release readiness with a go/no-go verdict, release notes and store copy, CI/CD. mobile-debug gains guides for ANRs, Android memory leaks and deep links. |
| v0.5.0 | 11 skills instead of 60: topic skills with a guide per platform (mobile-architecture, mobile-code-review, mobile-debug, mobile-test, mobile-security, mobile-firebase) and platform skills (mobile-flutter, mobile-android, and the new mobile-ios and mobile-rn). Half the fixed context cost. |
| v0.4.0 | Native Android, iOS and React Native: architect, performance and test agents for each; /reis-mobile:debug for Gradle, Xcode, CocoaPods and Flutter failures; mobile-test and mobile-firebase with a guide per platform; the Android team's skills; .reis-mobile/config.yaml for monorepos. Skills now use stack prefixes. |
| v0.3.6 | reis-mobile init eng installs the plugin in Claude Code and Codex at once, skipping whichever is not installed; init --uninstall removes it from both. |
| v0.3.5 | Installs through npm and the Claude Code and Codex plugins. |
| v0.3.4 | Back to the reis-mobile name: reis-mobile CLI and /reis-mobile:* commands, undoing the mobile renames of v0.3.2 and v0.3.3. |
| v0.3.1 | Answers in English or Portuguese: reis-mobile init pt|en and reis-mobile lang save the language for reports, doctor explanations and debates. Agents, skills, commands and docs are now written in English. |
| v0.3.0 | /reis-mobile:debate command: three specialists with conflicting priorities debate over two rounds and lead-mobile decides. Participants vary in role and model; --external adds Codex and Gemini. Brings forward the council planned for v0.8.0. |
| v0.2.1 | /reis-mobile command: lists the commands and forwards to doctor, review or, with a free-form request, to the agent and skills for the detected stack. Shows up in the VS Code extension command menu. |
| v0.2.0 | 6 new agents (flutter-architect, flutter-performance-engineer, flutter-test-engineer, mobile-staff-engineer, plugin-native-expert, lead-mobile) and 63 new Flutter, Dart and Firebase skills. The router now has a specialist for debug, test, architecture and performance. |
| v0.1.0 | reis-mobile plugin for Claude Code. Detection of 5 stacks. Intent + stack โ agent + skills router. Context engine with masked diff. /reis-mobile:doctor and /reis-mobile:review. reis-mobile CLI. |
Full changelog โ
Installation
You need Node.js 22+ and Claude Code, the Codex CLI, or both.
Install
npm install -g reis-mobile
reis-mobile init eng
init installs the plugin in Claude Code and Codex, whichever you have, and sets the answer language (eng or pt):
โ Claude Code installed
โ Codex installed
โ Language en (~/.config/reis-mobile/config.json)
Restart Claude Code and Codex, open your app folder and try it:
| Claude Code | /reis-mobile:doctor, then /reis-mobile:review |
| Codex | Type $ to search the skills, or use /skills |
Update
npm update -g reis-mobile
reis-mobile init eng
Then restart Claude Code and Codex. See what changed in the CHANGELOG.
The plugin checks the npm latest tag when a Claude Code or Codex session starts or resumes. If a newer release exists, it shows an update notice; it never installs anything automatically. The registry result is cached for 24 hours, the request times out after 1.5 seconds, and offline failures are silent in the hook. Codex requires you to trust the new hook through /hooks before it runs. To check the CLI manually, run reis-mobile update-check --force; set REIS_MOBILE_UPDATE_CHECK=0 to disable the automatic check. Versions released before this hook cannot display the notice until they are updated once.
Uninstall
reis-mobile init --uninstall
npm uninstall -g reis-mobile
The first command removes the plugin from Claude Code and Codex and deletes the saved language; the second removes the CLI. Keep the -g: without it, npm looks for the package in the current folder and removes nothing.
Install without npm
Add the plugin straight from GitHub. The marketplace add line only needs to run once per machine.
claude plugin marketplace add https://github.com/wrsilva/reis-mobile.git
claude plugin install reis-mobile@reis-mobile
codex plugin marketplace add https://github.com/wrsilva/reis-mobile.git
codex plugin add reis-mobile@reis-mobile
To update, run claude plugin marketplace update reis-mobile and claude plugin update reis-mobile@reis-mobile in Claude Code, or codex plugin marketplace upgrade reis-mobile and codex plugin add reis-mobile@reis-mobile in Codex.
To uninstall:
claude plugin uninstall reis-mobile@reis-mobile
claude plugin marketplace remove reis-mobile
codex plugin remove reis-mobile@reis-mobile
codex plugin marketplace remove reis-mobile
Language
Agents, skills and commands are written in English. The language you choose is the one reis-mobile answers in: /reis-mobile:review reports, /reis-mobile:doctor explanations, and debate rounds and syntheses.
reis-mobile lang pt
reis-mobile lang eng
reis-mobile lang
The choice is saved to ~/.config/reis-mobile/config.json (%APPDATA%\reis-mobile\config.json on Windows) and survives plugin updates. --lang on a single run and the REIS_MOBILE_LANG environment variable override it. With nothing set, each command answers in the language of your request. Agents that Claude Code triggers on its own, outside a /reis-mobile:* command, follow the language of the conversation.
Using the CLI from Codex
The Codex plugin gives Codex the skills; the agents and the /reis-mobile:* commands are Claude Code formats and have not been validated in Codex. For routing and review context, run the CLI in the app folder:
reis-mobile doctor
reis-mobile route "review architecture" --json
reis-mobile review --json
You can also ask Codex: "Run reis-mobile review --json, read the instructions in the returned files and review the changes using that context." The CLI selects the instructions and gathers the context; Codex does the analysis.
Troubleshooting
Codex says plugin reis-mobile was not found in marketplace reis-mobile | The marketplace is not registered or is outdated. Run reis-mobile init eng, or codex plugin marketplace add https://github.com/wrsilva/reis-mobile.git followed by codex plugin add reis-mobile@reis-mobile |
claude plugin update says it is already on the latest version, but the release is newer | Run claude plugin marketplace update reis-mobile before update |
| New agents or skills do not show up | Restart Claude Code or Codex: plugins only reload in a new session |
reis-mobile --version still shows the old version after updating | Another reis-mobile comes first on the PATH; find it with which -a reis-mobile (where.exe reis-mobile on Windows) and remove it |
npm uninstall reis-mobile says up to date and the command is still there | Add -g: npm uninstall -g reis-mobile |
/reis-mobile:* commands missing after upgrading from v0.3.2 or v0.3.3 | Those versions named the plugin mobile. Run reis-mobile init eng: it installs reis-mobile@reis-mobile and removes mobile@reis-mobile |
| Plugin broken after updating | Reinstall: reis-mobile init --uninstall, then reis-mobile init eng |
Development from the clone
git clone https://github.com/wrsilva/reis-mobile.git
cd reis-mobile
npm link
reis-mobile init --local
npm run check
After editing agents, skills or commands, restart Claude Code or Codex.
Commands
/reis-mobile
/reis-mobile my android build fails on gradle
/reis-mobile:doctor
/reis-mobile:doctor --all
/reis-mobile:project checkout
/reis-mobile:review
/reis-mobile:review --base main
/reis-mobile:review --base main focus on security
/reis-mobile:debug pod install fails on CI
/reis-mobile:test run the checkout unit tests
/reis-mobile:test add XCTest coverage for cancellation
/reis-mobile:test audit Espresso checkout tests
/reis-mobile:release audit both stores for the production variant
/reis-mobile:debate Riverpod or BLoC in this app?
/reis-mobile:debate --rounds 3 --external ...
Debug
/reis-mobile:debug takes the error, the failing command or a description of the problem. It routes to the debug agent and to the skills for the stack and the build area it recognizes (gradle, xcode, cocoapods, signing, pub...), adds the doctor report with the installed toolchain versions, and answers with the cause, the evidence, the minimal fix and how to verify it.
It proposes; it does not change your project on its own. Commands that alter files or caches โ flutter clean, pod install, deleting DerivedData or Gradle caches, dependency upgrades โ only run after you ask it to apply the fix.
Test
/reis-mobile:test uses the request to choose whether to run existing tests, write missing tests, audit coverage or fix failures. With no request, it selects tests for the current changes or the documented default local suite in a clean project; if neither can be established, it inventories the setup and reports the limitation. It identifies the actual classes, functions, modules and test targets before proposing cases. Flutter widget/integration tests, Android JVM tests and Espresso/Compose instrumentation, iOS XCTest/Swift Testing and XCUITest, and React Native unit/component/E2E setups use their own references.
The command discovers Gradle modules and variants or Xcode workspaces, schemes, test plans and destinations from the project. It reports exact commands, results and checks blocked by missing SDKs or devices; static inspection is never reported as a passing native test. A request to run tests executes the available relevant tests, while an audit stays read-only.
The companion CLI prepares context for the model; it does not execute the app's tests:
reis-mobile test --dir apps/mobile --json -- "audit checkout tests"
reis-mobile test --base main -- "write regression tests for these changes"
Its output includes the resolved project directory, explicit test intent, selected specialist and skills, redacted change context, toolchain diagnostics and answer language. /reis-mobile test ... forwards to the same slash-command workflow.
Release readiness
/reis-mobile:release [request] audits the actual app artifacts for Flutter, native Android/iOS, React Native/Expo and Kotlin Multiplatform. /reis-mobile release [request] forwards to the same workflow. It resolves the app ID, flavor/scheme, environment, version/build, source revision, store/track and binary before evaluating readiness. Apps targeting both stores receive separate Android and iOS checks.
The report lists each required gate as pass, fail or unknown, with evidence and next actions: identity, build, tests, analysis, version, signing, symbols, current store requirements, privacy, listing/localization and rollout/recovery. Any failed or unknown required gate means NO-GO. All gates passing means GO, or GO WITH RISKS when documented non-blocking risks remain. A packaged verdict helper enforces this decision rule; the specialist must still verify the evidence itself.
The audit inspects existing files, artifacts and accessible CI/store records. It does not build, run tests, bump versions, tag, upload or change store settings by default. Missing CI results, upload history or portal confirmations remain unknown; local configuration is not proof that a check passed. Explicit execution requests retain their requested scope and prior authorization.
reis-mobile release --dir apps/mobile --json -- "audit Android production and iOS App Store"
The CLI only prepares routing, redacted git context, diagnostics and release reference paths. Its JSON includes release.platforms (candidate targets), release.references, release.evidenceStatus: "unverified" and release.verdict: null. Exit 0 does not approve a release. In Codex, ask it to run the CLI, read the returned instructions and follow mobile-release's readiness contract; slash-command parity is not assumed.
See the readiness contract and public Flutter sample audit for the report format and evidence limits.
Project context
/reis-mobile:project [feature] resolves the mobile app, traces real entry points, state owners, data or native boundaries and nearby tests, then creates or refreshes .reis-mobile/project.md. In a monorepo it writes beside .reis-mobile/config.yaml; otherwise it writes in the app root. The generated section contains only facts tied to code or configuration and identifies unknown product rules. Team-authored sections remain intact on refresh. Agents check its paths and commands against the current checkout before using them.
Debate
/reis-mobile:debate puts three specialists with conflicting priorities to defend positions on the same question. Round 1 is blind, so the first to answer does not anchor the others; in round 2 each one rebuts specific points from the others; at the end, lead-mobile decides and delivers the action plan. The rounds are stored in .reis-mobile/debates/.
Participants vary along two axes at once. The role gives each one a different incentive: flutter-architect defends layer boundaries, flutter-performance-engineer is hostile to indirection, flutter-test-engineer wants injection seams the other two consider noise. The model keeps that disagreement from staying on the surface โ the command spreads opus and sonnet across the participants, because three instances of the same model inherit the same blind spots and tend to converge for reasons that have nothing to do with your question. With --external, a third axis comes in: outside providers, in separate processes.
It is expensive: several agents over two rounds. Use it for architecture decisions with a real trade-off โ migrate to Riverpod, offline-first with Firestore or a local cache, native plugin or an off-the-shelf package โ and not for questions with a single answer, where /reis-mobile <request> solves it for less.
With --external, the command checks whether the codex and gemini CLIs exist and carries on without them if they are missing. External providers do not know the project and do not have the plugin skills: they come in as an outside opinion, checked against the code before the synthesis.
Not sure what the router will pick? Ask the CLI:
$ reis-mobile route "Execution failed for task ':app:compileDebugKotlin'"
Intent debug (confidence 0.5) ยท area gradle
Stack flutter ยท focus android
Agent mobile-staff-engineer
Skills mobile-debug
$ reis-mobile route "write tests for the login cubit"
Intent test (confidence 1)
Stack flutter
Agent flutter-test-engineer
Skills mobile-test
The router never invents a specialist: if no agent serves the intent, it warns you. You do not need to call agents by name, because Claude Code triggers them by their description when the request fits. To force one of them, ask: "use reis-mobile:flutter-architect to review the architecture".
Choose by goal
| Know if my environment is ready to build | /reis-mobile:doctor | โ
|
| Review a PR or my changes | /reis-mobile:review | โ
|
| Audit an entire Flutter project | /reis-mobile:review with no pending changes | โ
|
| Find out a project's stack | reis-mobile detect | โ
|
| Record the app's real objects and team context | /reis-mobile:project [feature] | โ
|
| Review the architecture of an app | agent flutter-architect, android-architect, ios-architect, rn-architect or kmp-architect | โ
|
| Find the cause of jank, rebuilds, hangs or leaks | stack-specific *-performance-engineer | โ
|
| Write or audit tests | stack-specific *-test-engineer | โ
|
| Debug a Gradle, Xcode, CocoaPods or Flutter build | /reis-mobile:debug | โ
|
| Build a plugin or debug MethodChannel/EventChannel | agent plugin-native-expert | โ
|
| Audit a screen for TalkBack, VoiceOver, touch targets and text scaling | agent mobile-accessibility-auditor | โ
|
| Check release readiness, write release notes or set up CI/CD | agent mobile-release-engineer | โ
|
| Set startup, frame, memory and battery budgets and guard them in CI | skill mobile-performance | โ
|
| Make the app work offline, queue writes and resolve conflicts | skill mobile-offline-sync | โ
|
| Get usable crashes, errors, traces and release-health alerts in production | skill mobile-observability | โ
|
| Full audit with several specialists | agent lead-mobile | โ
|
| Decide between two architectures with a real trade-off | /reis-mobile:debate | โ
|
| Dedicated test command (including XCTest and Espresso) | /reis-mobile:test | โ
|
| Check whether the app is ready for the store with evidence per target | /reis-mobile:release | โ
|
| Consolidated decision by consensus between agents | /reis-mobile:council | ๐ v0.10 |
How is it different from plain Claude Code?
| Domain | Generic | Flutter, Android, iOS, React Native, KMP |
| Project context | You explain the stack | Deterministic detection of stack, platform and variant |
| Review | Generic | Mobile checklists: lifecycle, BuildContext, MASVS, manifest, ATS |
| Secrets in the diff | Sent as they are | Masked before reaching the model |
| Specialists | None | 21 agents and 17 mobile skills |
| Context cost | Zero | ~4,700 fixed tokens (agent and skill descriptions), no hooks |
| Best for | General tasks | Teams and developers working on mobile apps |
In short: Claude Code already knows how to code. reis-mobile makes it look at what matters in a mobile app.
How it works
/reis-mobile:review
โ
โโ detect stack โโโโโโโโ pubspec.yaml โ flutter (android, ios)
โโ detect intent โโโโโโโ review
โโ select agent โโโโโโโโ mobile-code-reviewer
โโ select skills โโโโโโโ mobile-code-review ยท mobile-flutter ยท mobile-security
โโ collect context โโโโโ git diff (lock files out, secrets masked)
โโ review report โโโโโโโ Summary ยท Critical ยท Bugs ยท Architecture ยท Security ยท Performance ยท Maintainability
The Node.js core decides what to load. The model decides how to review, following the loaded instructions. Details in ARCHITECTURE.md.
Stack detection
| Flutter | pubspec.yaml with sdk: flutter (plugin variant when applicable) |
| React Native | package.json depending on react-native (expo variant) |
| Kotlin Multiplatform | build.gradle.kts with the multiplatform plugin |
| Android | Gradle at the root + AndroidManifest.xml or a com.android.* plugin |
| iOS | *.xcodeproj, *.xcworkspace, Podfile or Package.swift with .iOS |
Agents
Agents share a project brief contract: app root, requested outcome, real objects at path:line, established conventions, constraints and validation commands. They reuse a caller's brief and load technical checklists from the relevant skill. Architects deliver boundary decisions, performance engineers deliver measurement plans and evidence, test engineers deliver behavior-to-test coverage, and the lead resolves conflicting findings.
For domain knowledge that code cannot reveal, optionally commit .reis-mobile/project.md with critical user journeys, invariants, deliberate boundaries and CI commands. The model reads it alongside repository instructions and verifies it against code. It is Markdown context, not a new key in .reis-mobile/config.yaml; no setup file is required. See the team context example.
mobile-code-reviewer | all | review | Review with file:line evidence, focused on what breaks in production |
flutter-architect | Flutter | architecture, offline | Layers, feature-first, coupling, misplaced logic, refactoring plan |
flutter-performance-engineer | Flutter | performance | Rebuilds, jank, lists, leaks, paint, startup, with a score and top 3 fixes |
flutter-test-engineer | Flutter | test | Unit, BLoC/Cubit, widget and integration, coverage audit and fragile tests |
android-architect | Android | architecture, offline | UI, domain and data layers, Gradle modules, ViewModel and DI boundaries |
android-performance-engineer | Android | performance | Compose recomposition, lists, ANRs, startup, leaks, app size |
android-test-engineer | Android | test | ViewModel and coroutine tests, Compose and Espresso UI tests, flaky tests |
ios-architect | iOS | architecture, offline | SwiftUI and UIKit structure, packages, navigation, concurrency boundaries |
ios-performance-engineer | iOS | performance | Hangs, SwiftUI updates, lists, launch time, retain cycles, memory |
ios-test-engineer | iOS | test | Swift Testing and XCTest unit tests, async code, XCUITest flows |
rn-architect | React Native | architecture, offline | Feature structure, server vs client state, navigation, native modules |
rn-performance-engineer | React Native | performance | Re-renders, lists, JavaScript thread, animations, startup, bundle size |
rn-test-engineer | React Native | test | Jest, React Native Testing Library, native module mocks, Detox or Maestro |
kmp-architect | Kotlin Multiplatform | architecture, offline | Shared source-set ownership, Android/iOS callers and Swift-facing contracts |
kmp-performance-engineer | Kotlin Multiplatform | performance | Shared Kotlin cost versus Android/iOS host traces and bridge overhead |
kmp-test-engineer | Kotlin Multiplatform | test | commonTest, target tests and Android/iOS host coverage |
mobile-accessibility-auditor | all | accessibility | Screen reader labels, roles and states, touch targets, text scaling, focus and announcements, with fixes per platform |
mobile-release-engineer | all | release, deployment, observability | Go/no-go readiness, versions and signing, crash symbols, release notes and store copy, CI/CD, staged rollout, production crash and release-health signals |
mobile-staff-engineer | all | debug, architecture, performance, test, security, migration, dependency, build, offline, observability | Cross-toolchain diagnosis and migrations when no stack specialist owns the intent |
plugin-native-expert | Flutter | on demand | MethodChannel, EventChannel, Pigeon and Kotlin/Swift bridges, threading and lifecycle |
lead-mobile | all | on demand | Coordinates the other agents and consolidates a single action plan |
When more than one agent serves the intent, the stack-specific one wins. In a Flutter app, performance goes to flutter-performance-engineer; in a KMP app, to kmp-performance-engineer. accessibility goes to mobile-accessibility-auditor, release, deployment and observability to mobile-release-engineer on every stack, and offline to the stack's architect. Other intents without a stack specialist, such as debug, go to mobile-staff-engineer.
Skills
Every skill starts with mobile-. Topic skills cover every stack with one reference per platform; platform skills hold what exists only on one stack. A request loads the skill, and the model then opens only the reference for your stack and task.
mobile-architecture | Layers, state management, modularization, DI, navigation | architecture | Flutter (BLoC, Riverpod, Provider, ChangeNotifier...), Android, iOS, React Native, KMP |
mobile-code-review | Review process and checklists | review, performance | Flutter (PR review, widgets, project audit, static analysis), Android, iOS, React Native, KMP |
mobile-debug | Failing builds and runtime errors | debug, build, dependency, migration | Flutter (build, runtime, layout, packages), Android (Gradle, crashes, ANRs, memory leaks), iOS (Xcode, CocoaPods, crash logs), React Native (Metro, native modules), KMP, deep links |
mobile-test | Unit, UI, integration and end-to-end tests | test | Flutter (widget, integration, Patrol, mocks, coverage), Android, iOS, React Native, KMP |
mobile-security | OWASP MASVS security checks | review, security, release | Flutter (token storage), Android (intents), iOS, React Native, KMP, OAuth/OIDC and PKCE |
mobile-accessibility | Screen readers, touch targets, text scaling, contrast, localization | accessibility | Flutter (Semantics), Android (Compose and Views), iOS (SwiftUI and UIKit), React Native, KMP, localization and RTL |
mobile-release | Release readiness, store copy, billing and CI/CD | release, deployment | Flutter, Android, iOS, React Native, KMP, release notes and store listing, in-app purchases, CI/CD |
mobile-performance | Startup, rendering, memory, battery, app size and regression gates | performance | Flutter, Android, iOS, React Native, KMP, background execution and battery |
mobile-offline-sync | Local store, outbox, idempotency, conflict resolution, reconnection | offline | Flutter, Android, iOS, React Native, KMP |
mobile-observability | Crashes, errors, breadcrumbs, traces, alerts, sampling and privacy | observability | Flutter, Android, iOS, React Native, KMP |
mobile-firebase | Firebase setup and 13 products | โ | Flutter, Android, iOS, React Native, KMP; check installed SDK support |
mobile-flutter | Flutter and Dart specifics | review, performance, accessibility, migration | UI and navigation, data, native code, performance, accessibility and i18n, Dart, setup |
mobile-android | Native Android specifics, from the Android team | performance, release, migration, build, dependency | Compose UI, AGP 9 and R8, profiling, Google Play, identity, camera and media, on-device AI, Wear OS, TV, XR |
mobile-ios | Native iOS specifics | performance, release, accessibility | UI and navigation, data and networking, platform features, performance and release |
mobile-rn | React Native and Expo specifics | performance, release, accessibility | UI and navigation, data and networking, platform features, performance and release |
mobile-kmp | Kotlin Multiplatform shared and target boundaries | architecture, test, performance, review, debug and more | Source sets, Apple interop, shared Compose UI, build and profiling |
mobile-detect-stack | Deterministic stack detection with the CLI | โ | โ |
Skills marked โ are triggered by Claude Code when the request matches their description, for example "add push notifications with FCM" โ mobile-firebase.
About 85 guides come from flutter/skills, dart-lang/skills, evanca/flutter-ai-rules and android/skills, unchanged and credited in THIRD_PARTY_NOTICES.md.
Trust, security and limits
Read-only CLI context. doctor, detect, route, review, test and release do not modify your project. /reis-mobile:release inspects existing release evidence and remains read-only unless execution is explicitly requested. The /reis-mobile:test slash command can write or fix tests and execute runners when requested. /reis-mobile:project writes only the optional project profile. The /reis-mobile:review and /reis-mobile:debate commands instruct the model not to edit app code; the debate writes its rounds to .reis-mobile/debates/.
Secrets masked. The diff goes through core/security/redact.mjs before reaching the model. Lock files and generated code (*.g.dart, *.freezed.dart, *.pbxproj) stay out of the diff. Redaction is a protection layer, not a guarantee. See SECURITY.md.
No telemetry. detect, doctor, route, review, debug and test make no network calls. The update hook and update-check request the public npm package metadata; they send no project files or identifiers. Installation downloads the package and registers the plugin. The Google Play policy guide in mobile-android runs Python scripts that download your app's public Google Play listing when the model uses it. The AI analysis uses the model of the session you are working in, such as Claude Code or Codex.
Exception: /reis-mobile:debate --external. This flag, and only this flag, sends the debate context โ including excerpts of the files mentioned in the question โ to the codex and gemini CLIs, which are third-party and have their own data policies. Without the flag, the debate context stays in your session. The review diff is masked by redact.mjs, but the context you cite in a debate question does not go through that layer: check what you are sending before using --external.
Context cost. Claude Code loads the descriptions of 21 agents and 17 skills; the full content of each skill is loaded only when it is used. The exact description cost depends on the host and plugin version.
One session hook. On session startup or resume, the plugin checks for a newer release and warns only when the installed plugin is outdated. It does not read the project or modify the plugin installation.
Own namespace. Commands live under /reis-mobile:* and do not conflict with the built-in /review or /security-review.
Clean uninstall. reis-mobile init --uninstall removes the plugin and its marketplace from Claude Code and Codex, the saved language and the update-check cache.
Roadmap
| v0.1.0 | Foundation, stack detection, router, /reis-mobile:doctor, /reis-mobile:review for Flutter | โ
|
| v0.2.0 | 6 agents and 63 Flutter, Dart and Firebase skills | โ
|
| v0.2.1 | /reis-mobile entry command | โ
|
| v0.3.0 | /reis-mobile:debate: multi-agent with a decision, across distinct roles and models โ delivered in place of the council planned for v0.8.0 | โ
|
| v0.3.1 | Answer language (reis-mobile init pt|en, reis-mobile lang) and project content in English | โ
|
| v0.3.4 | Back to the reis-mobile name after the mobile renames of v0.3.2 and v0.3.3 | โ
|
| v0.3.5 | Distribution through npm and the Claude Code and Codex plugins only | โ
|
| v0.3.6 | reis-mobile init installs in Claude Code and Codex | โ
|
| v0.4.0 | Native Android and iOS skills, architect, performance and test agents for Android, iOS and React Native, .reis-mobile/config.yaml and /reis-mobile:debug (Gradle, Xcode, CocoaPods, Flutter) | โ
|
| v0.5.0 | Topic and platform skills (mobile-*), with guides for Flutter, Android, iOS and React Native in each; new mobile-ios and mobile-rn | โ
|
| v0.6.0 | Accessibility auditor and release engineer agents, mobile-accessibility and mobile-release skills, ANR, memory leak and deep link debugging guides | โ
|
| v0.7.0 | /reis-mobile:test, native tests (XCTest, Espresso) and project-specific specialist contracts | โ
|
| v0.7.1 | Update notices, single-source version and release automation | โ
|
| v0.7.3 | /reis-mobile:release with per-target evidence, required gates and deterministic readiness verdicts (previously planned for v0.8.0) | โ
|
| v0.8.0 | mobile-performance, mobile-offline-sync and mobile-observability topic skills with a reference per stack, plus background execution, OAuth/PKCE, billing lifecycle and localization references | โ
|
| v0.9.0 | MCP server | โณ |
| v0.10.0 | Multi-provider (OpenAI, Gemini, OpenRouter, Ollama) beyond the debate's --external | โณ |
| v1.0.0 | First stable version: Flutter, Android, iOS and React Native | โณ |
FAQ
Do I need Flutter, Xcode or the Android SDK installed?
Not for the review, which only reads code. /reis-mobile:doctor shows what is missing in case you want to build.
My app lives inside a monorepo.
Commit a .reis-mobile/config.yaml at the repository root pointing at the app:
app: apps/mobile
Every command then analyzes apps/mobile, wherever in the repository you run it, and the review diff is restricted to that folder. Without the file, run from the app folder or pass --dir apps/mobile.
Does it work with native Android and iOS?
Yes. Native Android, native iOS and React Native each have architect, performance and test agents, and the cross-platform skills โ mobile-debug, mobile-code-review, mobile-test and mobile-firebase โ have a guide for each of them (Gradle and R8, Xcode and CocoaPods, Metro and native modules). The platform skills mobile-android, mobile-ios and mobile-rn add what exists only on each stack; mobile-android includes the Android team's guides from android/skills (Compose, AGP 9, R8, Play policy, Wear, TV and more).
I already have skills with the same names in ~/.claude/skills.
The plugin's skills live in the reis-mobile: namespace and do not conflict, but Claude Code loads both descriptions. To save context, remove the global copies the plugin already covers.
Does it work in Codex?
Yes: reis-mobile init eng installs the plugin in Codex too. See installation. Installation does not confirm parity with the Claude Code agents and commands; the reis-mobile CLI can also be run by Codex to get diagnostics and context.
Does it work in Cursor?
The Cursor integration has not been validated yet. The MCP server remains on the roadmap for v0.8.0.
What does reis-mobile send outside my machine?
The project analysis commands do not make network requests. The update hook and reis-mobile update-check request the public npm package metadata without sending project files or identifiers. What the model reads during /reis-mobile:review follows the same rules as any Claude Code session.
Contributing
Contributions are welcome, especially Android, iOS and React Native skills.
Questions: Discussions. Where to ask for help: SUPPORT.md.
Documentation
Attribution
License
MIT. See LICENSE.
wrsilva | MIT License | Report Issues