with one click
mobile-release
// Use when preparing a mobile release from the dev branch and deciding whether changes should ship through the app stores or through the OTA pipeline before creating the release PR to mobile-main.
// Use when preparing a mobile release from the dev branch and deciding whether changes should ship through the app stores or through the OTA pipeline before creating the release PR to mobile-main.
| name | mobile-release |
| description | Use when preparing a mobile release from the dev branch and deciding whether changes should ship through the app stores or through the OTA pipeline before creating the release PR to mobile-main. |
| disable-model-invocation | true |
| allowed-tools | Bash, Read, Write, Edit, Glob, Grep |
Perform a mobile release from dev, with an explicit release-mode decision before the bump.
The skill must recommend one of these modes, explain why, ask the user to confirm, and then write apps/mobile/release-plan.json before running the bump:
store: normal App Store / Google Play releaseota: OTA-only publish, no store buildsDo not recommend or write any other mode. The current implementation only supports store and ota.
The CI release flow is file-driven:
apps/mobile/release-plan.json is the editable plan on devpnpm bump runs apps/mobile/scripts/apply-release-config.tsapps/mobile/release.json for the new version and resets the plan back to a safe defaultapps/mobile/release.json after merge to decide which pipelines to triggerdev. If not, abort with a warning.git pull --rebase in the repo root.apps/mobile/package.jsonapps/mobile/release-plan.json.github/workflows/tag.yml.github/workflows/publish-ota.ymlgit tag --sort=-creatordate | grep -E '^mobile[@/]' | head -1
git log --format="%H %s" | grep -Ei "^[a-f0-9]* release\\(mobile\\): release v" | head -1 | awk '{print $1}'
git log <last-tag-or-commit>..HEAD --oneline --no-merges
git diff --name-only <last-tag-or-commit>..HEAD
Shiny new thingsImprovementsNo longer brokenThanksstore when:apps/mobile/ios/**apps/mobile/android/**apps/mobile/native/**apps/mobile/package.jsonapps/mobile/app.config.tsapps/mobile/app.config.base.tsapps/mobile/eas.jsonapps/mobile/ios/Folo/Info.plist.github/workflows/build-ios.yml.github/workflows/build-android.ymlota when:If recommending ota, derive the target store binary version from recent origin/mobile-main releases and propose it as the runtimeVersion.
If you cannot determine the runtime confidently, stop and ask the user to confirm it.
Present:
ota, the proposed runtimeVersionota, the proposed channelWait for explicit user confirmation before continuing.
Update apps/mobile/release-plan.json to match the confirmed mode.
Examples:
{
"mode": "store",
"runtimeVersion": null,
"channel": null
}
{
"mode": "ota",
"runtimeVersion": "0.4.1",
"channel": "production"
}
apps/mobile/changelog/next.md.apps/mobile/changelog/next.md.nbump requires a clean working tree.
git add apps/mobile/changelog/next.md apps/mobile/release-plan.json
git commit -m "docs(mobile): prepare release metadata"
git status --short
cd apps/mobile && pnpm bump
pnpm bump will:
package.jsonios/Folo/Info.plisttsx scripts/apply-release-config.ts ${NEW_VERSION}apps/mobile/release.jsonapps/mobile/release-plan.json back to the safe default storemobile-mainapps/mobile/release.json on the release branch and report:
mode=storemode=otaapps/mobile/bump.config.tsapps/mobile/release-plan.jsonapps/mobile/release.jsonapps/mobile/scripts/apply-release-config.tsapps/mobile/changelog/apps/mobile/scripts/apply-changelog.ts.github/scripts/resolve-mobile-release-config.mjs.github/workflows/tag.yml.github/workflows/publish-ota.ymlapps/mobile/app.config.tsapps/mobile/ios/Folo/Info.plistPerform a regular desktop release from the dev branch. Gather changes since the last desktop tag, update the changelog, choose the desktop release mode in release-plan.json, bump the version, and prepare the release PR.
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.
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.
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.
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.