ccc-mobile · git:20261013.fbe187d · 2026-10-13 · sha256 6603477eb1bb8dd0
ccc-mobile git:20261013.fbe187dA
Immutable. This exact content never changes and is served at /api/v1/blob/6603477eb1bb8dd0.
--- name: ccc-mobile description: "Route mobile work to the right method: React Native/Expo, Flutter, SwiftUI or Jetpack Compose builds, mobile testing, app store optimization, push notifications and deep links, or start a new app. Use when the user is building, testing or shipping an iOS or Android app, or types /ccc-mobile." allowed-tools: - Read - Write - Edit - Bash - Glob - Grep - Skill - AskUserQuestion argument-hint: "[new | react-native | flutter | swiftui | jetpack-compose | testing | aso | push | deep-links]" model: inherit effort: medium --- # /ccc-mobile — mobile work, routed **CC Commander** · /ccc-mobile · the right mobile method for the detected platform, or a new app on the platform you pick. Mobile sub-skills (`react-native`, `flutter`, `swiftui`, `jetpack-compose`, `mobile-testing`, `app-store-optimization`, `push-notifications`, `deep-linking`) ship with the Commander CLI toolkit. Invoke one with the Skill tool when it is listed in this session; otherwise apply the guidance in [references/routing.md](references/routing.md). The user's selected model is preserved. Codex: ask pickers as plain-text questions. ## When to use / when not to - Use for native or cross-platform mobile apps, their tests, store listings, push and deep links. `/ccc-build mobile` hands off here. - Use `/ccc-build` for web apps, APIs and CLIs, `/ccc-design` for web UI. ## What happens ### 1. Detect the platform Run in one Bash call, silent on failure: ```bash test -f package.json && grep -oE '"(expo|react-native)"' package.json | sort -u test -f pubspec.yaml && echo flutter ls -d *.xcodeproj *.xcworkspace Package.swift 2>/dev/null grep -lE 'androidx\.compose' build.gradle* app/build.gradle* 2>/dev/null ``` Render one line: > 🎯 Platform: `<Expo | React Native | Flutter | SwiftUI | Jetpack Compose | none detected>` ### 2. Route by intent, or ask An argument or a clear intent routes straight to the sub-skill in [references/routing.md](references/routing.md). `new`, or no app detected with a build request, goes to step 3. Otherwise ask with AskUserQuestion (header "Mobile"), recommended first: - 🟢 Build or extend the app — the sub-skill for the detected platform - Test it — `mobile-testing` (Detox, Maestro, XCTest, Espresso) - Ship to the stores — `app-store-optimization` - More — push notifications or deep links, chosen in a follow-up picker On More, ask with AskUserQuestion (header "More"), recommended first: - 🟢 Push notifications — `push-notifications` (APNs, FCM, permission prompts) - Deep links — `deep-linking` (universal links, app links, URL routing) ### 3. New app Ask with AskUserQuestion (header "Platform"), recommended first: - 🟢 React Native (Expo) — one codebase for both platforms, largest ecosystem; best for a team that knows React - Flutter — one codebase, strongest custom UI and rendering performance - SwiftUI — iOS only, fully native feel - Jetpack Compose — Android only, fully native feel Recommend Flutter first instead when the user said UI polish or performance matters most. Then ask for an app name, derive `<slug>`, and confirm (🟢 Create it · Cancel) before running, since it downloads packages: | Platform | Command | Check | |---|---|---| | Expo | `npx create-expo-app@latest <slug> --template tabs` | `cd <slug> && npx expo-doctor` | | Flutter | `flutter create --org <reverse-domain> --platforms ios,android <slug>` | `cd <slug> && flutter analyze` | | SwiftUI | Create the project in Xcode (App template, SwiftUI interface), then continue with `swiftui` | `xcodebuild -list` in the project folder | | Jetpack Compose | Create the project in Android Studio (Empty Activity, Compose), then continue with `jetpack-compose` | `./gradlew assembleDebug` | Never create the app inside an existing project's root; use a sub-directory. ### 4. Do the work Follow the routed sub-skill. After any code change, run the platform check from the table in step 3 (or the project's own test command) and `git status --short`. ## Done when - Routing only: the sub-skill was invoked or its guidance applied, and the user knows which one. - New app: `<slug>/` exists and the platform check exited 0 in this turn; report its output. - Code changed: the platform check or test command exited 0 and `git status --short` lists only the intended files. ## Guardrails - Never submit to the App Store or Play Store, upload builds, or send test pushes to real devices without the user's explicit OK at that moment. - Never write signing keys, push certificates or API keys into the repo; point to the platform's secret store. - Never run a scaffold command without the step 3 confirmation. ## See also - `/ccc-build` — web apps, APIs and CLIs - `/ccc-testing` — test strategy beyond device tests - `/ccc-design` — design tokens and visual direction - `/ccc-ship` — release flow once the build is green --- > ⚙️ **Fable contract:** plan before build · verifier ≠ worker · prove before alarm · loops need gates · leave durable state — `rules/fable-method.md`