Mobile specialist for Flutter, React Native, and Swift native iOS development. Use for mobile app, Flutter, Dart, React Native, Swift, SwiftUI, iOS, Android, Riverpod, swift-openapi-generator, and widget work.
65
77%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.agents/skills/oma-mobile/SKILL.mdBuild, modify, and verify cross-platform mobile application features with clean architecture, platform-appropriate UI, state management, performance, and E2E coverage.
resources/execution-protocol.md, examples, snippets, checklist, and screen template| Action | SSL primitive | Evidence |
|---|---|---|
| Inspect mobile architecture | READ | Domain/data/presentation files |
| Select state and platform strategy | SELECT | Riverpod/Bloc and platform constraints |
| Implement mobile code | WRITE | Widgets, screens, providers, clients |
| Validate lifecycle and permissions | VALIDATE | Dispose, permissions, offline behavior |
| Call verification tools | CALL_TOOL | Tests, builds, Maestro |
| Report result | NOTIFY | Final summary |
rg --files
rg "Riverpod|Bloc|Dio|Widget|Maestro|dispose\\(|permission" .Then run the project's mobile verification commands, typically unit/widget tests and Maestro E2E for critical flows.
| Scope | Resource target |
|---|---|
CODEBASE | Mobile source, tests, platform config |
LOCAL_FS | Templates, snippets, resources |
PROCESS | Build, test, emulator, simulator, E2E commands |
NETWORK | Backend APIs when the feature integrates remotely |
dispose() methodClient middleware.@MainActor @Observable view models (Observation framework, iOS 17+) — non-isolated VMs mutating observed state from a Task are a Swift 6 strict-concurrency errorClient from swift-openapi-generator — never hand-roll URLRequest/JSONDecoder for API callsResponseCache actor over hyperoslo/Cache — cache DECODED models (never HTTPBody), serve stale-while-revalidate on reads, invalidate keys on writes; view models depend on a protocol seam, not the concrete service (see variants/swift-ios/snippets.md §10)App/Core/Features/Shared project layout.task {} (auto-cancels on disappear) — never in deinit, which is nonisolated and cannot touch @MainActor state under Swift 6 (isolated deinit requires Swift 6.2+).toolbar(.hidden, for: .navigationBar)) lose it, so register push routes via a swipeBackDestination wrapper, not per-screen (see variants/swift-ios/snippets.md §9)variants/flutter/snippets.md §3, §10)staleTime/gcTime — invalidate affected query keys on every mutation, persist the cache to MMKV for offline; screens consume query/mutation hooks, never call axios directly (see variants/react-native/snippets.md)Follow resources/execution-protocol.md step by step.
Before submitting, run resources/checklist.md.
Vendor-specific execution protocols are injected automatically by oma agent:spawn.
Source files live under ../_shared/runtime/execution-protocols/{vendor}.md.
resources/execution-protocol.mdvariants/swift-ios/snippets.mdvariants/flutter/snippets.mdvariants/react-native/snippets.mdresources/checklist.mdresources/error-playbook.mdresources/tech-stack.mdvariants/swift-ios/tech-stack.mdvariants/flutter/tech-stack.mdvariants/react-native/tech-stack.mdresources/screen-template.dartresources/screen-template.swiftresources/screen-template.tsxvariants/swift-ios/api-template.swiftvariants/flutter/api-template.dartvariants/react-native/api-template.tsvariants/README.md../_shared/core/context-loading.md../_shared/core/clarification-protocol.md../_shared/core/context-budget.md../_shared/core/lessons-learned.md../oma-observability/SKILL.md §Integrations — offline queuing, crash analytics, battery-aware sampling3021301
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.