reis-mobile 0.8.0 → 0.10.0
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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +43 -0
- package/README.md +104 -23
- package/THIRD_PARTY_NOTICES.md +33 -0
- package/agents/mobile-release-engineer.md +2 -0
- package/agents/mobile-staff-engineer.md +17 -3
- package/bin/reis-mobile.mjs +123 -1
- package/commands/consult.md +95 -0
- package/commands/debate.md +15 -11
- package/commands/reis-mobile.md +7 -2
- package/commands/review.md +2 -0
- package/core/config/project.mjs +1 -1
- package/core/diagnostics/doctor.mjs +23 -1
- package/core/providers/catalog.mjs +168 -0
- package/core/providers/consult.mjs +220 -0
- package/core/providers/providers.mjs +156 -0
- package/core/router/intent-detector.mjs +3 -2
- package/core/router/intents.mjs +51 -2
- package/package.json +1 -1
- package/skills/mobile-analytics/SKILL.md +55 -0
- package/skills/mobile-analytics/references/android.md +9 -0
- package/skills/mobile-analytics/references/flutter.md +10 -0
- package/skills/mobile-analytics/references/ios.md +9 -0
- package/skills/mobile-analytics/references/kotlin-multiplatform.md +8 -0
- package/skills/mobile-analytics/references/react-native.md +9 -0
- package/skills/mobile-auth/SKILL.md +55 -0
- package/skills/mobile-auth/references/android.md +10 -0
- package/skills/mobile-auth/references/flutter.md +9 -0
- package/skills/mobile-auth/references/ios.md +10 -0
- package/skills/mobile-auth/references/kotlin-multiplatform.md +9 -0
- package/skills/mobile-auth/references/react-native.md +9 -0
- package/skills/mobile-billing/SKILL.md +58 -0
- package/skills/mobile-billing/references/android.md +11 -0
- package/skills/mobile-billing/references/flutter.md +11 -0
- package/skills/mobile-billing/references/ios.md +11 -0
- package/skills/mobile-billing/references/kotlin-multiplatform.md +9 -0
- package/skills/mobile-billing/references/react-native.md +10 -0
- package/skills/mobile-ci/SKILL.md +49 -0
- package/skills/mobile-ci/references/android.md +8 -0
- package/skills/mobile-ci/references/fastlane/beta.md +75 -0
- package/skills/mobile-ci/references/fastlane/match.md +288 -0
- package/skills/mobile-ci/references/fastlane/release.md +113 -0
- package/skills/mobile-ci/references/fastlane/setup-fastlane.md +150 -0
- package/skills/mobile-ci/references/fastlane/snapshot.md +394 -0
- package/skills/mobile-ci/references/fastlane/xcode-cloud.md +110 -0
- package/skills/mobile-ci/references/flutter.md +8 -0
- package/skills/mobile-ci/references/ios.md +9 -0
- package/skills/mobile-ci/references/kotlin-multiplatform.md +8 -0
- package/skills/mobile-ci/references/react-native.md +8 -0
- package/skills/mobile-firebase/SKILL.md +3 -1
- package/skills/mobile-hardware/SKILL.md +58 -0
- package/skills/mobile-hardware/references/android.md +12 -0
- package/skills/mobile-hardware/references/flutter.md +10 -0
- package/skills/mobile-hardware/references/ios.md +11 -0
- package/skills/mobile-hardware/references/kotlin-multiplatform.md +9 -0
- package/skills/mobile-hardware/references/react-native.md +10 -0
- package/skills/mobile-migration/SKILL.md +66 -0
- package/skills/mobile-migration/references/android.md +9 -0
- package/skills/mobile-migration/references/flutter.md +10 -0
- package/skills/mobile-migration/references/ios.md +10 -0
- package/skills/mobile-migration/references/kotlin-multiplatform.md +9 -0
- package/skills/mobile-migration/references/react-native.md +10 -0
- package/skills/mobile-networking/SKILL.md +50 -0
- package/skills/mobile-networking/references/android.md +10 -0
- package/skills/mobile-networking/references/flutter.md +9 -0
- package/skills/mobile-networking/references/ios.md +10 -0
- package/skills/mobile-networking/references/kotlin-multiplatform.md +9 -0
- package/skills/mobile-networking/references/react-native.md +11 -0
- package/skills/mobile-notifications/SKILL.md +51 -0
- package/skills/mobile-notifications/references/android.md +10 -0
- package/skills/mobile-notifications/references/flutter.md +10 -0
- package/skills/mobile-notifications/references/ios.md +11 -0
- package/skills/mobile-notifications/references/kotlin-multiplatform.md +9 -0
- package/skills/mobile-notifications/references/react-native.md +10 -0
- package/skills/mobile-observability/SKILL.md +1 -1
- package/skills/mobile-offline-sync/SKILL.md +2 -0
- package/skills/mobile-privacy/SKILL.md +54 -0
- package/skills/mobile-privacy/references/android.md +10 -0
- package/skills/mobile-privacy/references/flutter.md +9 -0
- package/skills/mobile-privacy/references/ios.md +10 -0
- package/skills/mobile-privacy/references/kotlin-multiplatform.md +9 -0
- package/skills/mobile-privacy/references/react-native.md +9 -0
- package/skills/mobile-release/SKILL.md +1 -0
- package/skills/mobile-release/references/billing.md +2 -0
- package/skills/mobile-release/references/ci-cd.md +2 -0
- package/skills/mobile-security/SKILL.md +2 -0
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
},
|
|
6
6
|
"metadata": {
|
|
7
7
|
"description": "AI agents for mobile engineering",
|
|
8
|
-
"version": "0.
|
|
8
|
+
"version": "0.10.0"
|
|
9
9
|
},
|
|
10
10
|
"plugins": [
|
|
11
11
|
{
|
|
12
12
|
"name": "reis-mobile",
|
|
13
13
|
"source": "./",
|
|
14
14
|
"description": "AI agents, skills and workflows for Flutter, Android, iOS and React Native development.",
|
|
15
|
-
"version": "0.
|
|
15
|
+
"version": "0.10.0",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "Warleson Reis"
|
|
18
18
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "reis-mobile",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "AI agents, skills and workflows for Flutter, Android, iOS and React Native development. Use /reis-mobile:doctor, /reis-mobile:review and /reis-mobile:test.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Warleson Reis"
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,49 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). The pr
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.10.0] - 2026-11-04
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- `mobile-ci` topic skill for deployment pipelines across all five stacks, with the setup, Match, beta, release and Snapshot guides plus Xcode Cloud documentation imported from `greenstevester/fastlane-skill` (MIT), attributed and pinned to their upstream revision.
|
|
12
|
+
|
|
13
|
+
- Four topic skills, each with Flutter, Android, iOS, React Native and Kotlin Multiplatform references: `mobile-privacy` for consent and data lifecycle, `mobile-networking` for API integration and request recovery, `mobile-auth` for identity/session flows, and `mobile-notifications` for push/local notification lifecycles.
|
|
14
|
+
- English and Portuguese `privacy`, `networking`, `auth` and `notifications` intents, handled by the existing staff engineer, with five-stack routing, prompt discovery and explicit-override tests.
|
|
15
|
+
- `mobile-billing`, `mobile-migration`, `mobile-analytics` and `mobile-hardware` topic skills, each with Flutter, Android, iOS, React Native and Kotlin Multiplatform references: in-app purchases verified by the backend before acknowledgement and recovered after process death; migrations planned as buildable steps, with on-device data that survives skipped releases and interrupted launches; tracking plans with typed events, identity reset on sign-out and consent-gated collection; device hardware from the availability check to the release of the resource, with real-device test matrices.
|
|
16
|
+
- English and Portuguese `billing`, `analytics` and `hardware` intents, handled by `mobile-staff-engineer`. `mobile-migration` joins the existing `migration` route. Plain "analytics" still routes to observability.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Authentication requests now have a dedicated `auth` intent instead of relying on security vocabulary. Explicit security audits retain the security workflow.
|
|
21
|
+
- `mobile-staff-engineer` serves the `billing`, `analytics` and `hardware` intents and loads `mobile-migration` for migration plans.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- The router counted any word starting with "pr" as a review request, so prompts such as "implementar paywall premium" or "definir funil de conversão do produto" went to review. "PR" and "PRs" now count only as whole words.
|
|
26
|
+
|
|
27
|
+
## [0.9.0] - 2026-10-13
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- `core/providers/`: the multi-provider layer. Six external providers — the `codex` and `gemini` CLIs plus the OpenAI, Gemini, OpenRouter and Ollama HTTP APIs — described as data (endpoint, credential variables, request shape, model catalog), so adding one touches no command. Status, model and allowlist resolution make no network call: a CLI is found by scanning `PATH`, an HTTP provider by its credential variable.
|
|
32
|
+
- `reis-mobile providers [--all] [--json]` lists every provider with the evidence behind its status (`ready`, `local`, `missing`, `disabled`, `blocked`), its endpoint and the resolved model. `reis-mobile providers --models` asks each provider which models it serves, so no model id is ever shipped as a default.
|
|
33
|
+
- `reis-mobile consult [--providers a,b] [--model <id>] [--file <path>] [--timeout <ms>] <question>` asks the selected providers the same question in parallel. The core performs the call, so no API key passes through the conversation; the question is redacted on the way out and every answer on the way in. Each requested provider is reported with its own typed status — `ok`, `unavailable`, `no-model`, `timeout`, `error` — and the exit code is 1 only when nobody answered.
|
|
34
|
+
- `/reis-mobile:consult [options] <question>`, also reachable as `/reis-mobile consult ...`: routes the question through the stack's specialist, requires its own position first, builds a self-contained briefing in `.reis-mobile/consults/`, consults the providers and then reconciles every outside claim against the code as confirmed with `file:line`, unverifiable or wrong.
|
|
35
|
+
- `providers:` in `.reis-mobile/config.yaml`: the allowlist of external providers a repository accepts, committed with the repository. An absent key allows all, an empty list allows none, and a blocked provider says so instead of failing.
|
|
36
|
+
- `providers.<id>.model` and `providers.<id>.enabled` in `~/.config/reis-mobile/config.json`, with precedence `--model`, then the provider's model variable (`OPENAI_MODEL`, `GEMINI_MODEL`, `OPENROUTER_MODEL`, `OLLAMA_MODEL`), then the config file.
|
|
37
|
+
- `reis-mobile doctor` lists the configured providers under Integrations, with a single informational row when none is configured. It still makes no network call.
|
|
38
|
+
|
|
39
|
+
### Changed
|
|
40
|
+
|
|
41
|
+
- `/reis-mobile:debate --external` selects providers through the core instead of probing with `command -v`, accepts `--providers a,b`, and no longer needs `Bash(codex:*)` or `Bash(gemini:*)`: every provider call goes through the CLI. Behavior without a ready provider is unchanged — the debate carries on with the agents alone.
|
|
42
|
+
- CLI providers are asked for an opinion, not for work: `codex exec` now runs with `--sandbox read-only` and `gemini` with `--approval-mode plan`, both in a temporary working directory that is removed afterwards. The debate's previous invocation granted write access and the user's repository as a workspace, neither of which a second opinion needs.
|
|
43
|
+
- `/reis-mobile:review` points at `/reis-mobile:consult` when a finding should be cross-checked outside the session, and still never sends project context itself.
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- `/reis-mobile:debate --external` could not reach Codex at all on current CLI versions: `codex exec --full-auto` is rejected with `unexpected argument '--full-auto' found`, and the call ran outside a Git repository without `--skip-git-repo-check`. The provider catalog now carries the invocation verified against `codex exec --help`.
|
|
48
|
+
- A failing CLI provider reported its opening banner (`YOLO mode is enabled...`) instead of the cause. The reported line is now the first one that names a failure, falling back to the last line of stderr.
|
|
49
|
+
|
|
7
50
|
## [0.8.0] - 2026-09-23
|
|
8
51
|
|
|
9
52
|
### Added
|
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ A mobile app is not a generic project. A code review that does not know about `B
|
|
|
23
23
|
|
|
24
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
25
|
|
|
26
|
-
👥 **21 agents and
|
|
26
|
+
👥 **21 agents and 26 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, production observability, privacy, networking, authentication, notifications, in-app purchases, migrations, product analytics and device hardware.
|
|
27
27
|
|
|
28
28
|
🧩 **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.
|
|
29
29
|
|
|
@@ -44,21 +44,25 @@ A mobile app is not a generic project. A code review that does not know about `B
|
|
|
44
44
|
## What's new
|
|
45
45
|
|
|
46
46
|
<!-- reis-mobile:latest-release:start -->
|
|
47
|
-
### v0.
|
|
47
|
+
### v0.10.0
|
|
48
48
|
|
|
49
49
|
#### Added
|
|
50
50
|
|
|
51
|
-
- `mobile-
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
- `
|
|
55
|
-
- `mobile-
|
|
56
|
-
-
|
|
57
|
-
- `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.
|
|
51
|
+
- `mobile-ci` topic skill for deployment pipelines across all five stacks, with the setup, Match, beta, release and Snapshot guides plus Xcode Cloud documentation imported from `greenstevester/fastlane-skill` (MIT), attributed and pinned to their upstream revision.
|
|
52
|
+
|
|
53
|
+
- Four topic skills, each with Flutter, Android, iOS, React Native and Kotlin Multiplatform references: `mobile-privacy` for consent and data lifecycle, `mobile-networking` for API integration and request recovery, `mobile-auth` for identity/session flows, and `mobile-notifications` for push/local notification lifecycles.
|
|
54
|
+
- English and Portuguese `privacy`, `networking`, `auth` and `notifications` intents, handled by the existing staff engineer, with five-stack routing, prompt discovery and explicit-override tests.
|
|
55
|
+
- `mobile-billing`, `mobile-migration`, `mobile-analytics` and `mobile-hardware` topic skills, each with Flutter, Android, iOS, React Native and Kotlin Multiplatform references: in-app purchases verified by the backend before acknowledgement and recovered after process death; migrations planned as buildable steps, with on-device data that survives skipped releases and interrupted launches; tracking plans with typed events, identity reset on sign-out and consent-gated collection; device hardware from the availability check to the release of the resource, with real-device test matrices.
|
|
56
|
+
- English and Portuguese `billing`, `analytics` and `hardware` intents, handled by `mobile-staff-engineer`. `mobile-migration` joins the existing `migration` route. Plain "analytics" still routes to observability.
|
|
58
57
|
|
|
59
58
|
#### Changed
|
|
60
59
|
|
|
61
|
-
-
|
|
60
|
+
- Authentication requests now have a dedicated `auth` intent instead of relying on security vocabulary. Explicit security audits retain the security workflow.
|
|
61
|
+
- `mobile-staff-engineer` serves the `billing`, `analytics` and `hardware` intents and loads `mobile-migration` for migration plans.
|
|
62
|
+
|
|
63
|
+
#### Fixed
|
|
64
|
+
|
|
65
|
+
- The router counted any word starting with "pr" as a review request, so prompts such as "implementar paywall premium" or "definir funil de conversão do produto" went to review. "PR" and "PRs" now count only as whole words.
|
|
62
66
|
|
|
63
67
|
<!-- reis-mobile:latest-release:end -->
|
|
64
68
|
|
|
@@ -247,7 +251,8 @@ After editing agents, skills or commands, restart Claude Code or Codex.
|
|
|
247
251
|
/reis-mobile:test audit Espresso checkout tests # Reviews assertions and synchronization without editing
|
|
248
252
|
/reis-mobile:release audit both stores for the production variant # Evidence-backed readiness, read-only
|
|
249
253
|
/reis-mobile:debate Riverpod or BLoC in this app? # Debate between the specialists, with a decision by lead-mobile
|
|
250
|
-
/reis-mobile:debate --rounds 3 --external ... # More rounds; --external adds
|
|
254
|
+
/reis-mobile:debate --rounds 3 --external ... # More rounds; --external adds every configured external provider
|
|
255
|
+
/reis-mobile:consult should we move this to a native module? # Second opinion from OpenAI, Gemini, OpenRouter, Ollama or the CLIs
|
|
251
256
|
```
|
|
252
257
|
|
|
253
258
|
### Debug
|
|
@@ -299,7 +304,50 @@ Participants vary along two axes at once. The **role** gives each one a differen
|
|
|
299
304
|
|
|
300
305
|
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.
|
|
301
306
|
|
|
302
|
-
With `--external`, the command
|
|
307
|
+
With `--external`, the command asks the core which providers are ready — the `codex` and `gemini` CLIs, OpenAI, Gemini, OpenRouter, Ollama — and carries on without them if none is. `--providers a,b` picks them explicitly. 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.
|
|
308
|
+
|
|
309
|
+
### External providers
|
|
310
|
+
|
|
311
|
+
`/reis-mobile:consult <question>` is the debate's external axis on its own: it routes the question, forms its own position, builds a self-contained briefing with the relevant code excerpts, sends it to the configured providers and then reconciles every outside claim against your code — confirmed with `file:line`, unverifiable, or wrong with the evidence. Rounds and agents cost nothing here, so it fits a question a single outside opinion settles.
|
|
312
|
+
|
|
313
|
+
The core makes the call, never the model, so **no API key passes through the conversation**. The question is masked by [`redact.mjs`](core/security/redact.mjs) on the way out and every answer on the way in.
|
|
314
|
+
|
|
315
|
+
| Provider | Needs | Model from |
|
|
316
|
+
|---|---|---|
|
|
317
|
+
| `codex` | the `codex` CLI on `PATH` | its own configuration |
|
|
318
|
+
| `gemini-cli` | the `gemini` CLI on `PATH` | its own configuration |
|
|
319
|
+
| `openai` | `OPENAI_API_KEY` | `OPENAI_MODEL` |
|
|
320
|
+
| `gemini` | `GEMINI_API_KEY` or `GOOGLE_API_KEY` | `GEMINI_MODEL` |
|
|
321
|
+
| `openrouter` | `OPENROUTER_API_KEY` | `OPENROUTER_MODEL` |
|
|
322
|
+
| `ollama` | a server at `OLLAMA_HOST` (default `http://127.0.0.1:11434`) | `OLLAMA_MODEL` |
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
reis-mobile providers --all # What each provider needs, with no network call
|
|
326
|
+
reis-mobile providers --models --providers openai # Ask the provider which models it serves
|
|
327
|
+
reis-mobile consult --providers openai,ollama -- "is a native module justified here?"
|
|
328
|
+
reis-mobile consult --file briefing.md --timeout 300000
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
reis-mobile ships **no default model id**: a hardcoded one is wrong the day the provider retires it. Set `OPENAI_MODEL` and friends, pass `--model`, or write it once in `~/.config/reis-mobile/config.json`:
|
|
332
|
+
|
|
333
|
+
```json
|
|
334
|
+
{
|
|
335
|
+
"providers": {
|
|
336
|
+
"openai": { "model": "<a model from reis-mobile providers --models>" },
|
|
337
|
+
"openrouter": { "enabled": false }
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
A team decides which providers may receive repository context, committed with the repository:
|
|
343
|
+
|
|
344
|
+
```yaml
|
|
345
|
+
# .reis-mobile/config.yaml
|
|
346
|
+
providers:
|
|
347
|
+
- ollama # only this one; an empty list allows none, no key allows all
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
`reis-mobile providers` and `/reis-mobile:doctor` make no network call: a provider is `ready` because its executable is on `PATH` or its credential is in the environment, never because it answered. `ollama` shows as `local` until a request proves the server is up.
|
|
303
351
|
|
|
304
352
|
Not sure what the router will pick? Ask the CLI:
|
|
305
353
|
|
|
@@ -326,6 +374,7 @@ The router never invents a specialist: if no agent serves the intent, it warns y
|
|
|
326
374
|
| I want to... | Use | Status |
|
|
327
375
|
|----------|-----|--------|
|
|
328
376
|
| Know if my environment is ready to build | `/reis-mobile:doctor` | ✅ |
|
|
377
|
+
| Cross-check a decision with a model outside this session | `/reis-mobile:consult` | ✅ |
|
|
329
378
|
| Review a PR or my changes | `/reis-mobile:review` | ✅ |
|
|
330
379
|
| Audit an entire Flutter project | `/reis-mobile:review` with no pending changes | ✅ |
|
|
331
380
|
| Find out a project's stack | `reis-mobile detect` | ✅ |
|
|
@@ -337,6 +386,7 @@ The router never invents a specialist: if no agent serves the intent, it warns y
|
|
|
337
386
|
| Build a plugin or debug MethodChannel/EventChannel | agent `plugin-native-expert` | ✅ |
|
|
338
387
|
| Audit a screen for TalkBack, VoiceOver, touch targets and text scaling | agent `mobile-accessibility-auditor` | ✅ |
|
|
339
388
|
| Check release readiness, write release notes or set up CI/CD | agent `mobile-release-engineer` | ✅ |
|
|
389
|
+
| Set up fastlane lanes, Match, TestFlight or automated screenshots | skill [`mobile-ci`](skills/mobile-ci/SKILL.md) | ✅ |
|
|
340
390
|
| Set startup, frame, memory and battery budgets and guard them in CI | skill `mobile-performance` | ✅ |
|
|
341
391
|
| Make the app work offline, queue writes and resolve conflicts | skill `mobile-offline-sync` | ✅ |
|
|
342
392
|
| Get usable crashes, errors, traces and release-health alerts in production | skill `mobile-observability` | ✅ |
|
|
@@ -355,8 +405,8 @@ The router never invents a specialist: if no agent serves the intent, it warns y
|
|
|
355
405
|
| **Project context** | You explain the stack | Deterministic detection of stack, platform and variant |
|
|
356
406
|
| **Review** | Generic | Mobile checklists: lifecycle, `BuildContext`, MASVS, manifest, ATS |
|
|
357
407
|
| **Secrets in the diff** | Sent as they are | Masked before reaching the model |
|
|
358
|
-
| **Specialists** | None | 21 agents and
|
|
359
|
-
| **Context cost** | Zero | ~
|
|
408
|
+
| **Specialists** | None | 21 agents and 26 mobile skills |
|
|
409
|
+
| **Context cost** | Zero | ~5,500 fixed tokens (agent and skill descriptions), no hooks |
|
|
360
410
|
| **Best for** | General tasks | Teams and developers working on mobile apps |
|
|
361
411
|
|
|
362
412
|
**In short:** Claude Code already knows how to code. reis-mobile makes it look at what matters in a mobile app.
|
|
@@ -416,7 +466,7 @@ For domain knowledge that code cannot reveal, optionally commit `.reis-mobile/pr
|
|
|
416
466
|
| `kmp-test-engineer` | Kotlin Multiplatform | test | `commonTest`, target tests and Android/iOS host coverage |
|
|
417
467
|
| `mobile-accessibility-auditor` | all | accessibility | Screen reader labels, roles and states, touch targets, text scaling, focus and announcements, with fixes per platform |
|
|
418
468
|
| `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 |
|
|
419
|
-
| `mobile-staff-engineer` | all | debug, architecture, performance, test, security, migration, dependency, build, offline, observability | Cross-toolchain diagnosis and
|
|
469
|
+
| `mobile-staff-engineer` | all | debug, architecture, performance, test, security, migration, dependency, build, offline, observability, privacy, networking, auth, notifications, billing, analytics, hardware | Cross-toolchain diagnosis, migrations and capability workflows when no stack specialist owns the intent |
|
|
420
470
|
| `plugin-native-expert` | Flutter | on demand | MethodChannel, EventChannel, Pigeon and Kotlin/Swift bridges, threading and lifecycle |
|
|
421
471
|
| `lead-mobile` | all | on demand | Coordinates the other agents and consolidates a single action plan |
|
|
422
472
|
|
|
@@ -435,9 +485,18 @@ Every skill starts with `mobile-`. **Topic** skills cover every stack with one r
|
|
|
435
485
|
| `mobile-security` | OWASP MASVS security checks | review, security, release | Flutter (token storage), Android (intents), iOS, React Native, KMP, OAuth/OIDC and PKCE |
|
|
436
486
|
| `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 |
|
|
437
487
|
| `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 |
|
|
488
|
+
| `mobile-ci` | CI/CD and fastlane setup, Match, beta, release and Snapshot | deployment | Flutter, Android, iOS, React Native, KMP, imported fastlane guides and Xcode Cloud |
|
|
438
489
|
| `mobile-performance` | Startup, rendering, memory, battery, app size and regression gates | performance | Flutter, Android, iOS, React Native, KMP, background execution and battery |
|
|
439
490
|
| `mobile-offline-sync` | Local store, outbox, idempotency, conflict resolution, reconnection | offline | Flutter, Android, iOS, React Native, KMP |
|
|
440
491
|
| `mobile-observability` | Crashes, errors, breadcrumbs, traces, alerts, sampling and privacy | observability | Flutter, Android, iOS, React Native, KMP |
|
|
492
|
+
| `mobile-privacy` | Consent lifecycle, SDK collection, account/data deletion and retention | privacy | Flutter, Android, iOS, React Native, KMP |
|
|
493
|
+
| `mobile-networking` | API contracts, cancellation, pagination, refresh coordination and resumable transfers | networking | Flutter, Android, iOS, React Native, KMP |
|
|
494
|
+
| `mobile-auth` | Sign-in, passkeys, recovery, provider linking and session transitions | auth | Flutter, Android, iOS, React Native, KMP |
|
|
495
|
+
| `mobile-notifications` | Push/local notifications, token bindings, permissions and cold-start taps | notifications | Flutter, Android, iOS, React Native, KMP |
|
|
496
|
+
| `mobile-billing` | In-app purchases, subscriptions, backend verification, acknowledgement and restore | billing | Flutter, Android, iOS, React Native, KMP |
|
|
497
|
+
| `mobile-migration` | Toolchain and library upgrades, incremental UI moves and on-device data migrations | migration | Flutter, Android, iOS, React Native, KMP |
|
|
498
|
+
| `mobile-analytics` | Tracking plans, typed events, funnels, analytics identity and consent-gated collection | analytics | Flutter, Android, iOS, React Native, KMP |
|
|
499
|
+
| `mobile-hardware` | Camera, Bluetooth and BLE, NFC, location, sensors, scanning and haptics | hardware | Flutter, Android, iOS, React Native, KMP |
|
|
441
500
|
| `mobile-firebase` | Firebase setup and 13 products | — | Flutter, Android, iOS, React Native, KMP; check installed SDK support |
|
|
442
501
|
| `mobile-flutter` | Flutter and Dart specifics | review, performance, accessibility, migration | UI and navigation, data, native code, performance, accessibility and i18n, Dart, setup |
|
|
443
502
|
| `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 |
|
|
@@ -446,7 +505,23 @@ Every skill starts with `mobile-`. **Topic** skills cover every stack with one r
|
|
|
446
505
|
| `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 |
|
|
447
506
|
| `mobile-detect-stack` | Deterministic stack detection with the CLI | — | — |
|
|
448
507
|
|
|
449
|
-
Skills marked — are triggered by Claude Code when the request matches their description, for example *"
|
|
508
|
+
Skills marked — are triggered by Claude Code when the request matches their description, for example *"configure Firestore rules"* → `mobile-firebase`. Notification requests route to `mobile-notifications`, which links Firebase guidance when FCM is the installed provider.
|
|
509
|
+
|
|
510
|
+
The seven capability intents (`privacy`, `networking`, `auth`, `notifications`, `billing`, `analytics` and `hardware`) select `mobile-staff-engineer` and the matching topic skill; `mobile-migration` joins the existing `migration` route. Use these from your mobile app directory:
|
|
511
|
+
|
|
512
|
+
```bash
|
|
513
|
+
reis-mobile route "implement account deletion"
|
|
514
|
+
reis-mobile route "implement resumable uploads"
|
|
515
|
+
reis-mobile route "implement sign-in with passkeys"
|
|
516
|
+
reis-mobile route "implement local notifications"
|
|
517
|
+
reis-mobile route "add in-app purchases"
|
|
518
|
+
reis-mobile route "create a tracking plan"
|
|
519
|
+
reis-mobile route "connect to a Bluetooth device"
|
|
520
|
+
reis-mobile route "migrate from BLoC to Riverpod"
|
|
521
|
+
reis-mobile route --intent auth "review the session lifecycle"
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
The CLI returns the selected agent and instruction paths; it does not implement a login, delete an account, send a notification or make a purchase. An explicit intent takes precedence over the prompt. Existing security audits, tests and release work retain their own routes, and a plain "analytics" request still goes to `mobile-observability`. When a short prompt is ambiguous, pass `--intent` or invoke the skill directly in the host.
|
|
450
525
|
|
|
451
526
|
About 85 guides come from [flutter/skills](https://github.com/flutter/skills), [dart-lang/skills](https://github.com/dart-lang/skills), [evanca/flutter-ai-rules](https://github.com/evanca/flutter-ai-rules) and [android/skills](https://github.com/android/skills), unchanged and credited in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
|
|
452
527
|
|
|
@@ -454,15 +529,15 @@ About 85 guides come from [flutter/skills](https://github.com/flutter/skills), [
|
|
|
454
529
|
|
|
455
530
|
## Trust, security and limits
|
|
456
531
|
|
|
457
|
-
**Read-only CLI context.** `doctor`, `detect`, `route`, `review`, `test` and `
|
|
532
|
+
**Read-only CLI context.** `doctor`, `detect`, `route`, `review`, `test`, `release`, `providers` and `consult` 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/` and a consult its briefing to `.reis-mobile/consults/`.
|
|
458
533
|
|
|
459
534
|
**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).
|
|
460
535
|
|
|
461
|
-
**No telemetry.** `detect`, `doctor`, `route`, `review`, `debug` and `
|
|
536
|
+
**No telemetry.** `detect`, `doctor`, `route`, `review`, `debug`, `test` and `providers` make no network calls (`providers --models` and `consult` do, by request). 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.
|
|
462
537
|
|
|
463
|
-
**Exception: `/reis-mobile:debate --external
|
|
538
|
+
**Exception: external providers.** Two workflows, and only these two, send project context to a third party: `/reis-mobile:debate --external` and `/reis-mobile:consult`. Both state which providers receive it, and both are opt-in — no other command calls a provider. What leaves is the briefing, including the code excerpts you include; each provider has its own data policy. The question and every answer pass through `redact.mjs`, which is a protection layer and not a guarantee: read the briefing before sending it. API keys are read from the environment by the CLI and never enter the conversation, and `providers:` in `.reis-mobile/config.yaml` lets a team restrict which providers a repository allows. CLI providers (`codex`, `gemini-cli`) are asked for an opinion, not for work: they run in read-only mode (`codex exec --sandbox read-only`, `gemini --approval-mode plan`) inside a temporary directory, never in your repository.
|
|
464
539
|
|
|
465
|
-
**Context cost.** Claude Code loads the descriptions of 21 agents and
|
|
540
|
+
**Context cost.** Claude Code loads the descriptions of 21 agents and 26 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.
|
|
466
541
|
|
|
467
542
|
**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.
|
|
468
543
|
|
|
@@ -491,8 +566,9 @@ About 85 guides come from [flutter/skills](https://github.com/flutter/skills), [
|
|
|
491
566
|
| v0.7.1 | Update notices, single-source version and release automation | ✅ |
|
|
492
567
|
| v0.7.3 | `/reis-mobile:release` with per-target evidence, required gates and deterministic readiness verdicts (previously planned for v0.8.0) | ✅ |
|
|
493
568
|
| 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 | ✅ |
|
|
494
|
-
| v0.9.0 |
|
|
495
|
-
| v0.10.0 |
|
|
569
|
+
| v0.9.0 | Multi-provider layer (OpenAI, Gemini, OpenRouter, Ollama and the Codex/Gemini CLIs), `reis-mobile providers`, `reis-mobile consult` and `/reis-mobile:consult` — previously planned for v0.10.0 | ✅ |
|
|
570
|
+
| v0.10.0 | `mobile-privacy`, `mobile-networking`, `mobile-auth` and `mobile-notifications` topic skills with a reference per stack, plus the `privacy`, `networking`, `auth` and `notifications` intents | ✅ |
|
|
571
|
+
| v0.11.0 | MCP server | ⏳ |
|
|
496
572
|
| v1.0.0 | First stable version: Flutter, Android, iOS and React Native | ⏳ |
|
|
497
573
|
|
|
498
574
|
---
|
|
@@ -502,6 +578,9 @@ About 85 guides come from [flutter/skills](https://github.com/flutter/skills), [
|
|
|
502
578
|
**Do I need Flutter, Xcode or the Android SDK installed?**
|
|
503
579
|
Not for the review, which only reads code. `/reis-mobile:doctor` shows what is missing in case you want to build.
|
|
504
580
|
|
|
581
|
+
**Do I need an API key?**
|
|
582
|
+
No. Everything except `/reis-mobile:consult` and `/reis-mobile:debate --external` runs on the model of your session. Those two use whatever you have configured — a `codex` or `gemini` CLI already on your machine counts, and `ollama` keeps the question on localhost. `reis-mobile providers --all` shows what each one still needs.
|
|
583
|
+
|
|
505
584
|
**My app lives inside a monorepo.**
|
|
506
585
|
Commit a `.reis-mobile/config.yaml` at the repository root pointing at the app:
|
|
507
586
|
|
|
@@ -521,7 +600,7 @@ The plugin's skills live in the `reis-mobile:` namespace and do not conflict, bu
|
|
|
521
600
|
Yes: `reis-mobile init eng` installs the plugin in Codex too. See [installation](#install). 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.
|
|
522
601
|
|
|
523
602
|
**Does it work in Cursor?**
|
|
524
|
-
The Cursor integration has not been validated yet. The MCP server remains on the roadmap for v0.
|
|
603
|
+
The Cursor integration has not been validated yet. The MCP server remains on the roadmap for v0.11.0.
|
|
525
604
|
|
|
526
605
|
**What does reis-mobile send outside my machine?**
|
|
527
606
|
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.
|
|
@@ -546,6 +625,7 @@ Questions: [Discussions](https://github.com/wrsilva/reis-mobile/discussions). Wh
|
|
|
546
625
|
- [Architecture](ARCHITECTURE.md): modules, detection, routing and the agent and skill contract
|
|
547
626
|
- [AGENTS.md](AGENTS.md): rules for whoever (or whichever AI) contributes to the repository
|
|
548
627
|
- [Contributing](CONTRIBUTING.md)
|
|
628
|
+
- [Releasing](docs/releasing.md): how a version is cut, what is generated and what to do when the pipeline fails
|
|
549
629
|
- [Code of Conduct](CODE_OF_CONDUCT.md)
|
|
550
630
|
- [Support](SUPPORT.md)
|
|
551
631
|
- [Security](SECURITY.md)
|
|
@@ -556,6 +636,7 @@ Questions: [Discussions](https://github.com/wrsilva/reis-mobile/discussions). Wh
|
|
|
556
636
|
|
|
557
637
|
## Attribution
|
|
558
638
|
|
|
639
|
+
- **[greenstevester/fastlane-skill](https://github.com/greenstevester/fastlane-skill)** (MIT): five fastlane guides and Xcode Cloud documentation in [`mobile-ci`](skills/mobile-ci/SKILL.md). The source revision and license are recorded in [Third-Party Notices](THIRD_PARTY_NOTICES.md).
|
|
559
640
|
- **[flutter/skills](https://github.com/flutter/skills)** (BSD-3-Clause): 25 Flutter skills.
|
|
560
641
|
- **[dart-lang/skills](https://github.com/dart-lang/skills)** (BSD-3-Clause): 8 Dart skills.
|
|
561
642
|
- **[evanca/flutter-ai-rules](https://github.com/evanca/flutter-ai-rules)** (MIT): 28 Flutter, testing and Firebase skills.
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# Third-Party Notices
|
|
2
2
|
|
|
3
|
+
## greenstevester/fastlane-skill
|
|
4
|
+
|
|
5
|
+
- Source: https://github.com/greenstevester/fastlane-skill
|
|
6
|
+
- Revision: `cab4eff8e678391671916228d7b6446d438da4a9`
|
|
7
|
+
- License: MIT
|
|
8
|
+
- Integrated into `mobile-ci` as references; no standalone upstream skills are registered.
|
|
9
|
+
- Adapted files under `skills/`: `setup-fastlane` → `mobile-ci/references/fastlane/setup-fastlane.md` and `mobile-ci/references/fastlane/xcode-cloud.md` (upstream `docs/xcode-cloud.md`); `match` → `mobile-ci/references/fastlane/match.md`; `beta` → `mobile-ci/references/fastlane/beta.md`; `release` → `mobile-ci/references/fastlane/release.md`; `snapshot` → `mobile-ci/references/fastlane/snapshot.md`.
|
|
10
|
+
- Adaptation: removed skill frontmatter, added attribution and relocated the Xcode Cloud link. Original guide bodies are otherwise preserved; project-specific integration guidance lives in `mobile-ci/SKILL.md`.
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
MIT License
|
|
14
|
+
|
|
15
|
+
Copyright (c) 2024 greenstevester
|
|
16
|
+
|
|
17
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
18
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
19
|
+
in the Software without restriction, including without limitation the rights
|
|
20
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
21
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
22
|
+
furnished to do so, subject to the following conditions:
|
|
23
|
+
|
|
24
|
+
The above copyright notice and this permission notice shall be included in all
|
|
25
|
+
copies or substantial portions of the Software.
|
|
26
|
+
|
|
27
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
28
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
29
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
30
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
31
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
32
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
33
|
+
SOFTWARE.
|
|
34
|
+
```
|
|
35
|
+
|
|
3
36
|
reis-mobile is distributed under the MIT License (see [LICENSE](LICENSE)). The skills listed below were derived from third-party projects and remain under their original licenses. Each of these skills declares `source` and `license` in its `SKILL.md` frontmatter.
|
|
4
37
|
|
|
5
38
|
Changes made by reis-mobile: every third-party skill was moved into a reis-mobile skill (`mobile-test`, `mobile-firebase`, `mobile-code-review`, `mobile-debug`, `mobile-security`, `mobile-architecture`, `mobile-flutter`, `mobile-android`). Its instructions are unchanged apart from a leading attribution line and the removed frontmatter; skills that shipped extra files (references, scripts, examples) moved as whole folders with the instructions in `GUIDE.md`, so their relative links still work. Each section lists the upstream skill and the file that holds it now. Some copies correspond to earlier revisions of the upstream files.
|
|
@@ -28,6 +28,8 @@ Use the [project brief](../docs/agent-context.md) once or reuse the supplied bri
|
|
|
28
28
|
|
|
29
29
|
## Scope and decision
|
|
30
30
|
|
|
31
|
+
For pipeline implementation and fastlane automation, load [mobile-ci](../skills/mobile-ci/SKILL.md) and its relevant platform and task references.
|
|
32
|
+
|
|
31
33
|
A release audit authorizes inspection and preparation. Version bumps, tags and publishing follow the user's requested scope; do not infer an upload from a readiness question. For an explicitly requested deployment, complete the reviewable preparation and reuse existing authorization. Avoid executing a lane before inspecting whether it publishes.
|
|
32
34
|
|
|
33
35
|
Return the release identity, GO/GO WITH RISKS/NO-GO verdict where relevant, gates with evidence, exact prepared commands/artifacts and outstanding external state. Define rollout monitoring using the project's metrics and thresholds; proposed thresholds must be labeled as proposals. Never imply that halting store distribution removes a binary already installed.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mobile-staff-engineer
|
|
3
|
-
description: Use this agent for senior-level guidance across Flutter/Dart, Android (Kotlin) and iOS (Swift) — debugging complex build and runtime issues, architecture decisions for native apps, migrations, dependency and build problems, CI/CD and release pipelines, security and cross-platform trade-offs. Typical triggers are "the Android build broke after upgrading Gradle", planning a payment flow and choosing between native and cross-platform approaches.
|
|
3
|
+
description: Use this agent for senior-level guidance across Flutter/Dart, Android (Kotlin) and iOS (Swift) — debugging complex build and runtime issues, architecture decisions for native apps, migrations, dependency and build problems, CI/CD and release pipelines, security, privacy, API integration, authentication, notifications, in-app purchases, product analytics, device hardware and cross-platform trade-offs. Typical triggers are "the Android build broke after upgrading Gradle", planning a payment flow and choosing between native and cross-platform approaches.
|
|
4
4
|
model: inherit
|
|
5
5
|
color: blue
|
|
6
6
|
tools: ["Read", "Grep", "Glob", "Bash"]
|
|
7
|
-
intents: [debug, architecture, performance, test, security, migration, dependency, build, offline, observability]
|
|
7
|
+
intents: [debug, architecture, performance, test, security, migration, dependency, build, offline, observability, privacy, networking, auth, notifications, billing, analytics, hardware]
|
|
8
8
|
stacks: ["*"]
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -14,6 +14,20 @@ Read the [project brief](../docs/agent-context.md) once or reuse the supplied br
|
|
|
14
14
|
|
|
15
15
|
## Build a causal chain
|
|
16
16
|
|
|
17
|
+
For privacy work, load [mobile-privacy](../skills/mobile-privacy/SKILL.md). Follow its implementation and verification workflow using actual app objects; the failure record below applies when diagnosing a defect, not to every capability request.
|
|
18
|
+
|
|
19
|
+
For API integration and network lifecycle work, load [mobile-networking](../skills/mobile-networking/SKILL.md) and bind its request/cancellation contract to the actual client and repository.
|
|
20
|
+
|
|
21
|
+
For identity and session flows, load [mobile-auth](../skills/mobile-auth/SKILL.md) and trace the provider, session owner and account-scoped data boundaries.
|
|
22
|
+
|
|
23
|
+
For push or local notification flows, load [mobile-notifications](../skills/mobile-notifications/SKILL.md) and trace token ownership, app lifecycle and authorized tap navigation.
|
|
24
|
+
|
|
25
|
+
For in-app purchases and subscriptions, load [mobile-billing](../skills/mobile-billing/SKILL.md) and trace the purchase listener, backend verification and every entitlement read.
|
|
26
|
+
|
|
27
|
+
For product analytics, load [mobile-analytics](../skills/mobile-analytics/SKILL.md) and trace each event from its trigger through the app's analytics boundary to the destination.
|
|
28
|
+
|
|
29
|
+
For camera, Bluetooth, NFC, location, sensors or haptics, load [mobile-hardware](../skills/mobile-hardware/SKILL.md) and trace each capability from its availability check to the release of the resource.
|
|
30
|
+
|
|
17
31
|
1. Recover the exact command, working directory, app root, variant/scheme and first actionable error. Locate the failure phase: resolution, generation, compilation, linking, signing, packaging, startup or runtime.
|
|
18
32
|
2. Read the last relevant change and the versions actually selected by wrappers, lock files and CI. Compare local and CI toolchain evidence; a declared dependency constraint is not necessarily the resolved version.
|
|
19
33
|
3. Trace the failing symbol/configuration from the error to its source file or build input. In cross-platform apps, distinguish Dart/JavaScript callers, generated integration code and native implementation. Identify the source of generated files before proposing an edit.
|
|
@@ -22,7 +36,7 @@ Read the [project brief](../docs/agent-context.md) once or reuse the supplied br
|
|
|
22
36
|
|
|
23
37
|
## Migrations need a compatibility contract
|
|
24
38
|
|
|
25
|
-
Record the current and target toolchain/dependency versions from verified sources, minimum supported platforms, affected native modules and generated code. Split the migration into buildable steps with a check after each. Preserve the app's existing state, storage and public API contracts unless changing them is the objective.
|
|
39
|
+
Load [mobile-migration](../skills/mobile-migration/SKILL.md) for the step plan, on-device data migrations and rollout. Record the current and target toolchain/dependency versions from verified sources, minimum supported platforms, affected native modules and generated code. Split the migration into buildable steps with a check after each. Preserve the app's existing state, storage and public API contracts unless changing them is the objective.
|
|
26
40
|
|
|
27
41
|
Compare two viable options only when the choice matters. Name the actual module/type changed by each, operational cost, reversible step and condition that would invalidate the decision. Avoid broad prescriptions such as replacing the state library or upgrading every dependency to solve one failure.
|
|
28
42
|
|