Agent skill

Mobile Release

by bex-co in bex-co/beancount-io

Summarize mobile changes since the previous release, bump the Beancount mobile version, prepare localized release notes and listings, and release to the Apple App Store and Google Play.

MITAuto-check passedDevelopment

Install Mobile Release

skills CLI
$ npx skills add bex-co/beancount-io --skill mobile-release -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install bex-co/beancount-io mobile-release --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/bex-co/beancount-io.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/mobile-release .claude/skills/mobile-release && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
mobile-release
GitHub stars
295
Token cost
~3.5k tokens
SKILL.md length
1,790 words
Files
3
Skills in repo
27
Repo updated
First seen
Licence
MIT

At a glance

Summarize mobile changes since the previous release, bump the Beancount mobile version, prepare localized release notes and listings, and release to the Apple App Store and Google Play.

  • $mobile-release
  • SKILL.md covers Establish release state, Summarize and bump, Prepare Google Play listing copy and Stage Apple listing before…, plus 3 more sections
  • Calls yarn and git
  • Requests to cut a mobile store release

What it does

Mobile Release is an agent skill from bex-co/beancount-io. Summarize mobile changes since the previous release, bump the Beancount mobile version, prepare localized release notes and listings, and release to the Apple App Store and Google Play. Use for $mobile-release or requests to cut a mobile store release. Skip ordinary code shipping, OTA-only updates, release-status questions, and requests to create or edit this skill.

Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files (for example `agents/openai.yaml` and `evals/evals.json`).

It sits in Development, covering App store release and Changelog and release notes. It works with Git. The repository describes itself as: 💰 Double-entry bookkeeping made easy — plain-text accounting for humans and AI agents. Polished iOS & Android app built with React Native + Expo. The licence is MIT.

When your agent uses it

  • $mobile-release
  • Requests to cut a mobile store release

Example prompts

  • “/mobile-release”

What it can do on your machine

Read from SKILL.md and the folder at commit 2103ca1. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • yarn
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • docs.expo.dev
    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Mobile Release loads about 3.5k tokens when it runs. Until then it costs about 96 tokens; SKILL.md has 1,790 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~96
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from bex-co/beancount-io at commit 2103ca1, republished under its MIT licence (© bex-co). 1,790 words, ~3,485 tokens.

Download SKILL.mdSave it as .claude/skills/mobile-release/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
mobile-release
description
Summarize mobile changes since the previous release, bump the Beancount mobile version, prepare localized release notes and listings, and release to the Apple App Store and Google Play. Use for $mobile-release or requests to cut a mobile store release. Skip ordinary code shipping, OTA-only updates, release-status questions, and requests to create or edit this skill.

Mobile release

Usage: $mobile-release [optional release context] (Claude Code: /mobile-release).

Carry a release through preparation, verification, shipping, and both stores. A release request authorizes the necessary store writes, build/submission jobs, and push to main. Naming individual steps — bump the version, write the release notes, cut the build — still requests the whole release: yarn bump exists only to cut one, and the release workflow is gated on a bumped-but-untagged version, so a bump that is not shipped strands the release half-done. Narrow the scope only on an explicit stop signal such as “prepare only”, “do not publish yet”, or “just the notes”; without one, carry through to both stores rather than stopping to confirm. Creating this skill does not invoke it. Do not ask again for authorization already given. Review concrete plans before recording approvals; never bypass the repository's release gates.

Establish release state

Locate the repository with git rev-parse --show-toplevel. Read root and mobile AGENTS.md, mobile/docs/app-store-localization.md, mobile/scripts/app-store-release.sh, mobile/scripts/play-release.sh, mobile/eas.json, and .github/workflows/deploy.yml. Run package commands inside mobile/; keep scratch artifacts in mobile/tmp/. Discover installed gh, asc, and the workflow's pinned EAS CLI capabilities with --help rather than assuming newer commands exist.

