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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +23 -0
- package/README.md +54 -27
- package/agents/android-architect.md +3 -3
- package/agents/android-performance-engineer.md +1 -1
- package/agents/flutter-architect.md +3 -3
- package/agents/flutter-performance-engineer.md +1 -1
- package/agents/ios-architect.md +3 -3
- package/agents/ios-performance-engineer.md +1 -1
- package/agents/kmp-architect.md +3 -3
- package/agents/kmp-performance-engineer.md +1 -1
- package/agents/lead-mobile.md +3 -0
- package/agents/mobile-release-engineer.md +4 -4
- package/agents/mobile-staff-engineer.md +1 -1
- package/agents/rn-architect.md +3 -3
- package/agents/rn-performance-engineer.md +1 -1
- package/bin/reis-mobile.mjs +24 -1
- package/commands/reis-mobile.md +7 -2
- package/commands/release.md +46 -0
- package/core/release/context.mjs +11 -0
- package/core/router/intents.mjs +15 -0
- package/package.json +1 -1
- package/skills/mobile-accessibility/SKILL.md +3 -0
- package/skills/mobile-accessibility/references/localization.md +77 -0
- package/skills/mobile-observability/SKILL.md +137 -0
- package/skills/mobile-observability/references/android.md +105 -0
- package/skills/mobile-observability/references/flutter.md +86 -0
- package/skills/mobile-observability/references/ios.md +88 -0
- package/skills/mobile-observability/references/kotlin-multiplatform.md +76 -0
- package/skills/mobile-observability/references/react-native.md +62 -0
- package/skills/mobile-offline-sync/SKILL.md +132 -0
- package/skills/mobile-offline-sync/references/android.md +123 -0
- package/skills/mobile-offline-sync/references/flutter.md +103 -0
- package/skills/mobile-offline-sync/references/ios.md +103 -0
- package/skills/mobile-offline-sync/references/kotlin-multiplatform.md +114 -0
- package/skills/mobile-offline-sync/references/react-native.md +108 -0
- package/skills/mobile-performance/SKILL.md +88 -0
- package/skills/mobile-performance/references/android.md +96 -0
- package/skills/mobile-performance/references/background.md +87 -0
- package/skills/mobile-performance/references/flutter.md +101 -0
- package/skills/mobile-performance/references/ios.md +82 -0
- package/skills/mobile-performance/references/kotlin-multiplatform.md +62 -0
- package/skills/mobile-performance/references/react-native.md +85 -0
- package/skills/mobile-release/SKILL.md +11 -22
- package/skills/mobile-release/references/billing.md +92 -0
- package/skills/mobile-release/references/readiness.md +88 -0
- package/skills/mobile-release/scripts/verdict.mjs +59 -0
- package/skills/mobile-security/SKILL.md +3 -0
- 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.
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
47
|
+
### v0.8.0
|
|
48
48
|
|
|
49
49
|
#### Added
|
|
50
50
|
|
|
51
|
-
-
|
|
52
|
-
-
|
|
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
|
-
-
|
|
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` |
|
|
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
|
|
336
|
-
| **Context cost** | Zero | ~4,
|
|
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
|
|
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 `
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
package/agents/ios-architect.md
CHANGED
|
@@ -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
|
|
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
|
|
package/agents/kmp-architect.md
CHANGED
|
@@ -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`,
|
|
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
|
|
package/agents/lead-mobile.md
CHANGED
|
@@ -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
|
|
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
|
|
package/agents/rn-architect.md
CHANGED
|
@@ -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
|
|
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
|
|
package/bin/reis-mobile.mjs
CHANGED
|
@@ -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];
|
package/commands/reis-mobile.md
CHANGED
|
@@ -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.
|