mcpbeat Sign in

Oma Mobile Agent Skill

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.

61k tokens
context cost
the whole folder, loaded on every use
22
files
ships runnable scripts
0
copies elsewhere
how many repositories repackaged it
1201
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/first-fluke/oh-my-agent --skill oma-mobile

The instruction itself

25 sections, as written by the author

Mobile Agent - Cross-Platform Mobile Specialist

Scheduling

Goal

Build, modify, and verify cross-platform mobile application features with clean architecture, platform-appropriate UI, state management, performance, and E2E coverage.

Intent signature

  • User asks for mobile app, Flutter, Dart, React Native, iOS, Android, Riverpod, widgets, camera, GPS, push notifications, or offline-first work.
  • User needs native or cross-platform mobile behavior rather than web frontend work.

When to use

  • Building native mobile applications (iOS + Android)
  • Mobile-specific UI patterns
  • Platform features (camera, GPS, push notifications)
  • Offline-first architecture

When NOT to use

  • Web frontend -> use Frontend Agent
  • Backend APIs -> use Backend Agent

Expected inputs

  • Target screen, widget, feature, platform capability, or mobile flow
  • Existing app architecture, state management pattern, API contract, and platform constraints
  • Test expectations for unit, widget, integration, or Maestro E2E coverage

Expected outputs

  • Mobile code changes in domain, data, presentation, platform, or test files
  • UI aligned with Material Design 3 and iOS HIG as applicable
  • Verification results from mobile checks and critical-flow tests

Dependencies

  • Flutter/Dart or React Native toolchain as detected from the project
  • Riverpod/Bloc, Dio, platform SDKs, and Maestro where applicable
  • resources/execution-protocol.md, examples, snippets, checklist, and screen template

Control-flow features

  • Branches by platform, state management pattern, offline requirement, native permission, and test level
  • Reads and writes mobile codebase files
  • May call build, test, simulator, emulator, or E2E commands

Structural Flow

Entry

  • Identify target platform(s), screen/feature, architecture layer, and state boundary.
  • Inspect existing mobile patterns and dependencies.
  • Determine test level and verification environment.

Scenes

  • PREPARE: Load app architecture, platform constraints, and acceptance criteria.
  • ACQUIRE: Read existing widgets/screens, providers/blocs, API clients, and tests.
  • ACT: Implement mobile UI, state, platform integration, offline handling, and tests.
  • VERIFY: Run relevant unit/widget/integration/E2E checks.
  • FINALIZE: Report behavior, platforms covered, and verification results.

Transitions

  • If business logic is complex, keep it in domain/data layers before presentation.
  • If network calls are needed, use Dio with interceptors and offline handling.
  • If a critical user flow changes, add or update Maestro E2E coverage.
  • If backend contracts are missing, coordinate with backend/API work.

Failure and recovery

  • If platform SDK or emulator is unavailable, report verification limits.
  • If a permission or native capability is missing, add explicit platform configuration or document blocker.
  • If tests fail, fix before handoff or report the failing check.

Exit

  • Success: mobile feature works for target platforms and passes relevant checks.
  • Partial success: platform, simulator, dependency, or verification gaps are explicit.

Logical Operations

Actions

| 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 |

Tools and instruments

  • Flutter/Dart or React Native stack
  • Riverpod/Bloc, Dio, platform SDKs, Maestro
  • Unit, widget, integration, and E2E test commands

Canonical workflow path

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.

Resource scope

| 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 |

Preconditions

  • Target mobile feature and platform scope are identifiable.
  • Required SDKs, permissions, and API contracts are available or assumptions are stated.

Effects and side effects

  • Mutates mobile source, tests, and platform configuration.
  • May affect permissions, app lifecycle, offline data, or performance.

Guardrails

  • Clean Architecture: domain -> data -> presentation
  • Riverpod/Bloc for state management (no raw setState for complex logic)
  • Material Design 3 (Android) + iOS HIG (iOS)
  • All controllers disposed in dispose() method
  • Use the platform transport with auth/retry/logging interception and offline handling: Flutter uses Dio, React Native uses axios behind TanStack Query, and Swift uses generated Client middleware.
  • 60fps target; test on both platforms
  • Use Maestro for E2E testing of critical user flows
  • Swift native: SwiftUI + @MainActor @Observable view models (Observation framework, iOS 17+) — non-isolated VMs mutating observed state from a Task are a Swift 6 strict-concurrency error
  • Swift native: use the generated Client from swift-openapi-generator — never hand-roll URLRequest/JSONDecoder for API calls

10. 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)

References

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.

  • Execution steps: resources/execution-protocol.md
  • Code snippets (Swift): variants/swift-ios/snippets.md
  • Code snippets (Flutter): variants/flutter/snippets.md
  • Code snippets (React Native): variants/react-native/snippets.md
  • Checklist: resources/checklist.md
  • Error recovery: resources/error-playbook.md
  • Tech stack index (all platforms): resources/tech-stack.md
  • Tech stack (Swift): variants/swift-ios/tech-stack.md
  • Tech stack (Flutter): variants/flutter/tech-stack.md
  • Tech stack (React Native): variants/react-native/tech-stack.md
  • Screen template (Flutter): resources/screen-template.dart
  • Screen template (Swift): resources/screen-template.swift
  • Screen template (React Native): resources/screen-template.tsx
  • API service template (Swift): variants/swift-ios/api-template.swift
  • API service template (Flutter): variants/flutter/api-template.dart
  • API service template (React Native): variants/react-native/api-template.ts
  • Variant registry: variants/README.md
  • Context loading: ../_shared/core/context-loading.md
  • Clarification: ../_shared/core/clarification-protocol.md
  • Context budget: ../_shared/core/context-budget.md
  • Lessons learned: ../_shared/core/lessons-learned.md
  • Observability handoff: ../oma-observability/SKILL.md §Integrations — offline queuing, crash analytics, battery-aware sampling

Other skills for the same job

different authors, same section of the catalogue
MCP Builder
by anthropics
vendor ×13

Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).

30k tokens scripts
Changelog Generator
by frostant
×9

Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.

774 tokens
Finishing A Development Branch
by ZhanlinCui
×7

Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup

1k tokens
MCP Builder
by JayZeeDesign
×7

Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).

37k tokens scripts
Vercel React Native Skills
by vercel-labs
vendor ×6

React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.

39k tokens
Vercel React Best Practices
by ratacat
×5

React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.

34k tokens
Next Best Practices
by vercel-labs
vendor ×4

Next.js best practices - file conventions, RSC boundaries, data patterns, async APIs, metadata, error handling, route handlers, image/font optimization, bundling

20k tokens
Using Git Worktrees
by ZhanlinCui
×4

Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification

1k tokens

How to use it

Copy the folder

Take first-fluke/oma-mobile from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

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.