Inspect branch, staged and unstaged changes, and remote state. Fetch origin and tags. Preserve unrelated work; release only reviewed changes. Bring the release base up to date before preparing notes. Do not push a version bump until its store staging receipt is ready.

Find the previous reachable mobile tag using git describe --tags --match 'mobile-v*' --abbrev=0 HEAD. Compare that tag to the candidate release using mobile-scoped git log and git diff; inspect release workflow changes too. If no tag exists, label this a first release and inspect available mobile history. Tags from other packages are not a baseline.

Check GitHub release runs, EAS builds/submissions, App Store Connect versions, and Google Play tracks. A mobile-v<version> tag proves both EAS builds finished and their submissions completed, because the workflow waits for them; tags up to mobile-v1.20260912.48 were cut with --no-wait and only prove kickoff. A tag does not prove either store is live. Report any difference between the tag baseline and the last live version; include still-unreleased changes in store notes when needed.

If the current version is untagged or has incomplete jobs, determine whether it is an existing release to resume before bumping. Do not create another version merely to retry. Do not edit an Apple version already in review; report the pending review as the blocker to a new release.

Verify credentials and access without printing secrets. Check the effective Android submission profile, Google Play application identity, service-account access, production track, release status, and review settings. submit.production.android currently targets production with completed release status; verify service-account access separately because the profile does not contain a local key path. Resolve needed non-secret configuration within release scope, or identify the precise missing access. Never substitute a testing track for the requested production release.

