first-fluke/oma-mobile
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.
npx skills add https://github.com/first-fluke/oh-my-agent --skill oma-mobile
Build, 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 calls10. Swift native: cache API responses at the Repository layer via a ResponseCache 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)
11. Swift native: follow App/Core/Features/Shared project layout
12. Swift native: iOS Human Interface Guidelines for all UI decisions
13. Swift native: XCTest or Swift Testing for units, XCUITest for critical flows; cancel work via structured .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+)
14. Swift native: restore edge swipe-back at the route layer — nav-bar-hidden screens (.toolbar(.hidden, for: .navigationBar)) lose it, so register push routes via a swipeBackDestination wrapper, not per-screen (see variants/swift-ios/snippets.md §9)
15. Flutter: mandate a repository-layer offline-first cache (Drift) — read cached entities then revalidate (stale-while-revalidate), invalidate/refresh affected rows on every write; cache decoded entities at the data layer, never at the Dio transport (see variants/flutter/snippets.md §3, §10)
16. React Native: server state goes through TanStack Query (the repository-layer cache) with explicit 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 samplingTake first-fluke/oma-mobile from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.