mobile-e2e

Run apps/mobile Maestro end-to-end tests in this repo. Use when an agent needs to validate mobile auth flows on iOS Simulator or Android Emulator. Current maintained coverage is register, sign out, and sign in.

37,910 stars

Best use case

mobile-e2e is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Run apps/mobile Maestro end-to-end tests in this repo. Use when an agent needs to validate mobile auth flows on iOS Simulator or Android Emulator. Current maintained coverage is register, sign out, and sign in.

Teams using mobile-e2e should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/mobile-e2e/SKILL.md --create-dirs "https://raw.githubusercontent.com/RSSNext/Folo/main/.agents/skills/mobile-e2e/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/mobile-e2e/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How mobile-e2e Compares

Feature / Agentmobile-e2eStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Run apps/mobile Maestro end-to-end tests in this repo. Use when an agent needs to validate mobile auth flows on iOS Simulator or Android Emulator. Current maintained coverage is register, sign out, and sign in.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# Mobile E2E

Run the mobile Maestro tests for `apps/mobile`.

## Files that matter

- Runner: `apps/mobile/e2e/run-maestro.sh`
- iOS auth flow: `apps/mobile/e2e/flows/ios/auth.yaml`
- Android auth flow: `apps/mobile/e2e/flows/android/core.yaml`
- Shared auth flows: `apps/mobile/e2e/flows/shared/*.yaml`
- Artifacts: `apps/mobile/e2e/artifacts/`

## Always do first

From repo root:

```bash
cd apps/mobile
pnpm run e2e:doctor
pnpm run typecheck
```

## iOS

Use a simulator `.app` build, not an Expo development client.

### Preferred simulator

Prefer the **latest installed iOS runtime** and a **latest-generation iPhone simulator**.

When multiple simulators are available, bias toward the newest iPhone model on the newest installed iOS version.

### Boot simulator

```bash
xcrun simctl boot <IOS_UDID>
xcrun simctl bootstatus <IOS_UDID> -b
open -a Simulator --args -CurrentDeviceUDID <IOS_UDID>
```

### App bundle

`run-maestro.sh` can resolve the app bundle from one of these sources:

- `MAESTRO_IOS_APP_PATH`
- a local `build-*.tar.gz` in `apps/mobile`
- an existing `DerivedData/.../Release-iphonesimulator/Folo.app`

If none of those exist, build one first.

### Build simulator app when missing

If `Folo.app` is not available yet:

```bash
cd apps/mobile/ios
pod install
xcodebuild -workspace Folo.xcworkspace \
  -scheme Folo \
  -configuration Release \
  -sdk iphonesimulator \
  -destination 'id=<IOS_UDID>' \
  build
```

### Apple Silicon simulator optimization

When running on an Apple Silicon Mac and building only for the simulator used in the current run, prefer compiling only the active `arm64` simulator architecture:

```bash
xcodebuild ... \
  ONLY_ACTIVE_ARCH=YES \
  ARCHS=arm64
```

Use this optimization only for local self-test / e2e simulator builds tied to the current machine. Do not use it when you need a universal simulator app for other machines or when running on Intel Macs.

Expected output pattern:

```bash
~/Library/Developer/Xcode/DerivedData/.../Build/Products/Release-iphonesimulator/Folo.app
```

### Run iOS auth flow

```bash
cd apps/mobile
MAESTRO_IOS_DEVICE_ID=<IOS_UDID> \
MAESTRO_IOS_APP_PATH=<PATH_TO_Folo.app> \
pnpm run e2e:ios
```

## Android

Use a **release APK**, not an Expo development build.

### Java

Use Android Studio bundled JBR:

```bash
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
export PATH="$JAVA_HOME/bin:$PATH"
```

### Android SDK

```bash
export ANDROID_HOME="$HOME/Library/Android/sdk"
export ANDROID_SDK_ROOT="$HOME/Library/Android/sdk"
```

If `apps/mobile/android/local.properties` is missing, create it with:

```bash
echo "sdk.dir=$HOME/Library/Android/sdk" > apps/mobile/android/local.properties
```

### Build release APK

If `apps/mobile/android` does not exist locally, generate it first with Expo prebuild / run-android tooling.

Then build the release APK:

```bash
cd apps/mobile/android
./gradlew app:assembleRelease --console=plain
```

Expected APK path:

```bash
apps/mobile/android/app/build/outputs/apk/release/app-release.apk
```

### Install to emulator

