reis-mobile 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/.claude-plugin/marketplace.json +24 -0
  2. package/.claude-plugin/plugin.json +12 -0
  3. package/CHANGELOG.md +103 -0
  4. package/LICENSE +21 -0
  5. package/README.md +631 -0
  6. package/THIRD_PARTY_NOTICES.md +105 -0
  7. package/agents/flutter-architect.md +92 -0
  8. package/agents/flutter-performance-engineer.md +103 -0
  9. package/agents/flutter-test-engineer.md +100 -0
  10. package/agents/lead-mobile.md +107 -0
  11. package/agents/mobile-code-reviewer.md +66 -0
  12. package/agents/mobile-staff-engineer.md +85 -0
  13. package/agents/plugin-native-expert.md +97 -0
  14. package/bin/reis-mobile.mjs +256 -0
  15. package/commands/debate.md +135 -0
  16. package/commands/doctor.md +23 -0
  17. package/commands/reis-mobile.md +50 -0
  18. package/commands/review.md +53 -0
  19. package/core/config/language.mjs +83 -0
  20. package/core/context/context-engine.mjs +113 -0
  21. package/core/detection/project-probe.mjs +104 -0
  22. package/core/detection/stack-detector.mjs +204 -0
  23. package/core/diagnostics/doctor.mjs +181 -0
  24. package/core/install/claude-plugin.mjs +76 -0
  25. package/core/paths.mjs +4 -0
  26. package/core/registry/frontmatter.mjs +81 -0
  27. package/core/registry/registry.mjs +140 -0
  28. package/core/router/intent-detector.mjs +75 -0
  29. package/core/router/intents.mjs +91 -0
  30. package/core/router/router.mjs +83 -0
  31. package/core/security/redact.mjs +24 -0
  32. package/package.json +35 -0
  33. package/skills/architecture-feature-first/SKILL.md +116 -0
  34. package/skills/bloc/SKILL.md +354 -0
  35. package/skills/code-review/SKILL.md +89 -0
  36. package/skills/dart-3-updates/SKILL.md +223 -0
  37. package/skills/dart-add-unit-test/SKILL.md +126 -0
  38. package/skills/dart-collect-coverage/SKILL.md +145 -0
  39. package/skills/dart-fix-runtime-errors/SKILL.md +170 -0
  40. package/skills/dart-generate-test-mocks/SKILL.md +159 -0
  41. package/skills/dart-migrate-to-checks-package/SKILL.md +532 -0
  42. package/skills/dart-resolve-package-conflicts/SKILL.md +120 -0
  43. package/skills/dart-run-static-analysis/SKILL.md +108 -0
  44. package/skills/dart-use-pattern-matching/SKILL.md +240 -0
  45. package/skills/dart-use-pattern-matching/examples/json_patterns.dart +85 -0
  46. package/skills/detect-mobile-stack/SKILL.md +33 -0
  47. package/skills/effective-dart/SKILL.md +187 -0
  48. package/skills/firebase-ai/SKILL.md +93 -0
  49. package/skills/firebase-analytics/SKILL.md +129 -0
  50. package/skills/firebase-app-check/SKILL.md +124 -0
  51. package/skills/firebase-auth/SKILL.md +224 -0
  52. package/skills/firebase-cloud-firestore/SKILL.md +165 -0
  53. package/skills/firebase-cloud-functions/SKILL.md +148 -0
  54. package/skills/firebase-crashlytics/SKILL.md +182 -0
  55. package/skills/firebase-data-connect/SKILL.md +80 -0
  56. package/skills/firebase-database/SKILL.md +224 -0
  57. package/skills/firebase-in-app-messaging/SKILL.md +111 -0
  58. package/skills/firebase-messaging/SKILL.md +201 -0
  59. package/skills/firebase-remote-config/SKILL.md +131 -0
  60. package/skills/firebase-storage/SKILL.md +158 -0
  61. package/skills/flutter-add-integration-test/SKILL.md +167 -0
  62. package/skills/flutter-add-widget-preview/SKILL.md +149 -0
  63. package/skills/flutter-add-widget-test/SKILL.md +158 -0
  64. package/skills/flutter-adding-home-screen-widgets/SKILL.md +205 -0
  65. package/skills/flutter-animating-apps/SKILL.md +185 -0
  66. package/skills/flutter-app-architecture/SKILL.md +80 -0
  67. package/skills/flutter-apply-architecture-best-practices/SKILL.md +166 -0
  68. package/skills/flutter-build-responsive-layout/SKILL.md +143 -0
  69. package/skills/flutter-building-forms/SKILL.md +125 -0
  70. package/skills/flutter-building-layouts/SKILL.md +131 -0
  71. package/skills/flutter-building-plugins/SKILL.md +209 -0
  72. package/skills/flutter-caching-data/SKILL.md +171 -0
  73. package/skills/flutter-change-notifier/SKILL.md +138 -0
  74. package/skills/flutter-embedding-native-views/SKILL.md +200 -0
  75. package/skills/flutter-errors/SKILL.md +126 -0
  76. package/skills/flutter-fix-layout-issues/SKILL.md +134 -0
  77. package/skills/flutter-handling-concurrency/SKILL.md +182 -0
  78. package/skills/flutter-implement-json-serialization/SKILL.md +157 -0
  79. package/skills/flutter-improving-accessibility/SKILL.md +113 -0
  80. package/skills/flutter-interoperating-with-native-apis/SKILL.md +130 -0
  81. package/skills/flutter-login-usecase/SKILL.md +38 -0
  82. package/skills/flutter-managing-state/SKILL.md +206 -0
  83. package/skills/flutter-project-audit/SKILL.md +66 -0
  84. package/skills/flutter-reducing-app-size/SKILL.md +103 -0
  85. package/skills/flutter-secure-token-store/SKILL.md +35 -0
  86. package/skills/flutter-setting-up-on-macos/SKILL.md +78 -0
  87. package/skills/flutter-setup-declarative-routing/SKILL.md +259 -0
  88. package/skills/flutter-setup-localization/SKILL.md +214 -0
  89. package/skills/flutter-theming-apps/SKILL.md +163 -0
  90. package/skills/flutter-use-http-package/SKILL.md +178 -0
  91. package/skills/flutter-widget-review/SKILL.md +54 -0
  92. package/skills/flutter-working-with-databases/SKILL.md +203 -0
  93. package/skills/flutterfire-configure/SKILL.md +143 -0
  94. package/skills/mobile-security-audit/SKILL.md +101 -0
  95. package/skills/mockito/SKILL.md +149 -0
  96. package/skills/mocktail/SKILL.md +122 -0
  97. package/skills/patrol-e2e-testing/SKILL.md +224 -0
  98. package/skills/provider/SKILL.md +139 -0
  99. package/skills/riverpod/SKILL.md +246 -0
  100. package/skills/testing/SKILL.md +50 -0
  101. package/stacks/android/stack.json +8 -0
  102. package/stacks/flutter/stack.json +8 -0
  103. package/stacks/ios/stack.json +8 -0
  104. package/stacks/kotlin-multiplatform/stack.json +8 -0
  105. package/stacks/react-native/stack.json +8 -0
