New:Microsoft Teams Notifications Are Now Available in Socket.Learn more โ†’
Get Started

reis-mobile

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

reis-mobile

AI agents and skills for Flutter, Android, iOS, React Native and Kotlin Multiplatform โ€” a Claude Code and Codex plugin for reviews, debugging, tests, architecture, security and Firebase.

latest
Source
npmnpm
Version
0.8.0
Version published
Weekly downloads
321
-71.42%
Maintainers
1
Weekly downloads
ย 
Created
Source

๐Ÿ“ฑ 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.

CI Latest npm version Claude Code plugin Node.js 22+ Zero dependencies MIT License

Flutter Android iOS React Native Kotlin Multiplatform

๐Ÿ”Ž 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.

VersionHighlights
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.2Kotlin Multiplatform specialists and a mobile-kmp skill; /reis-mobile:project records the app's real objects.
v0.7.1Update 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.0mobile-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.011 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.0Native 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.6reis-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.5Installs through npm and the Claude Code and Codex plugins.
v0.3.4Back 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.1Answers 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.06 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.0reis-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:

ToolTry
Claude Code/reis-mobile:doctor, then /reis-mobile:review
CodexType $ 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 Code
claude plugin marketplace add https://github.com/wrsilva/reis-mobile.git
claude plugin install reis-mobile@reis-mobile

# Codex
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 Code
claude plugin uninstall reis-mobile@reis-mobile
claude plugin marketplace remove reis-mobile

# Codex
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          # switch to Brazilian Portuguese without reinstalling
reis-mobile lang eng         # switch to English
reis-mobile lang             # show the current language

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
SymptomSolution
Codex says plugin reis-mobile was not found in marketplace reis-mobileThe 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 newerRun claude plugin marketplace update reis-mobile before update
New agents or skills do not show upRestart Claude Code or Codex: plugins only reload in a new session
reis-mobile --version still shows the old version after updatingAnother 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 thereAdd -g: npm uninstall -g reis-mobile
/reis-mobile:* commands missing after upgrading from v0.3.2 or v0.3.3Those versions named the plugin mobile. Run reis-mobile init eng: it installs reis-mobile@reis-mobile and removes mobile@reis-mobile
Plugin broken after updatingReinstall: 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                      # CLI pointing at the clone
reis-mobile init --local      # plugin pointing at the clone
npm run check                 # validates and runs the tests

After editing agents, skills or commands, restart Claude Code or Codex.

Commands

/reis-mobile                                      # Lists the commands (also accepts doctor, project, review, debug, test, release, debate or a free-form request)
/reis-mobile my android build fails on gradle     # Free-form request: detects the stack and applies the right agent and skills
/reis-mobile:doctor                               # Environment and project: SDKs, Xcode, CocoaPods, Gradle wrapper, lock files
/reis-mobile:doctor --all                         # Checks every tool, not only those for the detected stack
/reis-mobile:project checkout                     # Records actual checkout objects and test commands in .reis-mobile/project.md
/reis-mobile:review                               # Reviews uncommitted changes (or the whole project, if there are none)
/reis-mobile:review --base main                   # Reviews the current branch against main, pull request style
/reis-mobile:review --base main focus on security # Free-form focus, in English or Portuguese
/reis-mobile:debug pod install fails on CI        # Finds the cause of a build or runtime failure and proposes the fix
/reis-mobile:test run the checkout unit tests    # Uses the existing runner, module or scheme
/reis-mobile:test add XCTest coverage for cancellation # Tests the actual Swift type and its dependency seams
/reis-mobile:test audit Espresso checkout tests  # Reviews assertions and synchronization without editing
/reis-mobile:release audit both stores for the production variant # Evidence-backed readiness, read-only
/reis-mobile:debate Riverpod or BLoC in this app? # Debate between the specialists, with a decision by lead-mobile
/reis-mobile:debate --rounds 3 --external ...     # More rounds; --external adds Codex and Gemini, if installed

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

