reis-mobile 0.7.2 → 0.8.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.
Files changed (50) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +23 -0
  4. package/README.md +54 -27
  5. package/agents/android-architect.md +3 -3
  6. package/agents/android-performance-engineer.md +1 -1
  7. package/agents/flutter-architect.md +3 -3
  8. package/agents/flutter-performance-engineer.md +1 -1
  9. package/agents/ios-architect.md +3 -3
  10. package/agents/ios-performance-engineer.md +1 -1
  11. package/agents/kmp-architect.md +3 -3
  12. package/agents/kmp-performance-engineer.md +1 -1
  13. package/agents/lead-mobile.md +3 -0
  14. package/agents/mobile-release-engineer.md +4 -4
  15. package/agents/mobile-staff-engineer.md +1 -1
  16. package/agents/rn-architect.md +3 -3
  17. package/agents/rn-performance-engineer.md +1 -1
  18. package/bin/reis-mobile.mjs +24 -1
  19. package/commands/reis-mobile.md +7 -2
  20. package/commands/release.md +46 -0
  21. package/core/release/context.mjs +11 -0
  22. package/core/router/intents.mjs +15 -0
  23. package/package.json +1 -1
  24. package/skills/mobile-accessibility/SKILL.md +3 -0
  25. package/skills/mobile-accessibility/references/localization.md +77 -0
  26. package/skills/mobile-observability/SKILL.md +137 -0
  27. package/skills/mobile-observability/references/android.md +105 -0
  28. package/skills/mobile-observability/references/flutter.md +86 -0
  29. package/skills/mobile-observability/references/ios.md +88 -0
  30. package/skills/mobile-observability/references/kotlin-multiplatform.md +76 -0
  31. package/skills/mobile-observability/references/react-native.md +62 -0
  32. package/skills/mobile-offline-sync/SKILL.md +132 -0
  33. package/skills/mobile-offline-sync/references/android.md +123 -0
  34. package/skills/mobile-offline-sync/references/flutter.md +103 -0
  35. package/skills/mobile-offline-sync/references/ios.md +103 -0
  36. package/skills/mobile-offline-sync/references/kotlin-multiplatform.md +114 -0
  37. package/skills/mobile-offline-sync/references/react-native.md +108 -0
  38. package/skills/mobile-performance/SKILL.md +88 -0
  39. package/skills/mobile-performance/references/android.md +96 -0
  40. package/skills/mobile-performance/references/background.md +87 -0
  41. package/skills/mobile-performance/references/flutter.md +101 -0
  42. package/skills/mobile-performance/references/ios.md +82 -0
  43. package/skills/mobile-performance/references/kotlin-multiplatform.md +62 -0
  44. package/skills/mobile-performance/references/react-native.md +85 -0
  45. package/skills/mobile-release/SKILL.md +11 -22
  46. package/skills/mobile-release/references/billing.md +92 -0
  47. package/skills/mobile-release/references/readiness.md +88 -0
  48. package/skills/mobile-release/scripts/verdict.mjs +59 -0
  49. package/skills/mobile-security/SKILL.md +3 -0
  50. package/skills/mobile-security/references/auth.md +92 -0
@@ -5,14 +5,14 @@
5
5
  },
