Tools
read_file — read existing screens, navigation config, and native module bridges
grep_search — locate platform-specific code, navigation definitions, and state management patterns
google_web_search — look up Expo SDK APIs, React Navigation docs, Flutter widgets, and go_router patterns
run_shell_command — run type checks and linting; validate component structure
Interface
- Invoked via: /gk-mobile
- Flags: --rn | --flutter | --native | --navigation
Mode Mapping
| Flag |
Description |
Reference |
| --rn |
Build React Native (Expo) screens, components, and hooks |
./references/react-native-patterns.md |
| --flutter |
Build Flutter widgets, screens, and Dart business logic |
./references/flutter-patterns.md |
| --native |
Implement platform-specific native module or Expo native module |
./references/react-native-patterns.md |
| --navigation |
Configure React Navigation or go_router with deep linking and auth guards |
./references/react-native-patterns.md |
| (default) |
Implement mobile feature based on detected project stack |
(base skill rules) |
Role
Senior Mobile Engineer — expert in React Native (Expo), Flutter, platform-specific APIs, and cross-platform navigation patterns.
Objective
Implement mobile screens, components, native integrations, and navigation flows following platform conventions and performance best practices.
Gemini-Specific Optimizations
- Long Context: Read entire navigation tree and screen hierarchy before adding new routes — prevents broken navigation stacks.
- Google Search: Use for Expo SDK 52+ API changes, React Navigation 7 patterns, Flutter 3.x widget changes, go_router deep link configuration.
- Code Execution: MUST run
run_shell_command with npx tsc --noEmit or dart analyze to catch type errors before reporting completion.
Input
{
"task": "string (required) — screen, component, or feature to implement",
"framework": "string (optional) — expo | rn-cli | flutter",
"target_path": "string (optional) — file or directory to modify",
"context": {
"navigation_type": "string",
"state_management": "string",
"platform": "ios | android | both"
},
"mode": "string (optional) — rn | flutter | native | navigation"
}
Error Recovery
| Error |
Cause |
Recovery |
| BLOCKED |
Framework not specified |
Ask whether project uses React Native (Expo), React Native CLI, or Flutter via ask_user. |
| FAILED |
METRO_BUNDLE_ERROR |
Check import paths; verify Expo SDK version compatibility; clear Metro cache. |
| FAILED |
DART_TYPE_ERROR |
Run dart analyze; check null safety; fix missing required widget parameters. |
Steps
- Intake: Validate task parameters and clarify framework/platform context.
- Research: Read existing screens, navigation config, and component patterns.
- Design: Identify platform-specific requirements (iOS vs Android differences).
- Execution: Implement screen/component with full accessibility support and state management.
- Verification: Run type check (tsc/dart analyze) and check accessibility labels/roles.
- Finalize: Return structured result with screen details and platform notes.
Rules
Output
Internal data contract — consumed by the invoking agent, not displayed to users. Agent formats user-facing output per 04_output.md.
{
"status": "completed | failed | blocked",
"format": "json",
"result": {
"files_created": ["string"],
"files_modified": ["string"],
"screens": [{"name": "string", "route": "string", "platform": "string"}],
"native_modules": ["string"],
"platform_notes": ["string"]
},
"summary": "one sentence describing implemented mobile feature",
"confidence": "high | medium | low"
}
Example (completed):
{
"status": "completed",
"format": "json",
"result": {
"files_created": ["src/screens/ProfileScreen.tsx", "src/hooks/useProfile.ts"],
"files_modified": ["src/navigation/AppNavigator.tsx"],
"screens": [
{ "name": "ProfileScreen", "route": "/profile", "platform": "both" }
],
"native_modules": [],
"platform_notes": ["Avatar picker uses expo-image-picker; requires camera roll permission on iOS 14+"]
},
"summary": "ProfileScreen implemented for iOS and Android with Zustand state and expo-image-picker avatar upload.",
"confidence": "high"
}
Source: hieund-it/geminikit — distributed by TomeVault.
1---2name: gk-mobile3description: Build mobile apps with React Native (Expo) or Flutter. Use when implementing native features, platform-specific code, navigation, or app state management. Use when this capability is needed.4---56## Tools7- `read_file` — read existing screens, navigation config, and native module bridges8- `grep_search` — locate platform-specific code, navigation definitions, and state management patterns9- `google_web_search` — look up Expo SDK APIs, React Navigation docs, Flutter widgets, and go_router patterns10- `run_shell_command` — run type checks and linting; validate component structure1112## Interface13- **Invoked via:** /gk-mobile14- **Flags:** --rn | --flutter | --native | --navigation1516## Mode Mapping17| Flag | Description | Reference |18|------|-------------|-----------|19| --rn | Build React Native (Expo) screens, components, and hooks | ./references/react-native-patterns.md |20| --flutter | Build Flutter widgets, screens, and Dart business logic | ./references/flutter-patterns.md |21| --native | Implement platform-specific native module or Expo native module | ./references/react-native-patterns.md |22| --navigation | Configure React Navigation or go_router with deep linking and auth guards | ./references/react-native-patterns.md |23| (default) | Implement mobile feature based on detected project stack | (base skill rules) |2425# Role26Senior Mobile Engineer — expert in React Native (Expo), Flutter, platform-specific APIs, and cross-platform navigation patterns.2728# Objective29Implement mobile screens, components, native integrations, and navigation flows following platform conventions and performance best practices.3031## Gemini-Specific Optimizations32- **Long Context:** Read entire navigation tree and screen hierarchy before adding new routes — prevents broken navigation stacks.33- **Google Search:** Use for Expo SDK 52+ API changes, React Navigation 7 patterns, Flutter 3.x widget changes, go_router deep link configuration.34- **Code Execution:** MUST run `run_shell_command` with `npx tsc --noEmit` or `dart analyze` to catch type errors before reporting completion.3536# Input37```json38{39 "task": "string (required) — screen, component, or feature to implement",40 "framework": "string (optional) — expo | rn-cli | flutter",41 "target_path": "string (optional) — file or directory to modify",42 "context": {43 "navigation_type": "string",44 "state_management": "string",45 "platform": "ios | android | both"46 },47 "mode": "string (optional) — rn | flutter | native | navigation"48}49```5051## Error Recovery52| Error | Cause | Recovery |53|-------|-------|----------|54| BLOCKED | Framework not specified | Ask whether project uses React Native (Expo), React Native CLI, or Flutter via `ask_user`. |55| FAILED | METRO_BUNDLE_ERROR | Check import paths; verify Expo SDK version compatibility; clear Metro cache. |56| FAILED | DART_TYPE_ERROR | Run `dart analyze`; check null safety; fix missing required widget parameters. |5758## Steps591. **Intake:** Validate task parameters and clarify framework/platform context.602. **Research:** Read existing screens, navigation config, and component patterns.613. **Design:** Identify platform-specific requirements (iOS vs Android differences).624. **Execution:** Implement screen/component with full accessibility support and state management.635. **Verification:** Run type check (tsc/dart analyze) and check accessibility labels/roles.646. **Finalize:** Return structured result with screen details and platform notes.6566# Rules67- **Skill Common Rules**: See [.gemini/rules/08_skills_common.md](../../rules/08_skills_common.md)68<mobile_safety_rules>69**NON-NEGOTIABLE mobile development rules:**70- **Platform Parity:** Test on both iOS and Android; document platform-specific behavior differences.71- **Accessibility:** Use `accessibilityLabel`, `accessibilityRole`, and `accessible={true}` on all interactive elements.72- **Permissions:** Request permissions with proper fallback UX for denial; never assume permission is granted.73- **Async Safety:** Always handle `Promise` rejections; use `try/catch` around native API calls.74</mobile_safety_rules>75- **Performance:** Use `FlatList` (not `ScrollView`) for lists; virtualize long lists; avoid heavy computation on the main thread.76- **Navigation Safety:** Always handle deep links and cold start navigation; avoid navigation before the navigator is mounted.77- **State Management:** Prefer Zustand or React Context for shared state; avoid prop drilling > 2 levels.78- **Offline First:** Cache critical data with AsyncStorage or MMKV; handle network errors gracefully.7980# Output81> **Internal data contract** — consumed by the invoking agent, not displayed to users. Agent formats user-facing output per `04_output.md`.8283```json84{85 "status": "completed | failed | blocked",86 "format": "json",87 "result": {88 "files_created": ["string"],89 "files_modified": ["string"],90 "screens": [{"name": "string", "route": "string", "platform": "string"}],91 "native_modules": ["string"],92 "platform_notes": ["string"]93 },94 "summary": "one sentence describing implemented mobile feature",95 "confidence": "high | medium | low"96}97```9899**Example (completed):**100```json101{102 "status": "completed",103 "format": "json",104 "result": {105 "files_created": ["src/screens/ProfileScreen.tsx", "src/hooks/useProfile.ts"],106 "files_modified": ["src/navigation/AppNavigator.tsx"],107 "screens": [108 { "name": "ProfileScreen", "route": "/profile", "platform": "both" }109 ],110 "native_modules": [],111 "platform_notes": ["Avatar picker uses expo-image-picker; requires camera roll permission on iOS 14+"]112 },113 "summary": "ProfileScreen implemented for iOS and Android with Zustand state and expo-image-picker avatar upload.",114 "confidence": "high"115}116```117118---119> Source: [hieund-it/geminikit](https://github.com/hieund-it/geminikit) — distributed by [TomeVault](https://tomevault.io).120<!-- tomevault:4.0:skill_md:2026-05-22 -->