```bash
adb -s emulator-5554 install -r apps/mobile/android/app/build/outputs/apk/release/app-release.apk
```

### Run Android auth flow

Start a booted emulator first, then:

```bash
cd apps/mobile
pnpm run e2e:android
```

## Result checks

Successful auth validation means:

- register flow finishes
- sign-out reaches `login-screen`
- login flow makes `login-screen` disappear

## Debugging output

Inspect these folders after a run:

```bash
apps/mobile/e2e/artifacts/ios/
apps/mobile/e2e/artifacts/android/
```

For a one-off focused run, invoke Maestro directly against a single flow and a custom debug directory.

Related Skills

mobile-self-test

37910
from RSSNext/Folo

Self-test a mobile feature change or bug fix after implementation in `apps/mobile`. Use this whenever the user asks to verify a mobile change, run simulator acceptance, smoke-test a mobile PR, or provide screenshot proof for a mobile fix. This skill decides between prod vs local API mode, starts the local follow-server when needed, builds a release app, uses Maestro only to bootstrap registration for non-auth work, then switches to screenshot-driven visual validation and returns screenshot evidence.

mobile-release

37910
from RSSNext/Folo

Perform a regular mobile release from the dev branch. Gathers commits since last release, updates changelog, bumps version, updates iOS Info.plist, and creates release PR to mobile-main.

installing-mobile-preview-builds

37910
from RSSNext/Folo

Builds and installs the iOS preview build for apps/mobile using EAS local build and devicectl. Use when the user asks to install a preview/internal iOS build on a connected iPhone for production-like testing.

Folo CLI Skill

37910
from RSSNext/Folo

## Trigger Conditions

update-deps

37910
from RSSNext/Folo

Update all dependencies across frontend and backend projects. Reads changelogs for breaking changes, checks affected code, runs tests, and provides a summary. Use when updating npm dependencies across the monorepo.

desktop-release

37910
from RSSNext/Folo

Perform a regular desktop release from the dev branch. Gathers commits since last release, updates changelog, evaluates mainHash changes, bumps version, and creates release PR.

mobile-games

31392
from sickn33/antigravity-awesome-skills

Mobile game development principles. Touch input, battery, performance, app stores.

testing-mobile-api-authentication

4032
from mukul975/Anthropic-Cybersecurity-Skills

Tests authentication and authorization mechanisms in mobile application APIs to identify broken authentication, insecure token management, session fixation, privilege escalation, and IDOR vulnerabilities. Use when performing API security assessments against mobile app backends, testing JWT implementations, evaluating OAuth flows, or assessing session management. Activates for requests involving mobile API auth testing, token security assessment, OAuth mobile flow testing, or API authorization bypass.

performing-mobile-device-forensics-with-cellebrite

4032
from mukul975/Anthropic-Cybersecurity-Skills

Acquire and analyze mobile device data using Cellebrite UFED and open-source tools to extract communications, location data, and application artifacts.

performing-mobile-app-certificate-pinning-bypass

4032
from mukul975/Anthropic-Cybersecurity-Skills

Bypasses SSL/TLS certificate pinning implementations in Android and iOS applications to enable traffic interception during authorized security assessments. Covers OkHttp, TrustManager, NSURLSession, and third-party pinning library bypass techniques using Frida, Objection, and custom scripts. Activates for requests involving certificate pinning bypass, SSL pinning defeat, mobile TLS interception, or proxy-resistant app testing.

intercepting-mobile-traffic-with-burpsuite

4032
from mukul975/Anthropic-Cybersecurity-Skills

Intercepts and analyzes HTTP/HTTPS traffic from mobile applications using Burp Suite proxy to identify insecure API communications, authentication flaws, data leakage, and server-side vulnerabilities. Use when performing mobile application penetration testing, assessing API security, or evaluating client-server communication patterns. Activates for requests involving mobile traffic interception, Burp Suite mobile proxy, API security testing, or mobile HTTPS analysis.

implementing-mobile-application-management

4032
from mukul975/Anthropic-Cybersecurity-Skills

Implements Mobile Application Management (MAM) policies to protect enterprise data on managed and unmanaged mobile devices through app-level controls including data loss prevention, selective wipe, app configuration, and containerization. Use when securing corporate apps on BYOD devices, implementing Intune App Protection Policies, or enforcing data separation between personal and work apps. Activates for requests involving MAM deployment, app protection policies, mobile containerization, or BYOD security.