6
6
  "metadata": {
7
7
  "description": "AI agents for mobile engineering",
8
- "version": "0.7.2"
8
+ "version": "0.8.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.7.2",
15
+ "version": "0.8.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.7.2",
3
+ "version": "0.8.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,29 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). The pr
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.8.0] - 2026-09-23
8
+
9
+ ### Added
10
+
11
+ - `mobile-performance` topic skill: measurement before optimization, budgets for startup, rendering, memory, battery and app size, and regression detection in CI, with a reference per stack (Flutter DevTools and `integration_test` summaries, Android Macrobenchmark, Baseline Profiles and vitals, iOS Instruments, MetricKit and `XCTMetric` baselines, React Native Hermes profiling and list tuning, KMP shared-versus-host isolation) plus a cross-stack guide to background execution and battery.
12
+ - `mobile-offline-sync` topic skill: local store as the source of truth, a durable outbox with client-generated idempotency keys, ordering and operation collapsing, retry with backoff, conflict strategies per entity, reconnection triggers, offline UX and nine failure cases to test, with a reference per stack (drift and workmanager, Room and WorkManager, Core Data/SwiftData and `BGTaskScheduler`, SQLite with NetInfo and OTA-aware drains, SQLDelight and Ktor in `commonMain`).
13
+ - `mobile-observability` topic skill: the signals that explain a production failure, mandatory segmentation by version and cohort, error context and grouping, correlation ids shared with the backend, rate-based alerting per version, sampling and cost, and what must never be collected, with a reference per stack (Flutter's three capture layers and Dart symbol upload, Android vitals and `ApplicationExitInfo`, MetricKit and Organizer, React Native source maps and OTA update ids, KMP `Telemetry` boundary and Kotlin/Native crash hooks).
14
+ - `offline` and `observability` intents in the router. `offline` goes to the stack's architect and falls back to `mobile-staff-engineer`; `observability` goes to `mobile-release-engineer`.
15
+ - `mobile-security/references/auth.md`: OAuth 2.0 and OIDC for native apps following RFC 8252 — authorization code with PKCE (`S256`), no client secret, system browser instead of a WebView, redirect URI choices, token rotation with reuse detection, and biometrics gating a key rather than a boolean.
16
+ - `mobile-release/references/billing.md`: in-app purchase and subscription lifecycle — server-side entitlement, store server notifications, the states between active and expired, acknowledgement deadlines and automatic refunds, restore and account mapping, and the per-stack client libraries.
17
+ - `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.
18
+
19
+ ### Changed
20
+
21
+ - The five `*-architect` agents also serve the `offline` intent, and `mobile-release-engineer` also serves `observability`; `mobile-staff-engineer` covers both when no stack is detected.
22
+
23
+ ## [0.7.3] - 2026-09-21
24
+
25
+ ### Added
26
+
27
+ - `/reis-mobile:release [request]` and entry-command forwarding audit mobile store readiness with per-target identity, pass/fail/unknown evidence gates and GO/GO WITH RISKS/NO-GO verdicts. A packaged helper rejects incomplete evidence; audits remain read-only by default.
28
+ - `reis-mobile release` prepares routing, redacted git context, diagnostics and release references for all five stacks, including both native artifacts in cross-platform apps. A public Flutter sample audit demonstrates the report and external verification limits.
29
+
7
30
  ## [0.7.2] - 2026-09-18
8
31
 
9
32
  ### 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 14 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 and releases.
26
+ 👥 **21 agents and 17 mobile skills.** Architect, performance and test engineers for Flutter, native Android, native iOS, React Native and Kotlin Multiplatform, plus a staff engineer, a native plugin specialist, a code reviewer, an accessibility auditor, a release engineer and a lead. Topic skills cover the five stacks with focused references for debugging, tests, security, Firebase, accessibility, releases, performance budgets, offline sync and production observability.
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,20 +44,21 @@ 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.7.2
47
+ ### v0.8.0
48
48
 
49
49
  #### Added
50
50
 
51
- - Kotlin Multiplatform architect, test and performance specialists, a `mobile-kmp` platform skill and focused KMP references in the eight cross-stack topic skills. Routing and coverage tests guard the new paths.
52
- - `/reis-mobile:project [feature]` creates or refreshes a verified app object map in `.reis-mobile/project.md` while preserving team-authored product context.
51
+ - `mobile-performance` topic skill: measurement before optimization, budgets for startup, rendering, memory, battery and app size, and regression detection in CI, with a reference per stack (Flutter DevTools and `integration_test` summaries, Android Macrobenchmark, Baseline Profiles and vitals, iOS Instruments, MetricKit and `XCTMetric` baselines, React Native Hermes profiling and list tuning, KMP shared-versus-host isolation) plus a cross-stack guide to background execution and battery.
52
+ - `mobile-offline-sync` topic skill: local store as the source of truth, a durable outbox with client-generated idempotency keys, ordering and operation collapsing, retry with backoff, conflict strategies per entity, reconnection triggers, offline UX and nine failure cases to test, with a reference per stack (drift and workmanager, Room and WorkManager, Core Data/SwiftData and `BGTaskScheduler`, SQLite with NetInfo and OTA-aware drains, SQLDelight and Ktor in `commonMain`).
53
+ - `mobile-observability` topic skill: the signals that explain a production failure, mandatory segmentation by version and cohort, error context and grouping, correlation ids shared with the backend, rate-based alerting per version, sampling and cost, and what must never be collected, with a reference per stack (Flutter's three capture layers and Dart symbol upload, Android vitals and `ApplicationExitInfo`, MetricKit and Organizer, React Native source maps and OTA update ids, KMP `Telemetry` boundary and Kotlin/Native crash hooks).
54
+ - `offline` and `observability` intents in the router. `offline` goes to the stack's architect and falls back to `mobile-staff-engineer`; `observability` goes to `mobile-release-engineer`.
55
+ - `mobile-security/references/auth.md`: OAuth 2.0 and OIDC for native apps following RFC 8252 — authorization code with PKCE (`S256`), no client secret, system browser instead of a WebView, redirect URI choices, token rotation with reuse detection, and biometrics gating a key rather than a boolean.
56
+ - `mobile-release/references/billing.md`: in-app purchase and subscription lifecycle — server-side entitlement, store server notifications, the states between active and expired, acknowledgement deadlines and automatic refunds, restore and account mapping, and the per-stack client libraries.
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.
53
58
 
54
59
  #### Changed
55
60
 
56
- - Specialist guidance distinguishes configured shared source sets, Android/iOS host behavior and target-specific validation; the shared brief verifies profile paths and separates team knowledge from code evidence.
57
-
58
- #### Fixed
59
-
60
- - Release automation opens a pull request for synchronized files instead of pushing directly to a protected `main` branch, and waits for those changes to merge before tagging and publishing.
61
+ - The five `*-architect` agents also serve the `offline` intent, and `mobile-release-engineer` also serves `observability`; `mobile-staff-engineer` covers both when no stack is detected.
61
62
 
62
63
  <!-- reis-mobile:latest-release:end -->
63
64
 
@@ -76,6 +77,8 @@ A mobile app is not a generic project. A code review that does not know about `B
76
77
 
77
78
  | Version | Highlights |
78
79
  |--------|-----------|
80
+ | **v0.7.3** | `/reis-mobile:release` audits store readiness per target, with evidence gates and a GO / GO WITH RISKS / NO-GO verdict. |
81
+ | **v0.7.2** | Kotlin Multiplatform specialists and a `mobile-kmp` skill; `/reis-mobile:project` records the app's real objects. |
79
82
  | **v0.7.1** | Update notices on Claude Code and Codex session start, plus a single-source version and CI-driven release process. |
80
83
  | **v0.7.0** | `/reis-mobile:test`, native XCTest and Espresso guidance, and project-specific contracts for the 18 specialists. |
81
84
  | **v0.6.0** | `mobile-accessibility-auditor` and `mobile-release-engineer` agents with the new `mobile-accessibility` and `mobile-release` skills: accessibility audits on every stack, release readiness with a go/no-go verdict, release notes and store copy, CI/CD. `mobile-debug` gains guides for ANRs, Android memory leaks and deep links. |
@@ -230,7 +233,7 @@ After editing agents, skills or commands, restart Claude Code or Codex.
230
233
  ## Commands
231
234
 
232
235
  ```bash
233
- /reis-mobile # Lists the commands (also accepts doctor, project, review, debug, test, debate or a free-form request)
236
+ /reis-mobile # Lists the commands (also accepts doctor, project, review, debug, test, release, debate or a free-form request)
234
237
  /reis-mobile my android build fails on gradle # Free-form request: detects the stack and applies the right agent and skills
235
238
  /reis-mobile:doctor # Environment and project: SDKs, Xcode, CocoaPods, Gradle wrapper, lock files
236
239
  /reis-mobile:doctor --all # Checks every tool, not only those for the detected stack
@@ -242,6 +245,7 @@ After editing agents, skills or commands, restart Claude Code or Codex.
242
245
  /reis-mobile:test run the checkout unit tests # Uses the existing runner, module or scheme
243
246
  /reis-mobile:test add XCTest coverage for cancellation # Tests the actual Swift type and its dependency seams
244
247
  /reis-mobile:test audit Espresso checkout tests # Reviews assertions and synchronization without editing
248
+ /reis-mobile:release audit both stores for the production variant # Evidence-backed readiness, read-only
245
249
  /reis-mobile:debate Riverpod or BLoC in this app? # Debate between the specialists, with a decision by lead-mobile
246
250
  /reis-mobile:debate --rounds 3 --external ... # More rounds; --external adds Codex and Gemini, if installed
247
251
  ```
@@ -267,6 +271,22 @@ reis-mobile test --base main -- "write regression tests for these changes"
267
271
 
268
272
  Its output includes the resolved project directory, explicit `test` intent, selected specialist and skills, redacted change context, toolchain diagnostics and answer language. `/reis-mobile test ...` forwards to the same slash-command workflow.
269
273
 
274
+ ### Release readiness
275
+
276
+ `/reis-mobile:release [request]` audits the actual app artifacts for Flutter, native Android/iOS, React Native/Expo and Kotlin Multiplatform. `/reis-mobile release [request]` forwards to the same workflow. It resolves the app ID, flavor/scheme, environment, version/build, source revision, store/track and binary before evaluating readiness. Apps targeting both stores receive separate Android and iOS checks.
277
+
278
+ The report lists each required gate as **pass**, **fail** or **unknown**, with evidence and next actions: identity, build, tests, analysis, version, signing, symbols, current store requirements, privacy, listing/localization and rollout/recovery. Any failed or unknown required gate means **NO-GO**. All gates passing means **GO**, or **GO WITH RISKS** when documented non-blocking risks remain. A packaged verdict helper enforces this decision rule; the specialist must still verify the evidence itself.
279
+
280
+ The audit inspects existing files, artifacts and accessible CI/store records. It does not build, run tests, bump versions, tag, upload or change store settings by default. Missing CI results, upload history or portal confirmations remain unknown; local configuration is not proof that a check passed. Explicit execution requests retain their requested scope and prior authorization.
281
+
282
+ ```bash
283
+ reis-mobile release --dir apps/mobile --json -- "audit Android production and iOS App Store"
284
+ ```
285
+
286
+ The CLI only prepares routing, redacted git context, diagnostics and release reference paths. Its JSON includes `release.platforms` (candidate targets), `release.references`, `release.evidenceStatus: "unverified"` and `release.verdict: null`. Exit 0 does not approve a release. In Codex, ask it to run the CLI, read the returned instructions and follow `mobile-release`'s readiness contract; slash-command parity is not assumed.
287
+
288
+ See the [readiness contract](skills/mobile-release/references/readiness.md) and [public Flutter sample audit](docs/examples/release-readiness.md) for the report format and evidence limits.
289
+
270
290
  ### Project context
271
291
 
272
292
  `/reis-mobile:project [feature]` resolves the mobile app, traces real entry points, state owners, data or native boundaries and nearby tests, then creates or refreshes `.reis-mobile/project.md`. In a monorepo it writes beside `.reis-mobile/config.yaml`; otherwise it writes in the app root. The generated section contains only facts tied to code or configuration and identifies unknown product rules. Team-authored sections remain intact on refresh. Agents check its paths and commands against the current checkout before using them.
@@ -317,10 +337,13 @@ The router never invents a specialist: if no agent serves the intent, it warns y
317
337
  | Build a plugin or debug MethodChannel/EventChannel | agent `plugin-native-expert` | ✅ |
318
338
  | Audit a screen for TalkBack, VoiceOver, touch targets and text scaling | agent `mobile-accessibility-auditor` | ✅ |
319
339
  | Check release readiness, write release notes or set up CI/CD | agent `mobile-release-engineer` | ✅ |
340
+ | Set startup, frame, memory and battery budgets and guard them in CI | skill `mobile-performance` | ✅ |
341
+ | Make the app work offline, queue writes and resolve conflicts | skill `mobile-offline-sync` | ✅ |
342
+ | Get usable crashes, errors, traces and release-health alerts in production | skill `mobile-observability` | ✅ |
320
343
  | Full audit with several specialists | agent `lead-mobile` | ✅ |
321
344
  | Decide between two architectures with a real trade-off | `/reis-mobile:debate` | ✅ |
322
345
  | Dedicated test command (including XCTest and Espresso) | `/reis-mobile:test` | ✅ |
323
- | Check whether the app is ready for the store | `/reis-mobile:release` | 🔜 v0.8 |
346
+ | Check whether the app is ready for the store with evidence per target | `/reis-mobile:release` | ✅ |
324
347
  | Consolidated decision by consensus between agents | `/reis-mobile:council` | 🔜 v0.10 |
325
348
 
326
349
  <details>
@@ -332,8 +355,8 @@ The router never invents a specialist: if no agent serves the intent, it warns y
332
355
  | **Project context** | You explain the stack | Deterministic detection of stack, platform and variant |
333
356
  | **Review** | Generic | Mobile checklists: lifecycle, `BuildContext`, MASVS, manifest, ATS |
334
357
  | **Secrets in the diff** | Sent as they are | Masked before reaching the model |
335
- | **Specialists** | None | 21 agents and 14 mobile skills |
336
- | **Context cost** | Zero | ~4,300 fixed tokens (agent and skill descriptions), no hooks |
358
+ | **Specialists** | None | 21 agents and 17 mobile skills |
359
+ | **Context cost** | Zero | ~4,700 fixed tokens (agent and skill descriptions), no hooks |
337
360
  | **Best for** | General tasks | Teams and developers working on mobile apps |
338
361
 
339
362
  **In short:** Claude Code already knows how to code. reis-mobile makes it look at what matters in a mobile app.
@@ -376,28 +399,28 @@ For domain knowledge that code cannot reveal, optionally commit `.reis-mobile/pr
376
399
  | Agent | Stack | Triggered for | What it does |
377
400
  |-------|-------|---------------|-----------|
378
401
  | `mobile-code-reviewer` | all | review | Review with `file:line` evidence, focused on what breaks in production |
379
- | `flutter-architect` | Flutter | architecture | Layers, feature-first, coupling, misplaced logic, refactoring plan |
402
+ | `flutter-architect` | Flutter | architecture, offline | Layers, feature-first, coupling, misplaced logic, refactoring plan |
380
403
  | `flutter-performance-engineer` | Flutter | performance | Rebuilds, jank, lists, leaks, paint, startup, with a score and top 3 fixes |
381
404
  | `flutter-test-engineer` | Flutter | test | Unit, BLoC/Cubit, widget and integration, coverage audit and fragile tests |
382
- | `android-architect` | Android | architecture | UI, domain and data layers, Gradle modules, ViewModel and DI boundaries |
405
+ | `android-architect` | Android | architecture, offline | UI, domain and data layers, Gradle modules, ViewModel and DI boundaries |
383
406
  | `android-performance-engineer` | Android | performance | Compose recomposition, lists, ANRs, startup, leaks, app size |
384
407
  | `android-test-engineer` | Android | test | ViewModel and coroutine tests, Compose and Espresso UI tests, flaky tests |
385
- | `ios-architect` | iOS | architecture | SwiftUI and UIKit structure, packages, navigation, concurrency boundaries |
408
+ | `ios-architect` | iOS | architecture, offline | SwiftUI and UIKit structure, packages, navigation, concurrency boundaries |
386
409
  | `ios-performance-engineer` | iOS | performance | Hangs, SwiftUI updates, lists, launch time, retain cycles, memory |
387
410
  | `ios-test-engineer` | iOS | test | Swift Testing and XCTest unit tests, async code, XCUITest flows |
388
- | `rn-architect` | React Native | architecture | Feature structure, server vs client state, navigation, native modules |
411
+ | `rn-architect` | React Native | architecture, offline | Feature structure, server vs client state, navigation, native modules |
389
412
  | `rn-performance-engineer` | React Native | performance | Re-renders, lists, JavaScript thread, animations, startup, bundle size |
390
413
  | `rn-test-engineer` | React Native | test | Jest, React Native Testing Library, native module mocks, Detox or Maestro |
391
- | `kmp-architect` | Kotlin Multiplatform | architecture | Shared source-set ownership, Android/iOS callers and Swift-facing contracts |
414
+ | `kmp-architect` | Kotlin Multiplatform | architecture, offline | Shared source-set ownership, Android/iOS callers and Swift-facing contracts |
392
415
  | `kmp-performance-engineer` | Kotlin Multiplatform | performance | Shared Kotlin cost versus Android/iOS host traces and bridge overhead |
393
416
  | `kmp-test-engineer` | Kotlin Multiplatform | test | `commonTest`, target tests and Android/iOS host coverage |
394
417
  | `mobile-accessibility-auditor` | all | accessibility | Screen reader labels, roles and states, touch targets, text scaling, focus and announcements, with fixes per platform |
395
- | `mobile-release-engineer` | all | release, deployment | Go/no-go readiness, versions and signing, crash symbols, release notes and store copy, CI/CD, staged rollout |
396
- | `mobile-staff-engineer` | all | debug, architecture, performance, test, security, migration, dependency, build | Cross-toolchain diagnosis and migrations when no stack specialist owns the intent |
418
+ | `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 migrations when no stack specialist owns the intent |
397
420
  | `plugin-native-expert` | Flutter | on demand | MethodChannel, EventChannel, Pigeon and Kotlin/Swift bridges, threading and lifecycle |
398
421
  | `lead-mobile` | all | on demand | Coordinates the other agents and consolidates a single action plan |
399
422
 
400
- When more than one agent serves the intent, the stack-specific one wins. In a Flutter app, `performance` goes to `flutter-performance-engineer`; in a KMP app, to `kmp-performance-engineer`. `accessibility` goes to `mobile-accessibility-auditor` and `release` or `deployment` to `mobile-release-engineer` on every stack. Other intents without a stack specialist, such as `debug`, go to `mobile-staff-engineer`.
423
+ When more than one agent serves the intent, the stack-specific one wins. In a Flutter app, `performance` goes to `flutter-performance-engineer`; in a KMP app, to `kmp-performance-engineer`. `accessibility` goes to `mobile-accessibility-auditor`, `release`, `deployment` and `observability` to `mobile-release-engineer` on every stack, and `offline` to the stack's architect. Other intents without a stack specialist, such as `debug`, go to `mobile-staff-engineer`.
401
424
 
402
425
  ### Skills
403
426
 
@@ -409,9 +432,12 @@ Every skill starts with `mobile-`. **Topic** skills cover every stack with one r
409
432
  | `mobile-code-review` | Review process and checklists | review, performance | Flutter (PR review, widgets, project audit, static analysis), Android, iOS, React Native, KMP |
410
433
  | `mobile-debug` | Failing builds and runtime errors | debug, build, dependency, migration | Flutter (build, runtime, layout, packages), Android (Gradle, crashes, ANRs, memory leaks), iOS (Xcode, CocoaPods, crash logs), React Native (Metro, native modules), KMP, deep links |
411
434
  | `mobile-test` | Unit, UI, integration and end-to-end tests | test | Flutter (widget, integration, Patrol, mocks, coverage), Android, iOS, React Native, KMP |
412
- | `mobile-security` | OWASP MASVS security checks | review, security, release | Flutter (token storage), Android (intents), iOS, React Native, KMP |
413
- | `mobile-accessibility` | Screen readers, touch targets, text scaling, contrast | accessibility | Flutter (Semantics), Android (Compose and Views), iOS (SwiftUI and UIKit), React Native, KMP |
414
- | `mobile-release` | Release readiness, store copy and CI/CD | release, deployment | Flutter, Android, iOS, React Native, KMP, release notes and store listing, CI/CD |
435
+ | `mobile-security` | OWASP MASVS security checks | review, security, release | Flutter (token storage), Android (intents), iOS, React Native, KMP, OAuth/OIDC and PKCE |
436
+ | `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
+ | `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 |
438
+ | `mobile-performance` | Startup, rendering, memory, battery, app size and regression gates | performance | Flutter, Android, iOS, React Native, KMP, background execution and battery |
439
+ | `mobile-offline-sync` | Local store, outbox, idempotency, conflict resolution, reconnection | offline | Flutter, Android, iOS, React Native, KMP |
440
+ | `mobile-observability` | Crashes, errors, breadcrumbs, traces, alerts, sampling and privacy | observability | Flutter, Android, iOS, React Native, KMP |
415
441
  | `mobile-firebase` | Firebase setup and 13 products | — | Flutter, Android, iOS, React Native, KMP; check installed SDK support |
416
442
  | `mobile-flutter` | Flutter and Dart specifics | review, performance, accessibility, migration | UI and navigation, data, native code, performance, accessibility and i18n, Dart, setup |
417
443
  | `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 |
@@ -428,7 +454,7 @@ About 85 guides come from [flutter/skills](https://github.com/flutter/skills), [
428
454
 
429
455
  ## Trust, security and limits
430
456
 
431
- **Read-only CLI context.** `doctor`, `detect`, `route`, `review` and `test` do not modify your project. 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/`.
457
+ **Read-only CLI context.** `doctor`, `detect`, `route`, `review`, `test` and `release` do not modify your project. `/reis-mobile:release` inspects existing release evidence and remains read-only unless execution is explicitly requested. The `/reis-mobile:test` slash command can write or fix tests and execute runners when requested. `/reis-mobile:project` writes only the optional project profile. The `/reis-mobile:review` and `/reis-mobile:debate` commands instruct the model not to edit app code; the debate writes its rounds to `.reis-mobile/debates/`.
432
458
 
433
459
  **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).