I want to...UseStatus
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 stackreis-mobile detectโœ…
Record the app's real objects and team context/reis-mobile:project [feature]โœ…
Review the architecture of an appagent flutter-architect, android-architect, ios-architect, rn-architect or kmp-architectโœ…
Find the cause of jank, rebuilds, hangs or leaksstack-specific *-performance-engineerโœ…
Write or audit testsstack-specific *-test-engineerโœ…
Debug a Gradle, Xcode, CocoaPods or Flutter build/reis-mobile:debugโœ…
Build a plugin or debug MethodChannel/EventChannelagent plugin-native-expertโœ…
Audit a screen for TalkBack, VoiceOver, touch targets and text scalingagent mobile-accessibility-auditorโœ…
Check release readiness, write release notes or set up CI/CDagent mobile-release-engineerโœ…
Set startup, frame, memory and battery budgets and guard them in CIskill mobile-performanceโœ…
Make the app work offline, queue writes and resolve conflictsskill mobile-offline-syncโœ…
Get usable crashes, errors, traces and release-health alerts in productionskill mobile-observabilityโœ…
Full audit with several specialistsagent 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?
Plain Claude Codereis-mobile
DomainGenericFlutter, Android, iOS, React Native, KMP
Project contextYou explain the stackDeterministic detection of stack, platform and variant
ReviewGenericMobile checklists: lifecycle, BuildContext, MASVS, manifest, ATS
Secrets in the diffSent as they areMasked before reaching the model
SpecialistsNone21 agents and 17 mobile skills
Context costZero~4,700 fixed tokens (agent and skill descriptions), no hooks
Best forGeneral tasksTeams 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

StackEvidence
Flutterpubspec.yaml with sdk: flutter (plugin variant when applicable)
React Nativepackage.json depending on react-native (expo variant)
Kotlin Multiplatformbuild.gradle.kts with the multiplatform plugin
AndroidGradle 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.

AgentStackTriggered forWhat it does
mobile-code-reviewerallreviewReview with file:line evidence, focused on what breaks in production
flutter-architectFlutterarchitecture, offlineLayers, feature-first, coupling, misplaced logic, refactoring plan
flutter-performance-engineerFlutterperformanceRebuilds, jank, lists, leaks, paint, startup, with a score and top 3 fixes
flutter-test-engineerFluttertestUnit, BLoC/Cubit, widget and integration, coverage audit and fragile tests
android-architectAndroidarchitecture, offlineUI, domain and data layers, Gradle modules, ViewModel and DI boundaries
android-performance-engineerAndroidperformanceCompose recomposition, lists, ANRs, startup, leaks, app size
android-test-engineerAndroidtestViewModel and coroutine tests, Compose and Espresso UI tests, flaky tests
ios-architectiOSarchitecture, offlineSwiftUI and UIKit structure, packages, navigation, concurrency boundaries
ios-performance-engineeriOSperformanceHangs, SwiftUI updates, lists, launch time, retain cycles, memory
ios-test-engineeriOStestSwift Testing and XCTest unit tests, async code, XCUITest flows
rn-architectReact Nativearchitecture, offlineFeature structure, server vs client state, navigation, native modules
rn-performance-engineerReact NativeperformanceRe-renders, lists, JavaScript thread, animations, startup, bundle size
rn-test-engineerReact NativetestJest, React Native Testing Library, native module mocks, Detox or Maestro
kmp-architectKotlin Multiplatformarchitecture, offlineShared source-set ownership, Android/iOS callers and Swift-facing contracts
kmp-performance-engineerKotlin MultiplatformperformanceShared Kotlin cost versus Android/iOS host traces and bridge overhead
kmp-test-engineerKotlin MultiplatformtestcommonTest, target tests and Android/iOS host coverage
mobile-accessibility-auditorallaccessibilityScreen reader labels, roles and states, touch targets, text scaling, focus and announcements, with fixes per platform
mobile-release-engineerallrelease, deployment, observabilityGo/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-engineeralldebug, architecture, performance, test, security, migration, dependency, build, offline, observabilityCross-toolchain diagnosis and migrations when no stack specialist owns the intent
plugin-native-expertFlutteron demandMethodChannel, EventChannel, Pigeon and Kotlin/Swift bridges, threading and lifecycle
lead-mobileallon demandCoordinates 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.