package/README.md ADDED
@@ -0,0 +1,631 @@
1
+ # 📱 reis-mobile
2
+
3
+ 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 or React Native.
4
+
5
+ **AI agents for mobile engineering.** A Claude Code plugin with agents, skills and workflows specialized in mobile development.
6
+
7
+ <p align="center">
8
+ <a href="https://github.com/wrsilva/reis-mobile/actions/workflows/ci.yml"><img src="https://github.com/wrsilva/reis-mobile/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
9
+ <img src="https://img.shields.io/badge/Version-0.3.5-blue" alt="Version 0.3.5">
10
+ <img src="https://img.shields.io/badge/Claude_Code-plugin-blueviolet" alt="Claude Code plugin">
11
+ <img src="https://img.shields.io/badge/Node.js-22+-339933?logo=node.js&logoColor=white" alt="Node.js 22+">
12
+ <img src="https://img.shields.io/badge/Dependencies-0-brightgreen" alt="Zero dependencies">
13
+ <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow" alt="MIT License"></a>
14
+ </p>
15
+
16
+ <p align="center">
17
+ <img src="https://img.shields.io/badge/Flutter-02569B?logo=flutter&logoColor=white" alt="Flutter">
18
+ <img src="https://img.shields.io/badge/Android-3DDC84?logo=android&logoColor=white" alt="Android">
19
+ <img src="https://img.shields.io/badge/iOS-000000?logo=apple&logoColor=white" alt="iOS">
20
+ <img src="https://img.shields.io/badge/React_Native-20232A?logo=react&logoColor=61DAFB" alt="React Native">
21
+ <img src="https://img.shields.io/badge/Kotlin_Multiplatform-7F52FF?logo=kotlin&logoColor=white" alt="Kotlin Multiplatform">
22
+ </p>
23
+
24
+ 🔎 **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.
25
+
26
+ 👥 **7 agents and 67 mobile skills.** Flutter architect, performance and test engineers, Flutter/Android/iOS staff engineer, native plugin specialist, code reviewer and a lead that coordinates them all, plus skills for BLoC, Riverpod, Firebase, testing, layout, plugins and security.
27
+
28
+ 🌐 **Answers in English or Portuguese.** `reis-mobile init pt` or `reis-mobile init en` sets the language of reports, explanations and debates.
29
+
30
+ 🧭 **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.
31
+
32
+ 🛡️ **Real mobile security.** Checklist based on OWASP MASVS, with concrete per-stack checks: `flutter_secure_storage`, `network_security_config`, ATS, Keychain and `AsyncStorage`.
33
+
34
+ 🩺 **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.
35
+
36
+ 🔒 **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.
37
+
38
+ 🪶 **No dependencies.** `npx reis-mobile init`, zero npm dependencies, no hooks, no external provider.
39
+
40
+ ---
41
+
42
+ ## What's new
43
+
44
+ > 🆕 **v0.3.0: the specialists debate.** On an architecture decision, a single specialist gives you the answer of their specialty. `/reis-mobile:debate` puts three of them to defend incompatible positions on the same question — and `lead-mobile` decides, instead of listing pros and cons.
45
+ >
46
+ > ```bash
47
+ > /reis-mobile:debate Riverpod or BLoC for this app's state?
48
+ > /reis-mobile:debate --rounds 3 offline-first with Firestore or a local cache?
49
+ > ```
50
+ >
51
+ > Round 1 is blind, so nobody anchors the others. Participants do not vary only in role: they vary in model, because three instances of the same model agree for the same wrong reasons.
52
+
53
+ | Version | Highlights |
54
+ |--------|-----------|
55
+ | **v0.3.5** (current) | Installs through npm (`npx reis-mobile init`) and the Claude Code and Codex plugins. Homebrew and the curl/PowerShell installers are discontinued. |
56
+ | **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. |
57
+ | **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. |
58
+ | **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. |
59
+ | **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. |
60
+ | **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. |
61
+ | **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. |
62
+
63
+ [Full changelog →](CHANGELOG.md)
64
+
65
+ ## Installation
66
+
67
+ reis-mobile ships through three channels:
68
+
69
+ | Channel | What you get |
70
+ |---|---|
71
+ | **Claude Code plugin** | Everything: 7 agents, 67 skills and the `/reis-mobile:*` commands |
72
+ | **Codex plugin** | The skills, plus the CLI if you install it from npm |
73
+ | **npm** | The `reis-mobile` CLI: `init`, `doctor`, `route`, `review`, `lang`, and the router the commands rely on |
74
+
75
+ Requirements: **Node.js 22+**. For the plugins, **[Claude Code](https://claude.com/claude-code)** or the **Codex CLI**.
76
+
77
+ ### Claude Code (recommended)
78
+
79
+ ```bash
80
+ npx reis-mobile init pt # registers the plugin and answers in Portuguese; use "en" for English
81
+ ```
82
+
83
+ Or install the CLI globally and keep it around for `doctor`, `route` and `review`:
84
+
85
+ ```bash
86
+ npm install -g reis-mobile
87
+ reis-mobile init pt
88
+ ```
89
+
90
+ Without Node.js tooling, add the plugin straight from GitHub:
91
+
92
+ ```bash
93
+ claude plugin marketplace add https://github.com/wrsilva/reis-mobile.git
94
+ claude plugin install reis-mobile@reis-mobile
95
+ ```
96
+
97
+ Restart Claude Code and run, in your app folder:
98
+
99
+ ```text
100
+ /reis-mobile
101
+ /reis-mobile:doctor
102
+ /reis-mobile:review
103
+ ```
104
+
105
+ ### Codex
106
+
107
+ With the Codex CLI installed and supporting `codex plugin`:
108
+
109
+ ```bash
110
+ codex plugin marketplace add https://github.com/wrsilva/reis-mobile.git
111
+ codex plugin add reis-mobile@reis-mobile
112
+ ```
113
+
114
+ The first command registers the marketplace with GitHub as its source; the second installs the plugin into the Codex cache. Check it with `codex plugin list --json`: look for `reis-mobile@reis-mobile` with `installed: true` and `enabled: true`.
115
+
116
+ Restart Codex and open a conversation in your mobile app folder. In the CLI or the IDE extension, type `$` in the message field to search for skills, or use `/skills`. See the [official Codex skills documentation](https://learn.chatgpt.com/docs/build-skills#how-chatgpt-and-codex-use-skills).
117
+
118
+ The 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, install the CLI from npm and run it in the app folder:
119
+
120
+ ```bash
121
+ npm install -g reis-mobile
122
+ reis-mobile doctor
123
+ reis-mobile route "review architecture" --json
124
+ reis-mobile review --json
125
+ ```
126
+
127
+ 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.
128
+
129
+ ### Language
130
+
131
+ Agents, skills and commands are written in English, and that does not change. What you choose is the language reis-mobile **answers** in: `/reis-mobile:review` reports, `/reis-mobile:doctor` explanations, and debate rounds and syntheses.
132
+
133
+ ```bash
134
+ reis-mobile init pt # install the plugin and answer in Brazilian Portuguese
135
+ reis-mobile init en # install the plugin and answer in English (also: eng)
136
+ reis-mobile lang pt # change the language later, without reinstalling
137
+ reis-mobile lang # show the current language
138
+ ```
139
+
140
+ The choice is saved to `~/.config/reis-mobile/config.json` (`%APPDATA%\reis-mobile\config.json` on Windows), so it survives `claude plugin update`. Precedence is `--lang` on a single run, then the `REIS_MOBILE_LANG` environment variable, then the saved file. 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.
141
+
142
+ <details>
143
+ <summary>Uninstall</summary>
144
+
145
+ ```bash
146
+ reis-mobile init --uninstall # Claude Code plugin, its marketplace and the saved language
147
+ npm uninstall -g reis-mobile # CLI
148
+
149
+ codex plugin remove reis-mobile@reis-mobile
150
+ codex plugin marketplace remove reis-mobile
151
+ ```
152
+ </details>
153
+
154
+ <details>
155
+ <summary>Installed with Homebrew or the curl/PowerShell installer?</summary>
156
+
157
+ Those channels were discontinued after v0.3.4. Remove them and install from npm:
158
+
159
+ ```bash
160
+ # Homebrew
161
+ brew uninstall reis-mobile && brew untap wrsilva/tap
162
+
163
+ # curl installer (macOS/Linux)
164
+ rm -rf ~/.local/share/reis-mobile ~/.local/bin/reis-mobile
165
+ ```
166
+
167
+ ```powershell
168
+ # PowerShell installer (Windows)
169
+ Remove-Item -Recurse -Force "$env:LOCALAPPDATA\reis-mobile"
170
+ Remove-Item -Force "$HOME\.local\bin\reis-mobile.cmd"
171
+ ```
172
+ </details>
173
+
174
+ <details>
175
+ <summary>Development from the clone</summary>
176
+
177
+ ```bash
178
+ git clone https://github.com/wrsilva/reis-mobile.git
179
+ cd reis-mobile
180
+ npm link # CLI pointing at the clone
181
+ reis-mobile init --local # plugin pointing at the clone
182
+ npm run check # validates and runs the tests
183
+ ```
184
+
185
+ After editing agents, skills or commands, restart the Claude Code session.
186
+ </details>
187
+
188
+ ---
189
+
190
+ ## Updating
191
+
192
+ To see what changed, check the [CHANGELOG](CHANGELOG.md) or the [releases](https://github.com/wrsilva/reis-mobile/releases).
193
+
194
+ ```bash
195
+ # Claude Code plugin
196
+ claude plugin marketplace update reis-mobile
197
+ claude plugin update reis-mobile@reis-mobile
198
+
199
+ # Codex plugin
200
+ codex plugin marketplace upgrade reis-mobile
201
+
202
+ # CLI
203
+ npm update -g reis-mobile
204
+ ```
205
+
206
+ Then **restart Claude Code or Codex**. The plugin update only happens when a new version is out; if you are already on the latest, Claude Code answers `already at the latest version`.
207
+
208
+ Check that the CLI and the plugin match:
209
+
210
+ ```bash
211
+ reis-mobile --version
212
+ claude plugin list | grep -A1 reis-mobile
213
+ ```
214
+
215
+ > **Installed v0.3.2 or v0.3.3?** Those versions renamed the plugin and the CLI to `mobile`; v0.3.4 goes back to `reis-mobile`. Run `reis-mobile init`: it installs `reis-mobile@reis-mobile` and removes `mobile@reis-mobile`. In Codex: `codex plugin add reis-mobile@reis-mobile` and `codex plugin remove mobile@reis-mobile`.
216
+
217
+ <details>
218
+ <summary>Update troubleshooting</summary>
219
+
220
+ | Symptom | Solution |
221
+ |---------|---------|
222
+ | `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` |
223
+ | New agents or skills do not show up | Restart Claude Code: plugins only reload in a new session |
224
+ | `reis-mobile --version` is still old after `npm update -g` | Another `reis-mobile` comes first on the `PATH`, often from Homebrew or the old installers; check with `which -a reis-mobile` (`where.exe reis-mobile` on Windows) |
225
+ | Plugin broken after updating | Reinstall: `reis-mobile init --uninstall` and then `reis-mobile init` |
226
+
227
+ </details>
228
+
229
+ ---
230
+
231
+ ## Commands
232
+
233
+ ```bash
234
+ /reis-mobile # Lists the commands (entry point; also accepts doctor, review or a free-form request)
235
+ /reis-mobile my android build fails on gradle # Free-form request: detects the stack and applies the right agent and skills
236
+ /reis-mobile:doctor # Environment and project: SDKs, Xcode, CocoaPods, Gradle wrapper, lock files
237
+ /reis-mobile:doctor --all # Checks every tool, not only those for the detected stack
238
+ /reis-mobile:review # Reviews uncommitted changes (or the whole project, if there are none)
239
+ /reis-mobile:review --base main # Reviews the current branch against main, pull request style
240
+ /reis-mobile:review --base main focus on security # Free-form focus, in English or Portuguese
241
+ /reis-mobile:debate Riverpod or BLoC in this app? # Debate between the specialists, with a decision by lead-mobile
242
+ /reis-mobile:debate --rounds 3 --external ... # More rounds; --external adds Codex and Gemini, if installed
243
+ ```
244
+
245
+ ### Debate
246
+
247
+ `/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/`.
248
+
249
+ 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.
250
+
251
+ 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.
252
+
253
+ 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.
254
+
255
+ Not sure what the router will pick? Ask the CLI:
256
+
257
+ ```text
258
+ $ reis-mobile route "Execution failed for task ':app:compileDebugKotlin'"
259
+ Intent debug (confidence 0.5) · area gradle
260
+ Stack flutter · focus android
261
+ Agent mobile-staff-engineer
262
+ Skills dart-fix-runtime-errors, dart-resolve-package-conflicts, flutter-errors, flutter-fix-layout-issues
263
+
264
+ $ reis-mobile route "write tests for the login cubit"
265
+ Intent test (confidence 1)
266
+ Stack flutter
267
+ Agent flutter-test-engineer
268
+ Skills dart-add-unit-test, dart-collect-coverage, dart-generate-test-mocks, flutter-add-integration-test, flutter-add-widget-test, mockito, mocktail, patrol-e2e-testing, testing
269
+ ```
270
+
271
+ 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"*.
272
+
273
+ ---
274
+
275
+ ## Choose by goal
276
+
277
+ | I want to... | Use | Status |
278
+ |----------|-----|--------|
279
+ | Know if my environment is ready to build | `/reis-mobile:doctor` | ✅ |
280
+ | Review a PR or my changes | `/reis-mobile:review` | ✅ |
281
+ | Audit an entire Flutter project | `/reis-mobile:review` with no pending changes | ✅ |
282
+ | Find out a project's stack | `reis-mobile detect` | ✅ |
283
+ | Review the architecture of a Flutter app | agent `flutter-architect` | ✅ |
284
+ | Find the cause of jank, rebuilds or leaks | agent `flutter-performance-engineer` | ✅ |
285
+ | Write or audit Flutter tests | agent `flutter-test-engineer` | ✅ |
286
+ | Debug a Gradle, Xcode or CocoaPods build | agent `mobile-staff-engineer` | ✅ |
287
+ | Build a plugin or debug MethodChannel/EventChannel | agent `plugin-native-expert` | ✅ |
288
+ | Full audit with several specialists | agent `lead-mobile` | ✅ |
289
+ | Decide between two architectures with a real trade-off | `/reis-mobile:debate` | ✅ |
290
+ | Dedicated debug command | `/reis-mobile:debug` | 🔜 v0.4 |
291
+ | Dedicated test command (including XCTest and Espresso) | `/reis-mobile:test` | 🔜 v0.4 |
292
+ | Check whether the app is ready for the store | `/reis-mobile:release` | 🔜 v0.5 |
293
+ | Consolidated decision by consensus between agents | `/reis-mobile:council` | 🔜 v0.8 |
294
+
295
+ <details>
296
+ <summary><strong>How is it different from plain Claude Code?</strong></summary>
297
+
298
+ | | Plain Claude Code | reis-mobile |
299
+ |---|---|---|
300
+ | **Domain** | Generic | Flutter, Android, iOS, React Native, KMP |
301
+ | **Project context** | You explain the stack | Deterministic detection of stack, platform and variant |
302
+ | **Review** | Generic | Mobile checklists: lifecycle, `BuildContext`, MASVS, manifest, ATS |
303
+ | **Secrets in the diff** | Sent as they are | Masked before reaching the model |
304
+ | **Specialists** | None | 7 agents and 67 mobile skills |
305
+ | **Context cost** | Zero | ~4,800 fixed tokens (agent and skill descriptions), no hooks |
306
+ | **Best for** | General tasks | Teams and developers working on mobile apps |
307
+
308
+ **In short:** Claude Code already knows how to code. reis-mobile makes it look at what matters in a mobile app.
309
+
310
+ </details>
311
+
312
+ ---
313
+
314
+ ## How it works
315
+
316
+ ```text
317
+ /reis-mobile:review
318
+ │
319
+ ├─ detect stack ──────── pubspec.yaml → flutter (android, ios)
320
+ ├─ detect intent ─────── review
321
+ ├─ select agent ──────── mobile-code-reviewer
322
+ ├─ select skills ─────── code-review · effective-dart · flutter-project-audit · flutter-widget-review · mobile-security-audit …
323
+ ├─ collect context ───── git diff (lock files out, secrets masked)
324
+ └─ review report ─────── Summary · Critical · Bugs · Architecture · Security · Performance · Maintainability
325
+ ```
326
+
327
+ The Node.js core decides **what** to load. The model decides **how** to review, following the loaded instructions. Details in [ARCHITECTURE.md](ARCHITECTURE.md).
328
+
329
+ ### Stack detection
330
+
331
+ | Stack | Evidence |
332
+ |-------|-----------|
333
+ | Flutter | `pubspec.yaml` with `sdk: flutter` (`plugin` variant when applicable) |
334
+ | React Native | `package.json` depending on `react-native` (`expo` variant) |
335
+ | Kotlin Multiplatform | `build.gradle.kts` with the multiplatform plugin |
336
+ | Android | Gradle at the root + `AndroidManifest.xml` or a `com.android.*` plugin |
337
+ | iOS | `*.xcodeproj`, `*.xcworkspace`, `Podfile` or `Package.swift` with `.iOS` |
338
+
339
+ ### Agents
340
+
341
+ | Agent | Stack | Triggered for | What it does |
342
+ |-------|-------|---------------|-----------|
343
+ | `mobile-code-reviewer` | all | review | Review with `file:line` evidence, focused on what breaks in production |
344
+ | `flutter-architect` | Flutter | architecture | Layers, feature-first, coupling, misplaced logic, refactoring plan |
345
+ | `flutter-performance-engineer` | Flutter | performance | Rebuilds, jank, lists, leaks, paint, startup, with a score and top 3 fixes |
346
+ | `flutter-test-engineer` | Flutter | test | Unit, BLoC/Cubit, widget and integration, coverage audit and fragile tests |
347
+ | `mobile-staff-engineer` | all | debug, architecture, performance, test, security, release, migration, dependency, build, deployment, accessibility | Senior Flutter/Android/iOS specialist for whatever no specific agent covers |
348
+ | `plugin-native-expert` | Flutter | on demand | MethodChannel, EventChannel, Pigeon and Kotlin/Swift bridges, threading and lifecycle |
349
+ | `lead-mobile` | all | on demand | Coordinates the other agents and consolidates a single action plan |
350
+
351
+ 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 native Android app, it goes to `mobile-staff-engineer`.
352
+
353
+ ### Skills
354
+
355
+ **Auto-routed** skills are loaded by the router together with the agent. The others (—) are triggered by Claude Code when the request matches the description, for example *"add push notifications with FCM"* → `firebase-messaging`.
356
+
357
+ <details>
358
+ <summary><strong>Review and quality</strong> (7)</summary>
359
+
360
+ | Skill | What it does | Auto-routed for | Stack | Origin |
361
+ |---|---|---|---|---|
362
+ | `code-review` | Performs thorough code reviews for Flutter/Dart pull requests and merge requests. | review | Flutter | evanca/flutter-ai-rules |
363
+ | `effective-dart` | Applies Effective Dart guidelines in Flutter/Dart code. | review | Flutter | evanca/flutter-ai-rules |
364
+ | `dart-run-static-analysis` | Execute `dart analyze` to identify warnings and errors, and use `dart fix --apply` to automatically resolve… | review | Flutter | dart-lang/skills |
365
+ | `flutter-project-audit` | Audits the health of a Flutter project as a whole — pubspec constraints and lock file, analysis_options and lints,… | review, architecture, dependency | Flutter | reis-mobile |
366
+ | `flutter-widget-review` | Reviews Flutter widget code for lifecycle bugs, BuildContext misuse across async gaps, missing dispose, side effects… | review, performance | Flutter | reis-mobile |
367
+ | `dart-3-updates` | Applies Dart 3 language features in Flutter/Dart code. | migration | Flutter | evanca/flutter-ai-rules |
368
+ | `dart-use-pattern-matching` | Applies Dart 3 pattern matching, switch expressions, and destructuring idiomatically to validate data schemas,… | — | Flutter | dart-lang/skills |
369
+
370
+ </details>
371
+
372
+ <details>
373
+ <summary><strong>Architecture and state</strong> (9)</summary>
374
+
375
+ | Skill | What it does | Auto-routed for | Stack | Origin |
376
+ |---|---|---|---|---|
377
+ | `architecture-feature-first` | Structures Flutter apps using layered architecture (UI / Logic / Data) with feature-first file organization. | architecture | Flutter | evanca/flutter-ai-rules |
378
+ | `flutter-app-architecture` | Provides best practices for Flutter app architecture, including layered architecture, data flow, state management… | architecture | Flutter | evanca/flutter-ai-rules |
379
+ | `flutter-apply-architecture-best-practices` | Architects a Flutter application using the recommended layered approach (UI, Logic, Data). | architecture | Flutter | flutter/skills |
380
+ | `flutter-managing-state` | Manages application and ephemeral state in a Flutter app. | architecture | Flutter | flutter/skills |
381
+ | `bloc` | Implements Flutter state management using the bloc library (Bloc and Cubit). | — | Flutter | evanca/flutter-ai-rules |
382
+ | `riverpod` | Uses Riverpod for state management in Flutter/Dart. | — | Flutter | evanca/flutter-ai-rules |
383
+ | `provider` | Uses the Provider package for dependency injection and state management in Flutter. | — | Flutter | evanca/flutter-ai-rules |
384
+ | `flutter-change-notifier` | Implements state management with ChangeNotifier and Provider in Flutter. | — | Flutter | evanca/flutter-ai-rules |
385
+ | `flutter-login-usecase` | Implements a Flutter login use case that authenticates through an injected repository and persists the access token… | — | Flutter | reis-mobile |
386
+
387
+ </details>
388
+
389
+ <details>
390
+ <summary><strong>Testing</strong> (10)</summary>
391
+
392
+ | Skill | What it does | Auto-routed for | Stack | Origin |
393
+ |---|---|---|---|---|
394
+ | `testing` | Writes and reviews Flutter/Dart tests. | test | Flutter | evanca/flutter-ai-rules |
395
+ | `dart-add-unit-test` | Write and organize unit tests for functions, methods, and classes using `package:test`. | test | Flutter | dart-lang/skills |
396
+ | `flutter-add-widget-test` | Implement a component-level test using `WidgetTester` to verify UI rendering and user interactions (tapping,… | test | Flutter | flutter/skills |
397
+ | `flutter-add-integration-test` | Configures Flutter Driver for app interaction and converts MCP actions into permanent integration tests. | test | Flutter | flutter/skills |
398
+ | `patrol-e2e-testing` | Generates and maintains end-to-end tests for Flutter apps using Patrol. | test | Flutter | evanca/flutter-ai-rules |
399
+ | `mocktail` | Uses the Mocktail package for mocking in Flutter/Dart tests. | test | Flutter | evanca/flutter-ai-rules |
400
+ | `mockito` | Uses the Mockito package for mocking in Flutter/Dart tests. | test | Flutter | evanca/flutter-ai-rules |
401
+ | `dart-generate-test-mocks` | Define and generate mock objects for external dependencies using `package:mockito` and `build_runner`. | test | Flutter | dart-lang/skills |
402
+ | `dart-collect-coverage` | Collect coverage using the coverage packge and create an LCOV report | test | Flutter | dart-lang/skills |
403
+ | `dart-migrate-to-checks-package` | Replace the usage of `expect` and similar functions from `package:matcher` to `package:checks` equivalents. | migration | Flutter | dart-lang/skills |
404
+
405
+ </details>
406
+
407
+ <details>
408
+ <summary><strong>Debug</strong> (4)</summary>
409
+
410
+ | Skill | What it does | Auto-routed for | Stack | Origin |
411
+ |---|---|---|---|---|
412
+ | `flutter-errors` | Diagnoses and fixes common Flutter errors. | debug | Flutter | evanca/flutter-ai-rules |
413
+ | `flutter-fix-layout-issues` | Fixes Flutter layout errors (overflows, unbounded constraints) using Dart and Flutter MCP tools. | debug | Flutter | flutter/skills |
414
+ | `dart-fix-runtime-errors` | Uses get_runtime_errors and lsp to fetch an active stack trace, locate the failing line, apply a fix, and verify… | debug | Flutter | dart-lang/skills |
415
+ | `dart-resolve-package-conflicts` | Workflow for fixing package version conflicts. | debug, dependency | Flutter | dart-lang/skills |
416
+
417
+ </details>
418
+
419
+ <details>
420
+ <summary><strong>Performance</strong> (3)</summary>
421
+
422
+ | Skill | What it does | Auto-routed for | Stack | Origin |
423
+ |---|---|---|---|---|
424
+ | `flutter-reducing-app-size` | Measures and optimizes the size of Flutter application bundles for deployment. | performance | Flutter | flutter/skills |
425
+ | `flutter-handling-concurrency` | Executes long-running tasks in background isolates to keep the UI responsive. | performance | Flutter | flutter/skills |
426
+ | `flutter-caching-data` | Implements caching strategies for Flutter apps to improve performance and offline support. | — | Flutter | flutter/skills |
427
+
428
+ </details>
429
+
430
+ <details>
431
+ <summary><strong>UI, layout and navigation</strong> (8)</summary>
432
+
433
+ | Skill | What it does | Auto-routed for | Stack | Origin |
434
+ |---|---|---|---|---|
435
+ | `flutter-building-layouts` | Builds Flutter layouts using the constraint system and layout widgets. | — | Flutter | flutter/skills |
436
+ | `flutter-build-responsive-layout` | Use `LayoutBuilder`, `MediaQuery`, or `Expanded/Flexible` to create a layout that adapts to different screen sizes. | — | Flutter | flutter/skills |
437
+ | `flutter-building-forms` | Builds Flutter forms with validation and user input handling. | — | Flutter | flutter/skills |
438
+ | `flutter-animating-apps` | Implements animated effects, transitions, and motion in a Flutter app. | — | Flutter | flutter/skills |
439
+ | `flutter-theming-apps` | Customizes the visual appearance of a Flutter app using the theming system. | — | Flutter | flutter/skills |
440
+ | `flutter-add-widget-preview` | Adds interactive widget previews to the project using the previews.dart system. | — | Flutter | flutter/skills |
441
+ | `flutter-setup-declarative-routing` | Configure `MaterialApp.router` using a package like `go_router` for advanced URL-based navigation. | — | Flutter | flutter/skills |
442
+ | `flutter-adding-home-screen-widgets` | Adds home screen widgets to a Flutter app for Android and iOS. | — | Flutter | flutter/skills |
443
+
444
+ </details>
445
+
446
+ <details>
447
+ <summary><strong>Data and networking</strong> (3)</summary>
448
+
449
+ | Skill | What it does | Auto-routed for | Stack | Origin |
450
+ |---|---|---|---|---|
451
+ | `flutter-use-http-package` | Use the `http` package to execute GET, POST, PUT, or DELETE requests. | — | Flutter | flutter/skills |
452
+ | `flutter-implement-json-serialization` | Create model classes with `fromJson` and `toJson` methods using `dart:convert`. | — | Flutter | flutter/skills |
453
+ | `flutter-working-with-databases` | Manages local data persistence using SQLite or other database solutions. | — | Flutter | flutter/skills |
454
+
455
+ </details>
456
+
457
+ <details>
458
+ <summary><strong>Native and plugins</strong> (3)</summary>
459
+
460
+ | Skill | What it does | Auto-routed for | Stack | Origin |
461
+ |---|---|---|---|---|
462
+ | `flutter-building-plugins` | Builds Flutter plugins that provide native interop for other apps to use. | — | Flutter | flutter/skills |
463
+ | `flutter-interoperating-with-native-apis` | Interoperates with native platform APIs on Android, iOS, and the web. | — | Flutter | flutter/skills |
464
+ | `flutter-embedding-native-views` | Embeds native Android, iOS, or macOS views into a Flutter app. | — | Flutter | flutter/skills |
465
+
466
+ </details>
467
+
468
+ <details>
469
+ <summary><strong>Security</strong> (3)</summary>
470
+
471
+ | Skill | What it does | Auto-routed for | Stack | Origin |
472
+ |---|---|---|---|---|
473
+ | `mobile-security-audit` | Security audit for mobile apps based on the OWASP MASVS categories — insecure token storage, hardcoded secrets,… | review, security, release | all | reis-mobile |
474
+ | `flutter-secure-token-store` | Stores JWT access tokens on Flutter with platform secure storage (Keychain on iOS, Keystore-backed storage on… | security | Flutter | reis-mobile |
475
+ | `firebase-app-check` | Integrates Firebase App Check into Flutter apps. | security | Flutter | evanca/flutter-ai-rules |
476
+
477
+ </details>
478
+
479
+ <details>
480
+ <summary><strong>Accessibility and internationalization</strong> (2)</summary>
481
+
482
+ | Skill | What it does | Auto-routed for | Stack | Origin |
483
+ |---|---|---|---|---|
484
+ | `flutter-improving-accessibility` | Configures a Flutter app to support assistive technologies like Screen Readers. | accessibility | Flutter | flutter/skills |
485
+ | `flutter-setup-localization` | Add `flutter_localizations` and `intl` dependencies, enable "generate true" in `pubspec.yaml`, and create an… | — | Flutter | flutter/skills |
486
+
487
+ </details>
488
+
489
+ <details>
490
+ <summary><strong>Firebase</strong> (13)</summary>
491
+
492
+ | Skill | What it does | Auto-routed for | Stack | Origin |
493
+ |---|---|---|---|---|
494
+ | `flutterfire-configure` | Sets up Firebase for Flutter apps using FlutterFire CLI. | — | Flutter | evanca/flutter-ai-rules |
495
+ | `firebase-auth` | Integrates Firebase Authentication into Flutter apps. | — | Flutter | evanca/flutter-ai-rules |
496
+ | `firebase-cloud-firestore` | Integrates Cloud Firestore into Flutter apps. | — | Flutter | evanca/flutter-ai-rules |
497
+ | `firebase-database` | Integrates Firebase Realtime Database into Flutter apps. | — | Flutter | evanca/flutter-ai-rules |
498
+ | `firebase-storage` | Integrates Firebase Cloud Storage into Flutter apps. | — | Flutter | evanca/flutter-ai-rules |
499
+ | `firebase-cloud-functions` | Calls Firebase Cloud Functions from Flutter apps. | — | Flutter | evanca/flutter-ai-rules |
500
+ | `firebase-messaging` | Integrates Firebase Cloud Messaging (FCM) into Flutter apps. | — | Flutter | evanca/flutter-ai-rules |
501
+ | `firebase-in-app-messaging` | Integrates Firebase In-App Messaging into Flutter apps. | — | Flutter | evanca/flutter-ai-rules |
502
+ | `firebase-remote-config` | Integrates Firebase Remote Config into Flutter apps. | — | Flutter | evanca/flutter-ai-rules |
503
+ | `firebase-analytics` | Integrates Firebase Analytics into Flutter apps. | — | Flutter | evanca/flutter-ai-rules |
504
+ | `firebase-crashlytics` | Integrates Firebase Crashlytics into Flutter apps. | — | Flutter | evanca/flutter-ai-rules |
505
+ | `firebase-ai` | Integrates Firebase AI Logic into Flutter apps. | — | Flutter | evanca/flutter-ai-rules |
506
+ | `firebase-data-connect` | Integrates Firebase Data Connect into Flutter apps. | — | Flutter | evanca/flutter-ai-rules |
507
+
508
+ </details>
509
+
510
+ <details>
511
+ <summary><strong>Environment</strong> (2)</summary>
512
+
513
+ | Skill | What it does | Auto-routed for | Stack | Origin |
514
+ |---|---|---|---|---|
515
+ | `flutter-setting-up-on-macos` | Sets up a macOS environment for Flutter development. | — | Flutter | flutter/skills |
516
+ | `detect-mobile-stack` | Detects the mobile stack of the current project (Flutter, Android, iOS, React Native, Kotlin Multiplatform), its… | — | all | reis-mobile |
517
+
518
+ </details>
519
+
520
+ Third-party skills keep their original name and license. See [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
521
+
522
+ ---
523
+
524
+ ## Trust, security and limits
525
+
526
+ **Read-only.** `doctor`, `detect`, `route` and `review` do not modify your project. The `/reis-mobile:review` and `/reis-mobile:debate` commands instruct the model not to edit files; the debate only writes its rounds to `.reis-mobile/debates/`, outside your code.
527
+
528
+ **Secrets masked.** The diff goes through [`core/security/redact.mjs`](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](SECURITY.md).
529
+
530
+ **No telemetry.** `detect`, `doctor`, `route` and `review` make no network calls. Only installation touches the network, to download the package and register the plugin. The AI analysis uses the model of the session you are working in, such as Claude Code or Codex.
531
+
532
+ **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, nothing leaves 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`.
533
+
534
+ **Context cost.** The descriptions of the 7 agents and 67 skills add up to about 4,800 fixed tokens per session (measured with `claude plugin details reis-mobile`). The full content of each skill is only loaded when it is used.
535
+
536
+ **No hooks.** The plugin does not attach to Claude Code events. It only acts when you call a command or when a skill is relevant.
537
+
538
+ **Own namespace.** Commands live under `/reis-mobile:*` and do not conflict with the built-in `/review` or `/security-review`.
539
+
540
+ **Clean uninstall.** `reis-mobile init --uninstall` removes the plugin, its marketplace and the saved language without leaving configuration behind.
541
+
542
+ ---
543
+
544
+ ## Roadmap
545
+
546
+ | Version | Delivery | Status |
547
+ |--------|---------|--------|
548
+ | v0.1.0 | Foundation, stack detection, router, `/reis-mobile:doctor`, `/reis-mobile:review` for Flutter | ✅ |
549
+ | v0.2.0 | 6 agents and 63 Flutter, Dart and Firebase skills | ✅ |
550
+ | v0.2.1 | `/reis-mobile` entry command | ✅ |
551
+ | 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 | ✅ |
552
+ | v0.3.1 | Answer language (`reis-mobile init pt\|en`, `reis-mobile lang`) and project content in English | ✅ |
553
+ | v0.3.4 | Back to the `reis-mobile` name after the `mobile` renames of v0.3.2 and v0.3.3 | ✅ |
554
+ | v0.3.5 | Distribution through npm and the Claude Code and Codex plugins only | ✅ |
555
+ | v0.4.0 | Native Android and iOS skills, `.reis-mobile/config.yaml` and `/reis-mobile:debug` (Gradle, Xcode, CocoaPods, Flutter) | ⏳ |
556
+ | v0.5.0 | `/reis-mobile:test` and native tests (XCTest, Espresso) | ⏳ |
557
+ | v0.6.0 | `/reis-mobile:release` with quality gates | ⏳ |
558
+ | v0.7.0 | React Native pack | ⏳ |
559
+ | v0.8.0 | MCP server | ⏳ |
560
+ | v0.9.0 | Multi-provider (OpenAI, Gemini, OpenRouter, Ollama) beyond the debate's `--external` | ⏳ |
561
+ | v1.0.0 | First stable version: Flutter, Android, iOS and React Native | ⏳ |
562
+
563
+ ---
564
+
565
+ ## FAQ
566
+
567
+ **Do I need Flutter, Xcode or the Android SDK installed?**
568
+ Not for the review, which only reads code. `/reis-mobile:doctor` shows what is missing in case you want to build.
569
+
570
+ **My app lives inside a monorepo.**
571
+ Run it from the app folder, or use `--dir apps/mobile` in the CLI. The diff is restricted to that folder.
572
+
573
+ **Does it work with native Android and iOS?**
574
+ Detection, the doctor, the security skill and the `mobile-code-reviewer`, `mobile-staff-engineer` and `lead-mobile` agents already work. Android- and iOS-specific skills arrive in v0.4.0; the 63 imported skills are for Flutter, Dart and Firebase.
575
+
576
+ **I already have skills with the same names in `~/.claude/skills`.**
577
+ 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.
578
+
579
+ **Does it work in Codex?**
580
+ The marketplace and plugin `0.2.1` can be installed straight from GitHub with `codex plugin`. See [installation and usage in Codex](#codex). 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.
581
+
582
+ **Does it work in Cursor?**
583
+ The Cursor integration has not been validated yet. The MCP server remains on the roadmap for v0.8.0.
584
+
585
+ **What does reis-mobile send outside my machine?**
586
+ The CLI sends nothing. What the model reads during `/reis-mobile:review` follows the same rules as any Claude Code session.
587
+
588
+ ---
589
+
590
+ ## Contributing
591
+
592
+ Contributions are welcome, especially Android, iOS and React Native skills.
593
+
594
+ 1. Read [CONTRIBUTING.md](CONTRIBUTING.md), the rules in [AGENTS.md](AGENTS.md) and the [Code of Conduct](CODE_OF_CONDUCT.md).
595
+ 2. Pick a [`good first issue`](https://github.com/wrsilva/reis-mobile/labels/good%20first%20issue) or [propose a skill](https://github.com/wrsilva/reis-mobile/issues/new?template=new_skill_or_agent.yml).
596
+ 3. `git clone https://github.com/<your-username>/reis-mobile.git && cd reis-mobile && npm run check`
597
+ 4. Open a PR showing the output of `reis-mobile route` or `reis-mobile review` on a real project.
598
+
599
+ Questions: [Discussions](https://github.com/wrsilva/reis-mobile/discussions). Where to ask for help: [SUPPORT.md](SUPPORT.md).
600
+
601
+ ---
602
+
603
+ ## Documentation
604
+
605
+ - [Architecture](ARCHITECTURE.md): modules, detection, routing and the agent and skill contract
606
+ - [AGENTS.md](AGENTS.md): rules for whoever (or whichever AI) contributes to the repository
607
+ - [Contributing](CONTRIBUTING.md)
608
+ - [Code of Conduct](CODE_OF_CONDUCT.md)
609
+ - [Support](SUPPORT.md)
610
+ - [Security](SECURITY.md)
611
+ - [Third-Party Notices](THIRD_PARTY_NOTICES.md): origin and license of third-party skills
612
+ - [Changelog](CHANGELOG.md)
613
+
614
+ ---
615
+
616
+ ## Attribution
617
+
618
+ - **[flutter/skills](https://github.com/flutter/skills)** (BSD-3-Clause): 25 Flutter skills.
619
+ - **[dart-lang/skills](https://github.com/dart-lang/skills)** (BSD-3-Clause): 8 Dart skills.
620
+ - **[evanca/flutter-ai-rules](https://github.com/evanca/flutter-ai-rules)** (MIT): 28 Flutter, testing and Firebase skills.
621
+ - **[OWASP MASVS](https://mas.owasp.org/MASVS/)**: categories used in the `mobile-security-audit` skill.
622
+
623
+ ---
624
+
625
+ ## License
626
+
627
+ MIT. See [LICENSE](LICENSE).
628
+
629
+ <p align="center">
630
+ <a href="https://github.com/wrsilva">wrsilva</a> | MIT License | <a href="https://github.com/wrsilva/reis-mobile/issues">Report Issues</a>
631
+ </p>