434
460
 
@@ -436,7 +462,7 @@ About 85 guides come from [flutter/skills](https://github.com/flutter/skills), [
436
462
 
437
463
  **Exception: `/reis-mobile:debate --external`.** This flag, and only this flag, sends the debate context — including excerpts of the files mentioned in the question — to the `codex` and `gemini` CLIs, which are third-party and have their own data policies. Without the flag, the debate context stays in your session. The `review` diff is masked by `redact.mjs`, but the context you cite in a debate question does not go through that layer: check what you are sending before using `--external`.
438
464
 
439
- **Context cost.** Claude Code loads the descriptions of 21 agents and 14 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.
465
+ **Context cost.** Claude Code loads the descriptions of 21 agents and 17 skills; the full content of each skill is loaded only when it is used. The exact description cost depends on the host and plugin version.
440
466
 
441
467
  **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.
442
468
 
@@ -463,7 +489,8 @@ About 85 guides come from [flutter/skills](https://github.com/flutter/skills), [
463
489
  | v0.6.0 | Accessibility auditor and release engineer agents, `mobile-accessibility` and `mobile-release` skills, ANR, memory leak and deep link debugging guides | ✅ |
464
490
  | v0.7.0 | `/reis-mobile:test`, native tests (XCTest, Espresso) and project-specific specialist contracts | ✅ |
465
491
  | v0.7.1 | Update notices, single-source version and release automation | ✅ |
466
- | v0.8.0 | `/reis-mobile:release` with quality gates | ⏳ |
492
+ | v0.7.3 | `/reis-mobile:release` with per-target evidence, required gates and deterministic readiness verdicts (previously planned for v0.8.0) | ✅ |
493
+ | 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 | ✅ |
467
494
  | v0.9.0 | MCP server | ⏳ |
468
495
  | v0.10.0 | Multi-provider (OpenAI, Gemini, OpenRouter, Ollama) beyond the debate's `--external` | ⏳ |
469
496
  | v1.0.0 | First stable version: Flutter, Android, iOS and React Native | ⏳ |
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  name: android-architect
3
- description: Use this agent to analyze or design the architecture of a native Android app — UI, domain and data layers, unidirectional data flow, ViewModel and state boundaries, Gradle modularization (feature and core modules, convention plugins, version catalog), dependency injection with Hilt or Koin, navigation and misplaced business logic in Activities, Fragments or Composables. Typical triggers are "review the architecture of this Android app", planning a new feature module and validating a modularization refactor.
3
+ description: Use this agent to analyze or design the architecture of a native Android app — UI, domain and data layers, unidirectional data flow, ViewModel and state boundaries, Gradle modularization (feature and core modules, convention plugins, version catalog), dependency injection with Hilt or Koin, navigation and misplaced business logic in Activities, Fragments or Composables. Typical triggers are "review the architecture of this Android app", planning a new feature module, validating a modularization refactor and placing offline storage, WorkManager queues and synchronization in the right layer.
4
4
  model: inherit
5
5
  color: cyan
6
6
  tools: ["Read", "Grep", "Glob"]
7
- intents: [architecture]
7
+ intents: [architecture, offline]
8
8
  stacks: [android]
9
9
  ---
10
10
 
11
11
  You own native Android module, state and lifecycle boundaries. Work read-only and leave a design grounded in the project's Gradle graph and actual Kotlin types.
12
12
 
13
- Use the [project brief](../docs/agent-context.md) once per task, or reuse the caller's brief. Load [mobile-architecture](../skills/mobile-architecture/SKILL.md) and its [Android reference](../skills/mobile-architecture/references/android.md).
13
+ Use the [project brief](../docs/agent-context.md) once per task, or reuse the caller's brief. Load [mobile-architecture](../skills/mobile-architecture/SKILL.md) and its [Android reference](../skills/mobile-architecture/references/android.md). When the design involves working offline, queued writes or synchronization, add [mobile-offline-sync](../skills/mobile-offline-sync/SKILL.md) and its [Android reference](../skills/mobile-offline-sync/references/android.md).
14
14
 
15
15
  ## Establish the real dependency graph
16
16
 
@@ -10,7 +10,7 @@ stacks: [android]
10
10
 
11
11
  You isolate Android latency, frame, memory, energy or size regressions to a Kotlin/native call path and a repeatable experiment. Your deliverable is evidence plus a targeted fix proposal.
12
12
 
13
- Use the [project brief](../docs/agent-context.md) once per task or reuse it from the caller. Load [mobile-android](../skills/mobile-android/SKILL.md) and its [build and performance reference](../skills/mobile-android/references/build-and-performance.md).
13
+ Use the [project brief](../docs/agent-context.md) once per task or reuse it from the caller. Load [mobile-android](../skills/mobile-android/SKILL.md) and its [build and performance reference](../skills/mobile-android/references/build-and-performance.md). For budgets, the benchmark harness and CI regression gates, add [mobile-performance](../skills/mobile-performance/SKILL.md) and its [Android reference](../skills/mobile-performance/references/android.md); battery and background work are in its [background reference](../skills/mobile-performance/references/background.md).
14
14
 
15
15
  ## Fix the measurement conditions
16
16
 
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  name: flutter-architect
3
- description: Use this agent to analyze or design the architecture of a Flutter app — layer separation (presentation, domain, data), feature-first modularization, coupling between features, misplaced business logic, oversized widgets, state management boundaries and dependency injection. Typical triggers are "review the architecture of this Flutter app", planning a new feature module and validating a Clean Architecture refactor.
3
+ description: Use this agent to analyze or design the architecture of a Flutter app — layer separation (presentation, domain, data), feature-first modularization, coupling between features, misplaced business logic, oversized widgets, state management boundaries and dependency injection. Typical triggers are "review the architecture of this Flutter app", planning a new feature module, validating a Clean Architecture refactor and deciding where offline state, queues and synchronization belong.
4
4
  model: inherit
5
5
  color: cyan
6
6
  tools: ["Read", "Grep", "Glob"]
7
- intents: [architecture]
7
+ intents: [architecture, offline]
8
8
  stacks: [flutter]
9
9
  ---
10
10
 
11
11
  You own Flutter state and package boundaries for the requested change. Work read-only: deliver a design that an implementer can apply to this app.
12
12
 
13
- Start with the [project brief](../docs/agent-context.md), read once per task or reuse the supplied brief. Apply [mobile-architecture](../skills/mobile-architecture/SKILL.md) and its [Flutter reference](../skills/mobile-architecture/references/flutter.md) for the state library actually installed.
13
+ Start with the [project brief](../docs/agent-context.md), read once per task or reuse the supplied brief. Apply [mobile-architecture](../skills/mobile-architecture/SKILL.md) and its [Flutter reference](../skills/mobile-architecture/references/flutter.md) for the state library actually installed. When the design involves working offline, queued writes or synchronization, add [mobile-offline-sync](../skills/mobile-offline-sync/SKILL.md) and its [Flutter reference](../skills/mobile-offline-sync/references/flutter.md).
14
14
 
15
15
  ## Trace the feature
16
16
 
@@ -10,7 +10,7 @@ stacks: [flutter]
10
10
 
11
11
  You investigate a measured Flutter rendering, memory or startup regression. Produce a focused diagnosis and patch proposal; do not turn the task into a generic optimization audit.
12
12
 
13
- Read the [project brief](../docs/agent-context.md) once or reuse the supplied context. Use [mobile-flutter](../skills/mobile-flutter/SKILL.md) and its [performance reference](../skills/mobile-flutter/references/performance.md) for the relevant tool.
13
+ Read the [project brief](../docs/agent-context.md) once or reuse the supplied context. Use [mobile-flutter](../skills/mobile-flutter/SKILL.md) and its [performance reference](../skills/mobile-flutter/references/performance.md) for the relevant tool. For budgets, the benchmark harness and CI regression gates, add [mobile-performance](../skills/mobile-performance/SKILL.md) and its [Flutter reference](../skills/mobile-performance/references/flutter.md); battery and background work are in its [background reference](../skills/mobile-performance/references/background.md).
14
14
 
15
15
  ## Establish the experiment
16
16
 
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  name: ios-architect
3
- description: Use this agent to analyze or design the architecture of a native iOS app — SwiftUI and UIKit presentation patterns (MVVM, coordinators), navigation, layering between views, view models, services and persistence, modularization with local Swift packages, dependency injection, Swift concurrency boundaries (actors, @MainActor) and misplaced business logic in views or view controllers. Typical triggers are "review the architecture of this iOS app", planning a new feature module and validating a migration from UIKit to SwiftUI.
3
+ description: Use this agent to analyze or design the architecture of a native iOS app — SwiftUI and UIKit presentation patterns (MVVM, coordinators), navigation, layering between views, view models, services and persistence, modularization with local Swift packages, dependency injection, Swift concurrency boundaries (actors, @MainActor) and misplaced business logic in views or view controllers. Typical triggers are "review the architecture of this iOS app", planning a new feature module, validating a migration from UIKit to SwiftUI and deciding how offline persistence and background synchronization are owned.
4
4
  model: inherit
5
5
  color: cyan
6
6
  tools: ["Read", "Grep", "Glob"]
7
- intents: [architecture]
7
+ intents: [architecture, offline]
8
8
  stacks: [ios]
9
9
  ---
10
10
 
11
11
  You own iOS object ownership, navigation and isolation boundaries. Analyze SwiftUI/UIKit and Swift packages without editing the project.
12
12
 
13
- Read the [project brief](../docs/agent-context.md) once per task or reuse one supplied by the caller. Use [mobile-architecture](../skills/mobile-architecture/SKILL.md) and its [iOS reference](../skills/mobile-architecture/references/ios.md).
13
+ Read the [project brief](../docs/agent-context.md) once per task or reuse one supplied by the caller. Use [mobile-architecture](../skills/mobile-architecture/SKILL.md) and its [iOS reference](../skills/mobile-architecture/references/ios.md). When the design involves working offline, queued writes or synchronization, add [mobile-offline-sync](../skills/mobile-offline-sync/SKILL.md) and its [iOS reference](../skills/mobile-offline-sync/references/ios.md).
14
14
 
15
15
  ## Map ownership before proposing types
16
16
 
@@ -10,7 +10,7 @@ stacks: [ios]
10
10
 
11
11
  You diagnose iOS hangs, view-update cost, launch latency and retained memory using the app's concrete object graph and profiler evidence. Return a focused experiment and fix proposal.
12
12
 
13
- Read the [project brief](../docs/agent-context.md) once, or reuse the supplied brief. Apply [mobile-ios](../skills/mobile-ios/SKILL.md) and its [performance reference](../skills/mobile-ios/references/performance-release.md).
13
+ Read the [project brief](../docs/agent-context.md) once, or reuse the supplied brief. Apply [mobile-ios](../skills/mobile-ios/SKILL.md) and its [performance reference](../skills/mobile-ios/references/performance-release.md). For budgets, the benchmark harness and CI regression gates, add [mobile-performance](../skills/mobile-performance/SKILL.md) and its [iOS reference](../skills/mobile-performance/references/ios.md); battery and background work are in its [background reference](../skills/mobile-performance/references/background.md).
14
14
 
15
15
  ## Pin the observation
16
16
 
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  name: kmp-architect
3
- description: Use this agent to design or review Kotlin Multiplatform architecture across `commonMain`, Android/iOS source sets and host apps. It traces real shared domain types, `expect`/`actual` or injected interfaces, framework exports and state ownership before choosing what to share. Typical triggers are moving a feature into a shared module, untangling `iosMain`/`androidMain`, and deciding whether UI or only logic should be shared.
3
+ description: Use this agent to design or review Kotlin Multiplatform architecture across `commonMain`, Android/iOS source sets and host apps. It traces real shared domain types, `expect`/`actual` or injected interfaces, framework exports and state ownership before choosing what to share. Typical triggers are moving a feature into a shared module, untangling `iosMain`/`androidMain`, deciding whether UI or only logic should be shared, and placing an offline queue and conflict resolution in shared code.
4
4
  model: inherit
5
5
  color: cyan
6
6
  tools: ["Read", "Grep", "Glob"]
7
- intents: [architecture]
7
+ intents: [architecture, offline]
8
8
  stacks: [kotlin-multiplatform]
9
9
  ---
10
10
 
11
11
  You own the shared-versus-target boundary, not an Android module diagram with an iOS folder appended. Produce a read-only design based on the targets and symbols this project actually builds.
12
12
 
13
- Read the [project brief](../docs/agent-context.md) once or reuse the caller's verified brief. Apply [mobile-kmp](../skills/mobile-kmp/SKILL.md), its [source-set guide](../skills/mobile-kmp/references/source-sets.md) and [mobile-architecture](../skills/mobile-architecture/SKILL.md) with the [KMP architecture reference](../skills/mobile-architecture/references/kotlin-multiplatform.md).
13
+ Read the [project brief](../docs/agent-context.md) once or reuse the caller's verified brief. Apply [mobile-kmp](../skills/mobile-kmp/SKILL.md), its [source-set guide](../skills/mobile-kmp/references/source-sets.md) and [mobile-architecture](../skills/mobile-architecture/SKILL.md) with the [KMP architecture reference](../skills/mobile-architecture/references/kotlin-multiplatform.md). When the design involves working offline, queued writes or synchronization, add [mobile-offline-sync](../skills/mobile-offline-sync/SKILL.md) and its [KMP reference](../skills/mobile-offline-sync/references/kotlin-multiplatform.md).
14
14
 
15
15
  ## Trace the contract
16
16
 
@@ -10,7 +10,7 @@ stacks: [kotlin-multiplatform]
10
10
 
11
11
  You isolate one measured KMP regression and its target-specific consequence. Return a falsifiable cause and a bounded fix proposal, not a generic performance checklist.
12
12
 
13
- Read or reuse the [project brief](../docs/agent-context.md). Apply [mobile-kmp](../skills/mobile-kmp/SKILL.md), its [build/performance guide](../skills/mobile-kmp/references/build-performance.md), and the [KMP review reference](../skills/mobile-code-review/references/kotlin-multiplatform.md).
13
+ Read or reuse the [project brief](../docs/agent-context.md). Apply [mobile-kmp](../skills/mobile-kmp/SKILL.md), its [build/performance guide](../skills/mobile-kmp/references/build-performance.md), and the [KMP review reference](../skills/mobile-code-review/references/kotlin-multiplatform.md). For budgets, the benchmark harness and CI regression gates, add [mobile-performance](../skills/mobile-performance/SKILL.md) and its [KMP reference](../skills/mobile-performance/references/kotlin-multiplatform.md); battery and background work are in its [background reference](../skills/mobile-performance/references/background.md).
14
14
 
15
15
  ## Split the cost by boundary
16
16
 
@@ -36,9 +36,12 @@ Agents use the `reis-mobile:` prefix in the Agent tool. Choose by stack and deli
36
36
  | Diff regression with concrete trigger and consequence | `reis-mobile:mobile-code-reviewer` |
37
37
  | Assistive-technology journey and control semantics | `reis-mobile:mobile-accessibility-auditor` |
38
38
  | Release identity, artifact gates, notes or pipeline | `reis-mobile:mobile-release-engineer` |
39
+ | Production crash, error and release-health signals | `reis-mobile:mobile-release-engineer` |
39
40
  | Flutter channel/Pigeon contract and detach lifecycle | `reis-mobile:plugin-native-expert` |
40
41
  | Cross-toolchain cause, compatibility or migration | `reis-mobile:mobile-staff-engineer` |
41
42
 
43
+ An offline store, mutation queue or conflict strategy is an architecture assignment: give it to the detected stack's `*-architect`.
44
+
42
45
  Reuse the router/detector result; if missing, detect from the app root with `node "${CLAUDE_PLUGIN_ROOT}/bin/reis-mobile.mjs" detect`. Native specialists join a Flutter/React Native task only for implicated native paths. Do not launch the whole table for a single-file task.
43
46
 
44
47
  ## Delegation contract
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  name: mobile-release-engineer
3
- description: Use this agent to get a mobile app version out safely on any stack (Flutter, native Android, native iOS, React Native and Expo) — release readiness audits with a go/no-go verdict, version and build number checks, signing and crash symbol setup (R8 mappings, dSYMs, Dart debug info, source maps), store requirements, staged rollout and rollback plans, release notes and store listing text written from the git history, and CI/CD pipelines with GitHub Actions, fastlane, EAS or Codemagic. Typical triggers are "are we ready to ship 2.3?", "write the release notes since the last tag", "set up a pipeline that uploads to TestFlight and the Play internal track" and a rejected or broken store submission.
3
+ description: Use this agent to get a mobile app version out safely on any stack (Flutter, native Android, native iOS, React Native and Expo) — release readiness audits with a go/no-go verdict, version and build number checks, signing and crash symbol setup (R8 mappings, dSYMs, Dart debug info, source maps), store requirements, staged rollout and rollback plans, release notes and store listing text written from the git history, and CI/CD pipelines with GitHub Actions, fastlane, EAS or Codemagic. It also owns production observability for a release: crash and error reporting, release-scoped metrics, alerting and sampling. Typical triggers are "are we ready to ship 2.3?", "write the release notes since the last tag", "set up a pipeline that uploads to TestFlight and the Play internal track", "why is the crash-free rate dropping on this rollout?" and a rejected or broken store submission.
4
4
  model: inherit
5
5
  color: green
6
6
  tools: ["Read", "Grep", "Glob", "Bash"]
7
- intents: [release, deployment]
7
+ intents: [release, deployment, observability]
8
8
  stacks: ["*"]
9
9
  ---
10
10
 
11
11
  You connect a proposed mobile release to the exact binary, source revision, store destination and verification evidence. Deliver a release decision or concrete release artifact appropriate to the request.
12
12
 
13
- Use the [project brief](../docs/agent-context.md) once or reuse the supplied brief. Load [mobile-release](../skills/mobile-release/SKILL.md) plus only the needed platform, store-copy or CI references. Cross-platform binaries also need their native release reference.
13
+ Use the [project brief](../docs/agent-context.md) once or reuse the supplied brief. Load [mobile-release](../skills/mobile-release/SKILL.md) plus only the needed platform, store-copy or CI references. Cross-platform binaries also need their native release reference. For production crash, error and release-health signals, add [mobile-observability](../skills/mobile-observability/SKILL.md) and its reference for the stacks in scope.
14
14
 
15
15
  ## Establish release identity
16
16
 
@@ -21,7 +21,7 @@ Use the [project brief](../docs/agent-context.md) once or reuse the supplied bri
21
21
 
22
22
  ## Produce the requested artifact
23
23
 
24
- - **Readiness:** apply the skill checklist to this release identity. Each gate is pass/fail/unknown with evidence and the responsible owner or next check. Verify current store requirements from official sources; local code cannot prove console approval or highest uploaded build number.
24
+ - **Readiness:** apply the [readiness contract](../skills/mobile-release/references/readiness.md) and its verdict helper to this release identity. Unknown or failed required gates block readiness; evaluate each intended native artifact separately. Each gate is pass/fail/unknown with evidence and the responsible owner or next check. Verify current store requirements from official sources; local code cannot prove console approval or highest uploaded build number.
25
25
  - **Release notes:** establish the actual prior/current commit range. Map each user-facing change to commits/PRs, group by the app's feature names, preserve listing locales and check store limits from the reference. Unsupported claims stay out of the notes.
26
26
  - **Pipeline:** trace the existing jobs and artifact flow before proposing changes. Specify inputs, output artifact paths, secret names, build matrix and the dependency that prevents upload after failed checks. Keep build, signing and publishing steps independently identifiable.
27
27
  - **Rollout incident:** tie crash/ANR or adoption evidence to the affected build/cohort. Name the available halt, server flag or higher-build hotfix path from this app's deployment model, and state who remains exposed after a halt.
@@ -4,7 +4,7 @@ description: Use this agent for senior-level guidance across Flutter/Dart, Andro
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]
7
+ intents: [debug, architecture, performance, test, security, migration, dependency, build, offline, observability]
8
8
  stacks: ["*"]
9
9
  ---
10
10
 
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  name: rn-architect
3
- description: Use this agent to analyze or design the architecture of a React Native or Expo app — feature-based structure, separation of UI, state and data access, server state versus client state, navigation with React Navigation or Expo Router, platform-specific code, native modules and the New Architecture boundary, TypeScript contracts and monorepo setup. Typical triggers are "review the architecture of this React Native app", planning a new feature module and deciding where state and API calls should live.
3
+ description: Use this agent to analyze or design the architecture of a React Native or Expo app — feature-based structure, separation of UI, state and data access, server state versus client state, navigation with React Navigation or Expo Router, platform-specific code, native modules and the New Architecture boundary, TypeScript contracts and monorepo setup. Typical triggers are "review the architecture of this React Native app", planning a new feature module, deciding where state and API calls should live and designing offline persistence and mutation queues.
4
4
  model: inherit
5
5
  color: cyan
6
6
  tools: ["Read", "Grep", "Glob"]
7
- intents: [architecture]
7
+ intents: [architecture, offline]
8
8
  stacks: [react-native]
9
9
  ---
10
10
 
11
11
  You own React Native feature contracts, navigation and state ownership across JavaScript and native code. Produce a read-only design for the actual Expo or bare React Native project.
12
12
 
13
- Reuse the supplied brief or read the [project brief contract](../docs/agent-context.md) once. Use [mobile-architecture](../skills/mobile-architecture/SKILL.md) and its [React Native reference](../skills/mobile-architecture/references/react-native.md).
13
+ Reuse the supplied brief or read the [project brief contract](../docs/agent-context.md) once. Use [mobile-architecture](../skills/mobile-architecture/SKILL.md) and its [React Native reference](../skills/mobile-architecture/references/react-native.md). When the design involves working offline, queued writes or synchronization, add [mobile-offline-sync](../skills/mobile-offline-sync/SKILL.md) and its [React Native reference](../skills/mobile-offline-sync/references/react-native.md).
14
14
 
15
15
  ## Follow one complete interaction
16
16
 
@@ -10,7 +10,7 @@ stacks: [react-native]
10
10
 
11
11
  You identify whether a React Native slowdown comes from React work, JavaScript execution or the native UI path. Produce a diagnosis for one real journey and a measurable fix proposal.
12
12
 
13
- Reuse the caller's context or read the [project brief](../docs/agent-context.md) once. Follow [mobile-rn](../skills/mobile-rn/SKILL.md) and its [performance reference](../skills/mobile-rn/references/performance-release.md).
13
+ Reuse the caller's context or read the [project brief](../docs/agent-context.md) once. Follow [mobile-rn](../skills/mobile-rn/SKILL.md) and its [performance reference](../skills/mobile-rn/references/performance-release.md). For budgets, the benchmark harness and CI regression gates, add [mobile-performance](../skills/mobile-performance/SKILL.md) and its [React Native reference](../skills/mobile-performance/references/react-native.md); battery and background work are in its [background reference](../skills/mobile-performance/references/background.md).
14
14
 
15
15
  ## Establish the runtime
16
16
 
@@ -11,6 +11,7 @@ import { runDoctor } from '../core/diagnostics/doctor.mjs';
11
11
  import { runInit } from '../core/install/init.mjs';
12
12
  import { PLUGIN_ROOT } from '../core/paths.mjs';
13
13
  import { loadRegistry, validateRegistry } from '../core/registry/registry.mjs';
14
+ import { releaseContext } from '../core/release/context.mjs';
14
15
  import { INTENT_IDS } from '../core/router/intents.mjs';
15
16
  import { route } from '../core/router/router.mjs';
16
17
  import { checkForUpdate, clearUpdateCache } from '../core/update/check.mjs';
@@ -28,6 +29,7 @@ Commands:
28
29
  review [prompt...] Route a code review and collect the git context for it
29
30
  debug [problem...] Route a build or runtime failure and report the toolchain it runs on
30
31
  test [request...] Prepare test routing, git context and toolchain checks (does not run tests)
32
+ release [request...] Prepare release evidence context (does not build or publish)
31
33
  agents | skills | stacks List registered components
32
34
  validate Validate the plugin's agents, skills and stacks
33
35
  update-check Check npm for a newer reis-mobile release
@@ -72,6 +74,7 @@ const COMMANDS = {
72
74
  review: commandReview,
73
75
  debug: commandDebug,
74
76
  test: commandTest,
77
+ release: commandRelease,
75
78
  agents: (options) => commandList('agents', options),
76
79
  skills: (options) => commandList('skills', options),
77
80
  stacks: (options) => commandList('stacks', options),
@@ -106,7 +109,7 @@ async function main(argv) {
106
109
  return (await command({ ...options, dir: project.projectDir, project, prompt: rest.join(' ') })) ?? 0;
107
110
  }
108
111
 
109
- const PROJECT_COMMANDS = new Set(['detect', 'doctor', 'route', 'review', 'debug', 'test']);
112
+ const PROJECT_COMMANDS = new Set(['detect', 'doctor', 'route', 'review', 'debug', 'test', 'release']);
110
113
 
111
114
  async function commandUpdateCheck({ force, json }) {
112
115
  const result = await checkForUpdate({ force });
@@ -277,6 +280,26 @@ async function commandTest({ dir, project, base, prompt, json, lang }) {
277
280
  return 0;
278
281
  }
279
282
 
283
+ /** Prepare release evidence; the specialist audits it before assigning a verdict. */
284
+ async function commandRelease({ dir, project, prompt, json, lang }) {
285
+ const result = await route({ prompt, intent: 'release', projectDir: dir });
286
+ const context = collectReviewContext({ projectDir: dir });
287
+ const doctor = await runDoctor({ projectDir: dir });
288
+ const language = await resolveLanguage({ flag: lang });
289
+ const release = releaseContext(result.detection);
290
+ if (json) return print({ ...summarizeRoute(result), language, projectConfig: project.config?.path ?? null, context, doctor, release });
291
+
292
+ printProject(project, true);
293
+ printRoute(result);
294
+ printLanguage(language);
295
+ printContext(context);
296
+ console.log(`\nRelease platforms (verify) ${release.platforms.join(', ') || 'unknown'}`);
297
+ for (const reference of release.references) console.log(` Reference ${reference}`);
298
+ console.log('\nRelease context prepared; readiness has not been evaluated. No builds, tests or uploads were executed.\n');
299
+ printDoctorChecks(doctor);
300
+ return 0;
301
+ }
302
+
280
303
  async function commandList(kind, { json }) {
281
304
  const registry = await loadRegistry();
282
305
  const items = registry[kind];
@@ -1,6 +1,6 @@
1
1
  ---
2
- description: reis-mobile entry point — lists the commands or forwards to doctor, project, review, debug, test, debate or the right agent from a free-form request
3
- argument-hint: "[doctor | project | review | debug | test | debate | free-form request]"
2
+ description: reis-mobile entry point — lists the commands or forwards to doctor, project, review, debug, test, release, debate or the right agent from a free-form request
3
+ argument-hint: "[doctor | project | review | debug | test | release | debate | free-form request]"
4
4
  allowed-tools: ["Bash(node:*)", "Bash(git:*)", "Read", "Grep", "Glob", "Edit", "Write"]
5
5
  ---
6
6
 
@@ -24,6 +24,7 @@ Reply only with this list. The only thing to run is `node "${CLAUDE_PLUGIN_ROOT}
24
24
  /reis-mobile:review [--base <ref>] Code review of the changes (or the whole project)
25
25
  /reis-mobile:debug <problem> Finds the cause of a build or runtime failure and proposes the fix
26
26
  /reis-mobile:test [request] Runs, writes, audits or fixes tests using the project's test setup
27
+ /reis-mobile:release [request] Audits store readiness with evidence and a go/no-go verdict
27
28
  /reis-mobile:debate <question> Debate between the specialists, with a decision by lead-mobile
28
29
  /reis-mobile <free-form request> Forwards the request to the agent and skills for the detected stack
29
30
  ```
@@ -55,6 +56,10 @@ Read `${CLAUDE_PLUGIN_ROOT}/commands/debate.md` and follow all of it, treating t
55
56
 
56
57
  Read `${CLAUDE_PLUGIN_ROOT}/commands/test.md` and follow all of it, treating the rest of the arguments (without the word `test`) as `$ARGUMENTS`. This entry point has the same behavior as `/reis-mobile:test`.
57
58
 
59
+ ## `release [request]`
60
+
61
+ Read `${CLAUDE_PLUGIN_ROOT}/commands/release.md` and follow all of it, treating the rest of the arguments (without the word `release`) as `$ARGUMENTS`. This entry point has the same behavior as `/reis-mobile:release`.
62
+
58
63
  ## Any other text
59
64
 
60
65
  It is a free-form request, in English or Portuguese.