SkillCoversAuto-routed forReferences
mobile-architectureLayers, state management, modularization, DI, navigationarchitectureFlutter (BLoC, Riverpod, Provider, ChangeNotifier...), Android, iOS, React Native, KMP
mobile-code-reviewReview process and checklistsreview, performanceFlutter (PR review, widgets, project audit, static analysis), Android, iOS, React Native, KMP
mobile-debugFailing builds and runtime errorsdebug, build, dependency, migrationFlutter (build, runtime, layout, packages), Android (Gradle, crashes, ANRs, memory leaks), iOS (Xcode, CocoaPods, crash logs), React Native (Metro, native modules), KMP, deep links
mobile-testUnit, UI, integration and end-to-end teststestFlutter (widget, integration, Patrol, mocks, coverage), Android, iOS, React Native, KMP
mobile-securityOWASP MASVS security checksreview, security, releaseFlutter (token storage), Android (intents), iOS, React Native, KMP, OAuth/OIDC and PKCE
mobile-accessibilityScreen readers, touch targets, text scaling, contrast, localizationaccessibilityFlutter (Semantics), Android (Compose and Views), iOS (SwiftUI and UIKit), React Native, KMP, localization and RTL
mobile-releaseRelease readiness, store copy, billing and CI/CDrelease, deploymentFlutter, Android, iOS, React Native, KMP, release notes and store listing, in-app purchases, CI/CD
mobile-performanceStartup, rendering, memory, battery, app size and regression gatesperformanceFlutter, Android, iOS, React Native, KMP, background execution and battery
mobile-offline-syncLocal store, outbox, idempotency, conflict resolution, reconnectionofflineFlutter, Android, iOS, React Native, KMP
mobile-observabilityCrashes, errors, breadcrumbs, traces, alerts, sampling and privacyobservabilityFlutter, Android, iOS, React Native, KMP
mobile-firebaseFirebase setup and 13 productsโ€”Flutter, Android, iOS, React Native, KMP; check installed SDK support
mobile-flutterFlutter and Dart specificsreview, performance, accessibility, migrationUI and navigation, data, native code, performance, accessibility and i18n, Dart, setup
mobile-androidNative Android specifics, from the Android teamperformance, release, migration, build, dependencyCompose UI, AGP 9 and R8, profiling, Google Play, identity, camera and media, on-device AI, Wear OS, TV, XR
mobile-iosNative iOS specificsperformance, release, accessibilityUI and navigation, data and networking, platform features, performance and release
mobile-rnReact Native and Expo specificsperformance, release, accessibilityUI and navigation, data and networking, platform features, performance and release
mobile-kmpKotlin Multiplatform shared and target boundariesarchitecture, test, performance, review, debug and moreSource sets, Apple interop, shared Compose UI, build and profiling
mobile-detect-stackDeterministic 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

VersionDeliveryStatus
v0.1.0Foundation, stack detection, router, /reis-mobile:doctor, /reis-mobile:review for Flutterโœ…
v0.2.06 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.1Answer language (reis-mobile init pt|en, reis-mobile lang) and project content in Englishโœ…
v0.3.4Back to the reis-mobile name after the mobile renames of v0.3.2 and v0.3.3โœ…
v0.3.5Distribution through npm and the Claude Code and Codex plugins onlyโœ…
v0.3.6reis-mobile init installs in Claude Code and Codexโœ…
v0.4.0Native 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.0Topic and platform skills (mobile-*), with guides for Flutter, Android, iOS and React Native in each; new mobile-ios and mobile-rnโœ…
v0.6.0Accessibility 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.1Update 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.0mobile-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.0MCP serverโณ
v0.10.0Multi-provider (OpenAI, Gemini, OpenRouter, Ollama) beyond the debate's --externalโณ
v1.0.0First 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

Keywords

flutter

FAQs

Package last updated on 23 Sep 2026

Related posts