Check the iOS scene life cycle before an iOS store build. UIKit requires the scene-based life cycle for apps built with the iOS 27 SDK (Xcode 27), and Expo adopted it in expo 58.0.0-preview.0 (expo/expo#46733). Apps on an earlier SDK fail to launch when built with that SDK (expo/expo#46663). Read the expo version in mobile/package.json, and confirm which Xcode the production EAS build will use: mobile/eas.json pins no iOS image, so EAS picks its default image for the SDK. If that build would use the iOS 27 SDK or newer while expo is below 58, stop before bumping and report the SDK upgrade as the release blocker. Do not hand-write UIApplicationSceneManifest into app.json: without the matching delegate adoption it fails worse, and prebuild reverts it. After an SDK upgrade, confirm a cold-launch native iOS log no longer reports UIScene lifecycle will soon be required.

Summarize and bump

Write concise user-facing release notes grounded in the inspected diff: features, fixes, and material behavior changes. Omit internal churn and unsupported claims. Show the baseline tag/SHA and candidate SHA, and keep the summary for the final report and commit context.

For a new release, run yarn bump once. Use the version it emits: this repository uses 1.YYYYMMDD.build, not a conventional patch increment. Inspect all generated changes, including native versions when present. For a resumed release, retain its version and completed preparation.

Fill every metadata/version/<version>/<locale>.json whatsNew using the same factual summary, translated using shipped terminology and metadata/store-locales.json. Preserve stable listing copy unless the release warrants a change. Keep template whatsNew blank. Fill the Android changelog emitted by the bump script, if present; inspect the actual script/output rather than assuming the legacy fastlane directory exists or is uploaded by EAS. Ensure the same notes are applied to the Google Play release through available authenticated tooling.

EAS uses remote native build numbers with auto-increment. Inspect the actual resulting iOS build number and Android version code; do not assume they equal the local suffix when selecting builds or attaching Android notes.

Prepare Google Play listing copy

Set GOOGLE_PLAY_SERVICE_ACCOUNT to the local JSON key path used by EAS Submit, without printing the key or token. Run yarn play:baseline, inspect tmp/play-baseline/baseline.json, and record the actual locale coverage. Do not assume the existing listing is English-only. Baseline reads create and delete an uncommitted edit; avoid concurrent Play edits with that account.

Run yarn play:generate after the bump and baseline review. It derives metadata/play/<locale>.json from canonical app-info/version metadata, using metadata/play-source/bg.json and fa.json for the languages Apple cannot offer. The result must cover all 16 Play locales / 13 runtime languages. Regenerate after any canonical listing change. Keep the baseline and credentials ignored; commit only the generated public copy and its canonical inputs.

Stage Apple listing before pushing

Run yarn format:check, yarn test, and yarn metadata:validate. Fix release-related failures and inspect any lint autofixes. Build and validate screenshots using yarn screenshots:build and yarn screenshots:validate; use the public demo sources, never a private ledger.

Follow the current release helper and localization guide. The required order is below; replace <version> with the actual target. Repeating the version is the helper's confirmation mechanism, not a reason to solicit authorization again.

sh
./scripts/app-store-release.sh create <version> <version>
./scripts/app-store-release.sh plan <version>
# Inspect metadata/plan.md, metadata/keywords-plan.md, and screenshots/index.html
# under mobile/.asc/releases/<version>/; visually inspect generated screenshots.
./scripts/app-store-release.sh approve <version> <version>
./scripts/app-store-release.sh apply-metadata <version> <version>
./scripts/app-store-release.sh plan-screenshots <version>
# Inspect the separate screenshot replacement/order plan before applying.
./scripts/app-store-release.sh apply-screenshots <version> <version>
./scripts/app-store-release.sh verify <version>
yarn store:staging-check

Inspect helper assumptions before using it (including its metadata-copy source and automatic release setting). The verification writes metadata/releases/<version>.json bound to the exact listing inputs. Never fabricate or hand-edit that receipt. If any bound input changes afterward, repeat the affected plan/review/apply and parity verification. Keep .asc/, generated screenshots, credentials, and raw remote responses out of Git.

If authorization is actually missing, finish all possible local preparation first, present the target version, notes, intended store actions, and available plans, then ask only for the missing scope. Cite the precise applicable instruction if it requires additional human approval. Do not claim to have obtained operator approval that was never given.

Show full SKILL.md (678 more words)Show less

Apply and verify Google Play listing

After building and validating all screenshots, run ./scripts/play-release.sh plan-play (also the default command). It uses the recorded baseline without credentials or network access and writes tmp/play-release/plan.txt and plan.json. Review every locale's title, short/full description diff, and ordered phone screenshots/feature graphic. Visually inspect the generated Play images, including Persian text shaping.

Run ./scripts/play-release.sh apply-play <plan-sha256> with the exact SHA-256 printed by the reviewed plan, within the release authorization already given. The helper checks for changed local inputs and remote baseline drift, updates only listing text and the phone/feature images, validates, and commits. It refuses to cancel another review in progress. It then checks all 16 locales' text and image checksums; rerun ./scripts/play-release.sh verify-play to repeat that read-only parity check. After drift, pull a new baseline and review a new plan rather than bypassing the check.

API parity does not prove publication. Check the review/publishing state in Play Console and sample the public listings, including Bulgarian and Persian. If review is pending, report that state and resume verification when it completes. Do not manage tracks or release notes through the listing helper; those remain part of the platform release steps below.

Ship and follow both platforms

Review the final diff and run the required secret scan before pushing. Use the repository's ship skill for the reviewed release files, including notes and staging receipt. If rebasing changes release contents or bound inputs, update the notes, repeat affected checks and parity verification before the push.

The main push triggers Release (mobile): checks → receipt verification → production OTA → EAS builds for both platforms with auto-submit, waiting for builds and submissions → tag/GitHub release. Use this workflow as the single build kickoff; do not also start duplicate local builds. Locate the run for the shipped SHA with gh, follow it, and capture the exact EAS build and submission IDs for both platforms. Poll long jobs in bounded waits while giving progress updates.

Complete each store's remaining steps with available authenticated tools, checking current CLI help/documentation:

  • Apple: wait for the exact iOS build to finish uploading and processing, attach it to the prepared version, check required review information, submit for App Review, and verify the version's review/release state. EAS Submit uploads to TestFlight; it does not itself submit for App Review. Do not invent compliance answers or replace existing review credentials. Honor the configured release mode and complete a manual release after approval when applicable.
  • Google Play: verify the exact Android artifact/version code reached production, apply release notes, send pending changes for review when necessary, and verify the rollout/review state. An internal-track upload, draft release, or changes waiting to be sent for review is unfinished. Preserve an explicitly requested staged rollout.

Use Expo iOS submission documentation, submission automation, and EAS configuration to verify current store semantics when needed; prefer the repository-pinned CLI's supported commands.

On failure, inspect status/logs before retrying. Resume the failed platform or step using its exact build ID; never use submit --latest, delete a release tag to retrigger everything, or rebuild the successful platform unnecessarily. Rerun the workflow only after checking for in-flight jobs and whether the tag gate will skip deployment. A tagged release with a failed submission needs targeted recovery. After a retry encounters the same unresolved failure, stop retrying and report the required fix; do not create endless paid builds.

Finish all automatable steps. If store review is pending, report it explicitly with links and the next action; do not wait indefinitely or call it live. If credentials, mandatory store answers, or an unavailable console action block completion, name the exact action and continue independent work on the other platform.

Report

Return the version and baseline, a short change summary, shipped SHA and workflow link, checks performed, and separate iOS/Android statuses with build/submission links. Distinguish build queued, uploaded, submitted for review, approved, and live. Claim both stores released only when both production states have been verified. Report an unfinished run as unfinished, leading with where it stopped and the next required step; never present preparation — a bump, localized notes, or green checks — as a release.

© bex-co, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files in .agents/skills/mobile-release of bex-co/beancount-io.

  • SKILL.md
  • agents/openai.yaml
  • evals/evals.json

Open the folder on GitHubat commit 2103ca1

Compare with similar skills

Mobile Release next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Mobile Release compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Mobile Release this skillbex-co/beancount-io295—~3.5kAutomated safety check: PassMIT
Knockoff Release ShipperShpigford/chops1.9k—~1.2kAutomated safety check: NotesCustom licence
App Store Changelogharperreed/dotfiles3344 repos~465Automated safety check: PassNone
Releasevaayne/mori303—~1.2kAutomated safety check: PassMIT
Asc Whats New WriterCamilleScholtz/swmpc2395 repos~1.8kAutomated safety check: PassEUPL-1.2
Happy Monorepo Releaseslopus/happy24k—~6.6kAutomated safety check: PassMIT

Similar skills

  • Cuts a new Knockoff release by bumping the version, rolling release notes, tagging and shipping to the Chrome, Firefox and Apple stores with a per-store report.

    1.9k GitHub stars~1.2k tokensUpdated 1 mo ago
    DevelopmentAuto-check: notes
  • App Store Changelog

    harperreed/dotfiles

    Create user-facing App Store release notes by collecting and summarizing all user-impacting changes since the last git tag (or a specified ref).

    334 GitHub starsUsed in 4 repos~465 tokens
    DevelopmentAuto-check passed
  • Release

    vaayne/mori

    Release workflow for Mori macOS workspace terminal and MoriRemote iOS app.

    303 GitHub stars~1.2k tokensUpdated 2 mo ago
    MobileAuto-check passed
  • Asc Whats New Writer

    CamilleScholtz/swmpc

    Generate engaging, localized App Store release notes (What's New) from git log, bullet points, or free text using canonical metadata under ./Store.

    239 GitHub starsUsed in 5 repos~1.8k tokens
    DevelopmentAuto-check passed
  • Walks you through releasing a component of the Happy monorepo (CLI, mobile, web or server) from a clean local main that matches origin/main.

    24k GitHub stars~6.6k tokensUpdated yesterday
    DevOps & CloudAuto-check passed
  • Kt Search Release

    jillesvangurp/kt-search

    A skill your agent uses when the user wants to cut, publish, tag, or create a GitHub release for kt-search, especially when the task includes version bumping, validating that commits are pushed…

    155 GitHub stars~1.2k tokensUpdated 3 mo ago
    DevelopmentAuto-check passed

More from bex-co/beancount-io

All 27 skills in this repo
  • Beancount Close

    bex-co/beancount-io

    Close an accounting period in a Beancount ledger by reconciling each active account through beancount-reconcile, checking assertions and recurring gaps, reviewing flags, then proposing a commit with…

    295 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Beancount Import

    bex-co/beancount-io

    Import a bank or card CSV, OFX/QFX, or QIF export into an existing Beancount ledger.

    295 GitHub stars~3k tokensUpdated yesterday
    Auto-check passed
  • Beancount Importer Author

    bex-co/beancount-io

    Write or repair a reusable Beangulp importer from a sample bank export, with reviewed golden files and a passing test harness.

    295 GitHub stars~2k tokensUpdated yesterday
    Auto-check passed
  • Beancount Init

    bex-co/beancount-io

    Scaffold a new Beancount ledger with bea init and validation, with optional Fava browser setup when requested.

    295 GitHub stars~1.2k tokensUpdated yesterday
    Auto-check: notes
  • Beancount Options

    bex-co/beancount-io

    Record a described options trade or lifecycle event as validated Beancount transactions through bea, after review and confirmation.

    295 GitHub stars~3.7k tokensUpdated yesterday
    Auto-check passed
  • Beancount Reconcile

    bex-co/beancount-io

    Reconcile one Beancount account against a CSV statement or pasted PDF text.

    295 GitHub stars~4.1k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Mobile Release

What does Mobile Release do?

Summarize mobile changes since the previous release, bump the Beancount mobile version, prepare localized release notes and listings, and release to the Apple App Store and Google Play. Mobile Release is an agent skill from bex-co/beancount-io. Summarize mobile changes since the previous release, bump the Beancount mobile version, prepare localized release notes and listings, and release to the Apple App Store and Google Play.

When should I use Mobile Release?

Mobile Release fits situations like: $mobile-release; requests to cut a mobile store release.

How do I install Mobile Release in Claude Code?

Run `npx skills add bex-co/beancount-io --skill mobile-release -a claude-code`. Or copy the skill folder (.agents/skills/mobile-release in bex-co/beancount-io) into .claude/skills/mobile-release in your project. Claude Code loads it when a task matches its description.

How do I install Mobile Release in Codex?

Run `npx skills add bex-co/beancount-io --skill mobile-release -a codex`. Or copy the skill folder (.agents/skills/mobile-release in bex-co/beancount-io) into .agents/skills/mobile-release in your project. Codex loads it when a task matches its description.

Can I use Mobile Release in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add bex-co/beancount-io --skill mobile-release -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/mobile-release, .gemini/skills/mobile-release, .github/skills/mobile-release and .opencode/skills/mobile-release in your project.

What does Mobile Release need to run?

Going by SKILL.md and its folder, Mobile Release needs the command-line tools its instructions call (yarn and git).

Does Mobile Release access the network?

SKILL.md names 2 domains. As links in the text: docs.expo.dev and github.com. This is read from the text; nothing was executed.

Is Mobile Release safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Mobile Release use?

Mobile Release is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Mobile Release use?

About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Mobile Release?

Skills that share tags, products or a category with Mobile Release: Knockoff Release Shipper (Shpigford/chops, 1.9k stars), App Store Changelog (harperreed/dotfiles, 334 stars), Release (vaayne/mori, 303 stars) and Asc Whats New Writer (CamilleScholtz/swmpc, 239 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Mobile Release?

bex-co (a GitHub organization) maintains it in bex-co/beancount-io, which has 295 GitHub stars. The repository holds 27 skills in this directory. The repository was last updated on October 7, 2026.

Source: bex-co/beancount-io on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.