reis-mobile 0.7.3 → 0.9.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 +39 -0
- package/README.md +100 -26
- 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 +3 -3
- 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 +123 -1
- package/commands/consult.md +95 -0
- package/commands/debate.md +15 -11
- package/commands/reis-mobile.md +7 -2
- package/commands/review.md +2 -0
- package/core/config/project.mjs +1 -1
- package/core/diagnostics/doctor.mjs +23 -1
- package/core/providers/catalog.mjs +168 -0
- package/core/providers/consult.mjs +220 -0
- package/core/providers/providers.mjs +156 -0
- package/core/router/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 +2 -1
- package/skills/mobile-release/references/billing.md +92 -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.9.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.9.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.9.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,45 @@ Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). The pr
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.9.0] - 2026-10-13
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- `core/providers/`: the multi-provider layer. Six external providers — the `codex` and `gemini` CLIs plus the OpenAI, Gemini, OpenRouter and Ollama HTTP APIs — described as data (endpoint, credential variables, request shape, model catalog), so adding one touches no command. Status, model and allowlist resolution make no network call: a CLI is found by scanning `PATH`, an HTTP provider by its credential variable.
|
|
12
|
+
- `reis-mobile providers [--all] [--json]` lists every provider with the evidence behind its status (`ready`, `local`, `missing`, `disabled`, `blocked`), its endpoint and the resolved model. `reis-mobile providers --models` asks each provider which models it serves, so no model id is ever shipped as a default.
|
|
13
|
+
- `reis-mobile consult [--providers a,b] [--model <id>] [--file <path>] [--timeout <ms>] <question>` asks the selected providers the same question in parallel. The core performs the call, so no API key passes through the conversation; the question is redacted on the way out and every answer on the way in. Each requested provider is reported with its own typed status — `ok`, `unavailable`, `no-model`, `timeout`, `error` — and the exit code is 1 only when nobody answered.
|
|
14
|
+
- `/reis-mobile:consult [options] <question>`, also reachable as `/reis-mobile consult ...`: routes the question through the stack's specialist, requires its own position first, builds a self-contained briefing in `.reis-mobile/consults/`, consults the providers and then reconciles every outside claim against the code as confirmed with `file:line`, unverifiable or wrong.
|
|
15
|
+
- `providers:` in `.reis-mobile/config.yaml`: the allowlist of external providers a repository accepts, committed with the repository. An absent key allows all, an empty list allows none, and a blocked provider says so instead of failing.
|
|
16
|
+
- `providers.<id>.model` and `providers.<id>.enabled` in `~/.config/reis-mobile/config.json`, with precedence `--model`, then the provider's model variable (`OPENAI_MODEL`, `GEMINI_MODEL`, `OPENROUTER_MODEL`, `OLLAMA_MODEL`), then the config file.
|
|
17
|
+
- `reis-mobile doctor` lists the configured providers under Integrations, with a single informational row when none is configured. It still makes no network call.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- `/reis-mobile:debate --external` selects providers through the core instead of probing with `command -v`, accepts `--providers a,b`, and no longer needs `Bash(codex:*)` or `Bash(gemini:*)`: every provider call goes through the CLI. Behavior without a ready provider is unchanged — the debate carries on with the agents alone.
|
|
22
|
+
- CLI providers are asked for an opinion, not for work: `codex exec` now runs with `--sandbox read-only` and `gemini` with `--approval-mode plan`, both in a temporary working directory that is removed afterwards. The debate's previous invocation granted write access and the user's repository as a workspace, neither of which a second opinion needs.
|
|
23
|
+
- `/reis-mobile:review` points at `/reis-mobile:consult` when a finding should be cross-checked outside the session, and still never sends project context itself.
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- `/reis-mobile:debate --external` could not reach Codex at all on current CLI versions: `codex exec --full-auto` is rejected with `unexpected argument '--full-auto' found`, and the call ran outside a Git repository without `--skip-git-repo-check`. The provider catalog now carries the invocation verified against `codex exec --help`.
|
|
28
|
+
- A failing CLI provider reported its opening banner (`YOLO mode is enabled...`) instead of the cause. The reported line is now the first one that names a failure, falling back to the last line of stderr.
|
|
29
|
+
|
|
30
|
+
## [0.8.0] - 2026-09-23
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
|
|
34
|
+
- `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.
|
|
35
|
+
- `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`).
|
|
36
|
+
- `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).
|
|
37
|
+
- `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`.
|
|
38
|
+
- `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.
|
|
39
|
+
- `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.
|
|
40
|
+
- `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.
|
|
41
|
+
|
|
42
|
+
### Changed
|
|
43
|
+
|
|
44
|
+
- 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.
|
|
45
|
+
|
|
7
46
|
## [0.7.3] - 2026-09-21
|
|
8
47
|
|
|
9
48
|
### 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,12 +44,28 @@ 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.9.0
|
|
48
48
|
|
|
49
49
|
#### Added
|
|
50
50
|
|
|
51
|
-
-
|
|
52
|
-
- `reis-mobile
|
|
51
|
+
- `core/providers/`: the multi-provider layer. Six external providers — the `codex` and `gemini` CLIs plus the OpenAI, Gemini, OpenRouter and Ollama HTTP APIs — described as data (endpoint, credential variables, request shape, model catalog), so adding one touches no command. Status, model and allowlist resolution make no network call: a CLI is found by scanning `PATH`, an HTTP provider by its credential variable.
|
|
52
|
+
- `reis-mobile providers [--all] [--json]` lists every provider with the evidence behind its status (`ready`, `local`, `missing`, `disabled`, `blocked`), its endpoint and the resolved model. `reis-mobile providers --models` asks each provider which models it serves, so no model id is ever shipped as a default.
|
|
53
|
+
- `reis-mobile consult [--providers a,b] [--model <id>] [--file <path>] [--timeout <ms>] <question>` asks the selected providers the same question in parallel. The core performs the call, so no API key passes through the conversation; the question is redacted on the way out and every answer on the way in. Each requested provider is reported with its own typed status — `ok`, `unavailable`, `no-model`, `timeout`, `error` — and the exit code is 1 only when nobody answered.
|
|
54
|
+
- `/reis-mobile:consult [options] <question>`, also reachable as `/reis-mobile consult ...`: routes the question through the stack's specialist, requires its own position first, builds a self-contained briefing in `.reis-mobile/consults/`, consults the providers and then reconciles every outside claim against the code as confirmed with `file:line`, unverifiable or wrong.
|
|
55
|
+
- `providers:` in `.reis-mobile/config.yaml`: the allowlist of external providers a repository accepts, committed with the repository. An absent key allows all, an empty list allows none, and a blocked provider says so instead of failing.
|
|
56
|
+
- `providers.<id>.model` and `providers.<id>.enabled` in `~/.config/reis-mobile/config.json`, with precedence `--model`, then the provider's model variable (`OPENAI_MODEL`, `GEMINI_MODEL`, `OPENROUTER_MODEL`, `OLLAMA_MODEL`), then the config file.
|
|
57
|
+
- `reis-mobile doctor` lists the configured providers under Integrations, with a single informational row when none is configured. It still makes no network call.
|
|
58
|
+
|
|
59
|
+
#### Changed
|
|
60
|
+
|
|
61
|
+
- `/reis-mobile:debate --external` selects providers through the core instead of probing with `command -v`, accepts `--providers a,b`, and no longer needs `Bash(codex:*)` or `Bash(gemini:*)`: every provider call goes through the CLI. Behavior without a ready provider is unchanged — the debate carries on with the agents alone.
|
|
62
|
+
- CLI providers are asked for an opinion, not for work: `codex exec` now runs with `--sandbox read-only` and `gemini` with `--approval-mode plan`, both in a temporary working directory that is removed afterwards. The debate's previous invocation granted write access and the user's repository as a workspace, neither of which a second opinion needs.
|
|
63
|
+
- `/reis-mobile:review` points at `/reis-mobile:consult` when a finding should be cross-checked outside the session, and still never sends project context itself.
|
|
64
|
+
|
|
65
|
+
#### Fixed
|
|
66
|
+
|
|
67
|
+
- `/reis-mobile:debate --external` could not reach Codex at all on current CLI versions: `codex exec --full-auto` is rejected with `unexpected argument '--full-auto' found`, and the call ran outside a Git repository without `--skip-git-repo-check`. The provider catalog now carries the invocation verified against `codex exec --help`.
|
|
68
|
+
- A failing CLI provider reported its opening banner (`YOLO mode is enabled...`) instead of the cause. The reported line is now the first one that names a failure, falling back to the last line of stderr.
|
|
53
69
|
|
|
54
70
|
<!-- reis-mobile:latest-release:end -->
|
|
55
71
|
|
|
@@ -68,6 +84,8 @@ A mobile app is not a generic project. A code review that does not know about `B
|
|
|
68
84
|
|
|
69
85
|
| Version | Highlights |
|
|
70
86
|
|--------|-----------|
|
|
87
|
+
| **v0.7.3** | `/reis-mobile:release` audits store readiness per target, with evidence gates and a GO / GO WITH RISKS / NO-GO verdict. |
|
|
88
|
+
| **v0.7.2** | Kotlin Multiplatform specialists and a `mobile-kmp` skill; `/reis-mobile:project` records the app's real objects. |
|
|
71
89
|
| **v0.7.1** | Update notices on Claude Code and Codex session start, plus a single-source version and CI-driven release process. |
|
|
72
90
|
| **v0.7.0** | `/reis-mobile:test`, native XCTest and Espresso guidance, and project-specific contracts for the 18 specialists. |
|
|
73
91
|
| **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. |
|
|
@@ -236,7 +254,8 @@ After editing agents, skills or commands, restart Claude Code or Codex.
|
|
|
236
254
|
/reis-mobile:test audit Espresso checkout tests # Reviews assertions and synchronization without editing
|
|
237
255
|
/reis-mobile:release audit both stores for the production variant # Evidence-backed readiness, read-only
|
|
238
256
|
/reis-mobile:debate Riverpod or BLoC in this app? # Debate between the specialists, with a decision by lead-mobile
|
|
239
|
-
/reis-mobile:debate --rounds 3 --external ... # More rounds; --external adds
|
|
257
|
+
/reis-mobile:debate --rounds 3 --external ... # More rounds; --external adds every configured external provider
|
|
258
|
+
/reis-mobile:consult should we move this to a native module? # Second opinion from OpenAI, Gemini, OpenRouter, Ollama or the CLIs
|
|
240
259
|
```
|
|
241
260
|
|
|
242
261
|
### Debug
|
|
@@ -288,7 +307,50 @@ Participants vary along two axes at once. The **role** gives each one a differen
|
|
|
288
307
|
|
|
289
308
|
It is expensive: several agents over two rounds. Use it for architecture decisions with a real trade-off — *migrate to Riverpod*, *offline-first with Firestore or a local cache*, *native plugin or an off-the-shelf package* — and not for questions with a single answer, where `/reis-mobile <request>` solves it for less.
|
|
290
309
|
|
|
291
|
-
With `--external`, the command
|
|
310
|
+
With `--external`, the command asks the core which providers are ready — the `codex` and `gemini` CLIs, OpenAI, Gemini, OpenRouter, Ollama — and carries on without them if none is. `--providers a,b` picks them explicitly. External providers do not know the project and do not have the plugin skills: they come in as an outside opinion, checked against the code before the synthesis.
|
|
311
|
+
|
|
312
|
+
### External providers
|
|
313
|
+
|
|
314
|
+
`/reis-mobile:consult <question>` is the debate's external axis on its own: it routes the question, forms its own position, builds a self-contained briefing with the relevant code excerpts, sends it to the configured providers and then reconciles every outside claim against your code — confirmed with `file:line`, unverifiable, or wrong with the evidence. Rounds and agents cost nothing here, so it fits a question a single outside opinion settles.
|
|
315
|
+
|
|
316
|
+
The core makes the call, never the model, so **no API key passes through the conversation**. The question is masked by [`redact.mjs`](core/security/redact.mjs) on the way out and every answer on the way in.
|
|
317
|
+
|
|
318
|
+
| Provider | Needs | Model from |
|
|
319
|
+
|---|---|---|
|
|
320
|
+
| `codex` | the `codex` CLI on `PATH` | its own configuration |
|
|
321
|
+
| `gemini-cli` | the `gemini` CLI on `PATH` | its own configuration |
|
|
322
|
+
| `openai` | `OPENAI_API_KEY` | `OPENAI_MODEL` |
|
|
323
|
+
| `gemini` | `GEMINI_API_KEY` or `GOOGLE_API_KEY` | `GEMINI_MODEL` |
|
|
324
|
+
| `openrouter` | `OPENROUTER_API_KEY` | `OPENROUTER_MODEL` |
|
|
325
|
+
| `ollama` | a server at `OLLAMA_HOST` (default `http://127.0.0.1:11434`) | `OLLAMA_MODEL` |
|
|
326
|
+
|
|
327
|
+
```bash
|
|
328
|
+
reis-mobile providers --all # What each provider needs, with no network call
|
|
329
|
+
reis-mobile providers --models --providers openai # Ask the provider which models it serves
|
|
330
|
+
reis-mobile consult --providers openai,ollama -- "is a native module justified here?"
|
|
331
|
+
reis-mobile consult --file briefing.md --timeout 300000
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
reis-mobile ships **no default model id**: a hardcoded one is wrong the day the provider retires it. Set `OPENAI_MODEL` and friends, pass `--model`, or write it once in `~/.config/reis-mobile/config.json`:
|
|
335
|
+
|
|
336
|
+
```json
|
|
337
|
+
{
|
|
338
|
+
"providers": {
|
|
339
|
+
"openai": { "model": "<a model from reis-mobile providers --models>" },
|
|
340
|
+
"openrouter": { "enabled": false }
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
A team decides which providers may receive repository context, committed with the repository:
|
|
346
|
+
|
|
347
|
+
```yaml
|
|
348
|
+
# .reis-mobile/config.yaml
|
|
349
|
+
providers:
|
|
350
|
+
- ollama # only this one; an empty list allows none, no key allows all
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
`reis-mobile providers` and `/reis-mobile:doctor` make no network call: a provider is `ready` because its executable is on `PATH` or its credential is in the environment, never because it answered. `ollama` shows as `local` until a request proves the server is up.
|
|
292
354
|
|
|
293
355
|
Not sure what the router will pick? Ask the CLI:
|
|
294
356
|
|
|
@@ -315,6 +377,7 @@ The router never invents a specialist: if no agent serves the intent, it warns y
|
|
|
315
377
|
| I want to... | Use | Status |
|
|
316
378
|
|----------|-----|--------|
|
|
317
379
|
| Know if my environment is ready to build | `/reis-mobile:doctor` | ✅ |
|
|
380
|
+
| Cross-check a decision with a model outside this session | `/reis-mobile:consult` | ✅ |
|
|
318
381
|
| Review a PR or my changes | `/reis-mobile:review` | ✅ |
|
|
319
382
|
| Audit an entire Flutter project | `/reis-mobile:review` with no pending changes | ✅ |
|
|
320
383
|
| Find out a project's stack | `reis-mobile detect` | ✅ |
|
|
@@ -326,6 +389,9 @@ The router never invents a specialist: if no agent serves the intent, it warns y
|
|
|
326
389
|
| Build a plugin or debug MethodChannel/EventChannel | agent `plugin-native-expert` | ✅ |
|
|
327
390
|
| Audit a screen for TalkBack, VoiceOver, touch targets and text scaling | agent `mobile-accessibility-auditor` | ✅ |
|
|
328
391
|
| Check release readiness, write release notes or set up CI/CD | agent `mobile-release-engineer` | ✅ |
|
|
392
|
+
| Set startup, frame, memory and battery budgets and guard them in CI | skill `mobile-performance` | ✅ |
|
|
393
|
+
| Make the app work offline, queue writes and resolve conflicts | skill `mobile-offline-sync` | ✅ |
|
|
394
|
+
| Get usable crashes, errors, traces and release-health alerts in production | skill `mobile-observability` | ✅ |
|
|
329
395
|
| Full audit with several specialists | agent `lead-mobile` | ✅ |
|
|
330
396
|
| Decide between two architectures with a real trade-off | `/reis-mobile:debate` | ✅ |
|
|
331
397
|
| Dedicated test command (including XCTest and Espresso) | `/reis-mobile:test` | ✅ |
|
|
@@ -341,8 +407,8 @@ The router never invents a specialist: if no agent serves the intent, it warns y
|
|
|
341
407
|
| **Project context** | You explain the stack | Deterministic detection of stack, platform and variant |
|
|
342
408
|
| **Review** | Generic | Mobile checklists: lifecycle, `BuildContext`, MASVS, manifest, ATS |
|
|
343
409
|
| **Secrets in the diff** | Sent as they are | Masked before reaching the model |
|
|
344
|
-
| **Specialists** | None | 21 agents and
|
|
345
|
-
| **Context cost** | Zero | ~4,
|
|
410
|
+
| **Specialists** | None | 21 agents and 17 mobile skills |
|
|
411
|
+
| **Context cost** | Zero | ~4,700 fixed tokens (agent and skill descriptions), no hooks |
|
|
346
412
|
| **Best for** | General tasks | Teams and developers working on mobile apps |
|
|
347
413
|
|
|
348
414
|
**In short:** Claude Code already knows how to code. reis-mobile makes it look at what matters in a mobile app.
|
|
@@ -385,28 +451,28 @@ For domain knowledge that code cannot reveal, optionally commit `.reis-mobile/pr
|
|
|
385
451
|
| Agent | Stack | Triggered for | What it does |
|
|
386
452
|
|-------|-------|---------------|-----------|
|
|
387
453
|
| `mobile-code-reviewer` | all | review | Review with `file:line` evidence, focused on what breaks in production |
|
|
388
|
-
| `flutter-architect` | Flutter | architecture | Layers, feature-first, coupling, misplaced logic, refactoring plan |
|
|
454
|
+
| `flutter-architect` | Flutter | architecture, offline | Layers, feature-first, coupling, misplaced logic, refactoring plan |
|
|
389
455
|
| `flutter-performance-engineer` | Flutter | performance | Rebuilds, jank, lists, leaks, paint, startup, with a score and top 3 fixes |
|
|
390
456
|
| `flutter-test-engineer` | Flutter | test | Unit, BLoC/Cubit, widget and integration, coverage audit and fragile tests |
|
|
391
|
-
| `android-architect` | Android | architecture | UI, domain and data layers, Gradle modules, ViewModel and DI boundaries |
|
|
457
|
+
| `android-architect` | Android | architecture, offline | UI, domain and data layers, Gradle modules, ViewModel and DI boundaries |
|
|
392
458
|
| `android-performance-engineer` | Android | performance | Compose recomposition, lists, ANRs, startup, leaks, app size |
|
|
393
459
|
| `android-test-engineer` | Android | test | ViewModel and coroutine tests, Compose and Espresso UI tests, flaky tests |
|
|
394
|
-
| `ios-architect` | iOS | architecture | SwiftUI and UIKit structure, packages, navigation, concurrency boundaries |
|
|
460
|
+
| `ios-architect` | iOS | architecture, offline | SwiftUI and UIKit structure, packages, navigation, concurrency boundaries |
|
|
395
461
|
| `ios-performance-engineer` | iOS | performance | Hangs, SwiftUI updates, lists, launch time, retain cycles, memory |
|
|
396
462
|
| `ios-test-engineer` | iOS | test | Swift Testing and XCTest unit tests, async code, XCUITest flows |
|
|
397
|
-
| `rn-architect` | React Native | architecture | Feature structure, server vs client state, navigation, native modules |
|
|
463
|
+
| `rn-architect` | React Native | architecture, offline | Feature structure, server vs client state, navigation, native modules |
|
|
398
464
|
| `rn-performance-engineer` | React Native | performance | Re-renders, lists, JavaScript thread, animations, startup, bundle size |
|
|
399
465
|
| `rn-test-engineer` | React Native | test | Jest, React Native Testing Library, native module mocks, Detox or Maestro |
|
|
400
|
-
| `kmp-architect` | Kotlin Multiplatform | architecture | Shared source-set ownership, Android/iOS callers and Swift-facing contracts |
|
|
466
|
+
| `kmp-architect` | Kotlin Multiplatform | architecture, offline | Shared source-set ownership, Android/iOS callers and Swift-facing contracts |
|
|
401
467
|
| `kmp-performance-engineer` | Kotlin Multiplatform | performance | Shared Kotlin cost versus Android/iOS host traces and bridge overhead |
|
|
402
468
|
| `kmp-test-engineer` | Kotlin Multiplatform | test | `commonTest`, target tests and Android/iOS host coverage |
|
|
403
469
|
| `mobile-accessibility-auditor` | all | accessibility | Screen reader labels, roles and states, touch targets, text scaling, focus and announcements, with fixes per platform |
|
|
404
|
-
| `mobile-release-engineer` | all | release, deployment | Go/no-go readiness, versions and signing, crash symbols, release notes and store copy, CI/CD, staged rollout |
|
|
405
|
-
| `mobile-staff-engineer` | all | debug, architecture, performance, test, security, migration, dependency, build | Cross-toolchain diagnosis and migrations when no stack specialist owns the intent |
|
|
470
|
+
| `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 |
|
|
471
|
+
| `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 |
|
|
406
472
|
| `plugin-native-expert` | Flutter | on demand | MethodChannel, EventChannel, Pigeon and Kotlin/Swift bridges, threading and lifecycle |
|
|
407
473
|
| `lead-mobile` | all | on demand | Coordinates the other agents and consolidates a single action plan |
|
|
408
474
|
|
|
409
|
-
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
|
|
475
|
+
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`.
|
|
410
476
|
|
|
411
477
|
### Skills
|
|
412
478
|
|
|
@@ -418,9 +484,12 @@ Every skill starts with `mobile-`. **Topic** skills cover every stack with one r
|
|
|
418
484
|
| `mobile-code-review` | Review process and checklists | review, performance | Flutter (PR review, widgets, project audit, static analysis), Android, iOS, React Native, KMP |
|
|
419
485
|
| `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 |
|
|
420
486
|
| `mobile-test` | Unit, UI, integration and end-to-end tests | test | Flutter (widget, integration, Patrol, mocks, coverage), Android, iOS, React Native, KMP |
|
|
421
|
-
| `mobile-security` | OWASP MASVS security checks | review, security, release | Flutter (token storage), Android (intents), iOS, React Native, KMP |
|
|
422
|
-
| `mobile-accessibility` | Screen readers, touch targets, text scaling, contrast | accessibility | Flutter (Semantics), Android (Compose and Views), iOS (SwiftUI and UIKit), React Native, KMP |
|
|
423
|
-
| `mobile-release` | Release readiness, store copy and CI/CD | release, deployment | Flutter, Android, iOS, React Native, KMP, release notes and store listing, CI/CD |
|
|
487
|
+
| `mobile-security` | OWASP MASVS security checks | review, security, release | Flutter (token storage), Android (intents), iOS, React Native, KMP, OAuth/OIDC and PKCE |
|
|
488
|
+
| `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 |
|
|
489
|
+
| `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 |
|
|
490
|
+
| `mobile-performance` | Startup, rendering, memory, battery, app size and regression gates | performance | Flutter, Android, iOS, React Native, KMP, background execution and battery |
|
|
491
|
+
| `mobile-offline-sync` | Local store, outbox, idempotency, conflict resolution, reconnection | offline | Flutter, Android, iOS, React Native, KMP |
|
|
492
|
+
| `mobile-observability` | Crashes, errors, breadcrumbs, traces, alerts, sampling and privacy | observability | Flutter, Android, iOS, React Native, KMP |
|
|
424
493
|
| `mobile-firebase` | Firebase setup and 13 products | — | Flutter, Android, iOS, React Native, KMP; check installed SDK support |
|
|
425
494
|
| `mobile-flutter` | Flutter and Dart specifics | review, performance, accessibility, migration | UI and navigation, data, native code, performance, accessibility and i18n, Dart, setup |
|
|
426
495
|
| `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 |
|
|
@@ -437,15 +506,15 @@ About 85 guides come from [flutter/skills](https://github.com/flutter/skills), [
|
|
|
437
506
|
|
|
438
507
|
## Trust, security and limits
|
|
439
508
|
|
|
440
|
-
**Read-only CLI context.** `doctor`, `detect`, `route`, `review`, `test` and `
|
|
509
|
+
**Read-only CLI context.** `doctor`, `detect`, `route`, `review`, `test`, `release`, `providers` and `consult` do not modify your project. `/reis-mobile:release` inspects existing release evidence and remains read-only unless execution is explicitly requested. The `/reis-mobile:test` slash command can write or fix tests and execute runners when requested. `/reis-mobile:project` writes only the optional project profile. The `/reis-mobile:review` and `/reis-mobile:debate` commands instruct the model not to edit app code; the debate writes its rounds to `.reis-mobile/debates/` and a consult its briefing to `.reis-mobile/consults/`.
|
|
441
510
|
|
|
442
511
|
**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).
|
|
443
512
|
|
|
444
|
-
**No telemetry.** `detect`, `doctor`, `route`, `review`, `debug` and `
|
|
513
|
+
**No telemetry.** `detect`, `doctor`, `route`, `review`, `debug`, `test` and `providers` make no network calls (`providers --models` and `consult` do, by request). The update hook and `update-check` request the public npm package metadata; they send no project files or identifiers. Installation downloads the package and registers the plugin. The Google Play policy guide in `mobile-android` runs Python scripts that download your app's public Google Play listing when the model uses it. The AI analysis uses the model of the session you are working in, such as Claude Code or Codex.
|
|
445
514
|
|
|
446
|
-
**Exception: `/reis-mobile:debate --external
|
|
515
|
+
**Exception: external providers.** Two workflows, and only these two, send project context to a third party: `/reis-mobile:debate --external` and `/reis-mobile:consult`. Both state which providers receive it, and both are opt-in — no other command calls a provider. What leaves is the briefing, including the code excerpts you include; each provider has its own data policy. The question and every answer pass through `redact.mjs`, which is a protection layer and not a guarantee: read the briefing before sending it. API keys are read from the environment by the CLI and never enter the conversation, and `providers:` in `.reis-mobile/config.yaml` lets a team restrict which providers a repository allows. CLI providers (`codex`, `gemini-cli`) are asked for an opinion, not for work: they run in read-only mode (`codex exec --sandbox read-only`, `gemini --approval-mode plan`) inside a temporary directory, never in your repository.
|
|
447
516
|
|
|
448
|
-
**Context cost.** Claude Code loads the descriptions of 21 agents and
|
|
517
|
+
**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.
|
|
449
518
|
|
|
450
519
|
**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.
|
|
451
520
|
|
|
@@ -472,9 +541,10 @@ About 85 guides come from [flutter/skills](https://github.com/flutter/skills), [
|
|
|
472
541
|
| v0.6.0 | Accessibility auditor and release engineer agents, `mobile-accessibility` and `mobile-release` skills, ANR, memory leak and deep link debugging guides | ✅ |
|
|
473
542
|
| v0.7.0 | `/reis-mobile:test`, native tests (XCTest, Espresso) and project-specific specialist contracts | ✅ |
|
|
474
543
|
| v0.7.1 | Update notices, single-source version and release automation | ✅ |
|
|
475
|
-
|
|
|
476
|
-
| v0.
|
|
477
|
-
| v0.
|
|
544
|
+
| v0.7.3 | `/reis-mobile:release` with per-target evidence, required gates and deterministic readiness verdicts (previously planned for v0.8.0) | ✅ |
|
|
545
|
+
| 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 | ✅ |
|
|
546
|
+
| v0.9.0 | Multi-provider layer (OpenAI, Gemini, OpenRouter, Ollama and the Codex/Gemini CLIs), `reis-mobile providers`, `reis-mobile consult` and `/reis-mobile:consult` — previously planned for v0.10.0 | ✅ |
|
|
547
|
+
| v0.10.0 | MCP server | ⏳ |
|
|
478
548
|
| v1.0.0 | First stable version: Flutter, Android, iOS and React Native | ⏳ |
|
|
479
549
|
|
|
480
550
|
---
|
|
@@ -484,6 +554,9 @@ About 85 guides come from [flutter/skills](https://github.com/flutter/skills), [
|
|
|
484
554
|
**Do I need Flutter, Xcode or the Android SDK installed?**
|
|
485
555
|
Not for the review, which only reads code. `/reis-mobile:doctor` shows what is missing in case you want to build.
|
|
486
556
|
|
|
557
|
+
**Do I need an API key?**
|
|
558
|
+
No. Everything except `/reis-mobile:consult` and `/reis-mobile:debate --external` runs on the model of your session. Those two use whatever you have configured — a `codex` or `gemini` CLI already on your machine counts, and `ollama` keeps the question on localhost. `reis-mobile providers --all` shows what each one still needs.
|
|
559
|
+
|
|
487
560
|
**My app lives inside a monorepo.**
|
|
488
561
|
Commit a `.reis-mobile/config.yaml` at the repository root pointing at the app:
|
|
489
562
|
|
|
@@ -528,6 +601,7 @@ Questions: [Discussions](https://github.com/wrsilva/reis-mobile/discussions). Wh
|
|
|
528
601
|
- [Architecture](ARCHITECTURE.md): modules, detection, routing and the agent and skill contract
|
|
529
602
|
- [AGENTS.md](AGENTS.md): rules for whoever (or whichever AI) contributes to the repository
|
|
530
603
|
- [Contributing](CONTRIBUTING.md)
|
|
604
|
+
- [Releasing](docs/releasing.md): how a version is cut, what is generated and what to do when the pipeline fails
|
|
531
605
|
- [Code of Conduct](CODE_OF_CONDUCT.md)
|
|
532
606
|
- [Support](SUPPORT.md)
|
|
533
607
|
- [Security](SECURITY.md)
|
|
@@ -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
|
|
|
@@ -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
|
|