Agent skill

Testflight Release

by termio-sh in termio-sh/termio

Ship a new TestFlight build of the iOS companion (TermioMobile) — resolve the next build number against App Store Connect, archive, sign, export, upload, write the What to Test notes, and distribute.

MITAuto-check: warningsMobile

Install Testflight Release

The automated check flagged lines worth reading first. See the safety section below.

skills CLI
$ npx skills add termio-sh/termio --skill testflight-release -a claude-code

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

GitHub CLI
$ gh skill install termio-sh/termio testflight-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/termio-sh/termio.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/testflight-release .claude/skills/testflight-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
testflight-release
GitHub stars
540
Token cost
~2.5k tokens
SKILL.md length
993 words
Files
1
Skills in repo
19
Repo updated
First seen
Licence
MIT

At a glance

Ship a new TestFlight build of the iOS companion (TermioMobile) — resolve the next build number against App Store Connect, archive, sign, export, upload, write the What to Test notes, and distribute.

  • Works in 7 steps: Bump — the command above. It reports the… → Archive (Release, signed for distribution) → Export. Automatic signing does not work… → …
  • Says ship a testflight build
  • SKILL.md covers Constants, The build number in the repo…, Steps and Signing assets, plus 2 more sections
  • Calls openssl, git and xcodebuild

What it does

Testflight Release is an agent skill from termio-sh/termio. Ship a new TestFlight build of the iOS companion (TermioMobile) — resolve the next build number against App Store Connect, archive, sign, export, upload, write the What to Test notes, and distribute. Invoke when the user says 'ship a testflight build', 'update testflight', 'upload to testflight', 'new beta build', 'push the ios app to testers', '发一个 TestFlight', '更新 TestFlight', or '上传测试版'.

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Mobile, covering App store release and iOS development. It works with App Store Connect, iOS and Xcode. The repository describes itself as: A terminal-first agentic development environment for agentic coding. Build for CLI/TUI agent. Runtime for Coding Agent, Tmux alternative. The licence is MIT.

When your agent uses it

  • Says ship a testflight build
  • Update testflight
  • Upload to testflight
  • Push the ios app to testers

Example prompts

  • “ship a testflight build”
  • “update testflight”
  • “upload to testflight”
  • “/testflight-release”

Workflow steps

7 steps, taken from the first numbered list in SKILL.md.

  1. Bump — the command above. It reports the number it chose.
  2. Archive (Release, signed for distribution)
  3. Export. Automatic signing does not work on this Mac — Xcode's stored
  4. Upload and wait for processing
  5. What to Test — required for external testers, good manners for internal
  6. Distribute.
  7. Revert the pbxproj bump and delete ios/.asc/ (untracked build

What it can do on your machine

Read from SKILL.md and the folder at commit af3b35b. 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:

    • openssl
    • git
    • xcodebuild

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

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    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

Testflight Release loads about 2.5k tokens when it runs. Until then it costs about 103 tokens; SKILL.md has 993 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~103
When it runs · the whole SKILL.md, loaded when a task matches
~2.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: warnings

The automated check found patterns that need a careful read before installing.

  • WarningMentions a credentials file (SSH keys, cloud or package-manager tokens)SKILL.md:151
    t dist.p12 -k ~/Library/Keychains/login.keychain-db -T /usr/bin/codesign

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 termio-sh/termio at commit af3b35b, republished under its MIT licence (© termio-sh). 993 words, ~2,458 tokens.

Download SKILL.mdSave it as .claude/skills/testflight-release/SKILL.md (or your agent's skills folder).
name
testflight-release
description
Ship a new TestFlight build of the iOS companion (TermioMobile) — resolve the next build number against App Store Connect, archive, sign, export, upload, write the What to Test notes, and distribute. Invoke when the user says 'ship a testflight build', 'update testflight', 'upload to testflight', 'new beta build', 'push the ios app to testers', '发一个 TestFlight', '更新 TestFlight', or '上传测试版'.

TestFlight release (iOS companion)

Cuts a TestFlight build of TermioMobile by hand. Unlike the Mac app, this is not automated: .github/workflows has no upload step, so nothing happens when a PR merges. Every TestFlight build is a local archive + upload.

Use the asc skill for anything beyond this path (crash triage, App Store submission, metadata). This skill is only the beta-build pipeline, with the repo-specific facts that asc cannot know.

Constants

ThingValue
App ID6790142237 (sh.termio.mobile, "Termio: Agentic Terminal")
Bundle ID resource97KQ9JGYL8
Team5Y27G7B6D8, from ios/Signing.xcconfig — not the project file
Internal group7b62f012-b166-40df-ba19-e43c3a0b2c88
Public Beta groupfe170244-643a-4c73-9c94-84ab44c254f9 (external, public link)
Signing assets~/Library/Developer/asc-signing/termio/ (mode 700, outside the repo)

The build number in the repo is a lie

CURRENT_PROJECT_VERSION in ios/TermioMobile.xcodeproj/project.pbxproj sits at an old value (285 at the time of writing) while App Store Connect is in the 700s. That is deliberate: the bump is applied for the archive and then thrown away.

Never commit the bump. Resolve it against ASC, build, upload, revert:

sh
cd ios
asc xcode version edit --next-build-number --app 6790142237 --platform IOS \
    --project TermioMobile.xcodeproj --output json
# ... archive, export, upload ...
git checkout -- TermioMobile.xcodeproj/project.pbxproj

Uploading a build number at or below the highest one in ASC is rejected, so never guess it from the repo.

Steps

Run from a clean worktree on the commit you want to ship (normally main).

  1. Bump — the command above. It reports the number it chose.

  2. Archive (Release, signed for distribution):

    sh
    cd ios
    asc xcode archive \
      --project TermioMobile.xcodeproj --scheme TermioMobile \
      --configuration Release --clean \
      --archive-path .asc/artifacts/TermioMobile.xcarchive \
      --xcodebuild-flag=-destination --xcodebuild-flag=generic/platform=iOS \
      --xcodebuild-flag=-allowProvisioningUpdates --output json
  3. Export. Automatic signing does not work on this Mac — Xcode's stored account token is broken (missing Xcode-Token), so asc xcode export fails with No signing certificate "iOS Distribution" found. Export manually against the profile instead, with ios/.asc/ExportOptions.plist:

    xml
    <key>method</key>                <string>app-store-connect</string>
    <key>teamID</key>                <string>5Y27G7B6D8</string>
    <key>signingStyle</key>          <string>manual</string>
    <key>signingCertificate</key>    <string>iPhone Distribution: Jiwei Yuan (5Y27G7B6D8)</string>
    <key>provisioningProfiles</key>  <dict><key>sh.termio.mobile</key><string>Termio iOS App Store</string></dict>
    sh
    xcodebuild -exportArchive \
      -archivePath .asc/artifacts/TermioMobile.xcarchive \
      -exportPath .asc/artifacts/export \
      -exportOptionsPlist .asc/ExportOptions.plist

    It still logs the DVTDeveloperAccountManager credential error; with manual signing that is noise, not a failure. Check for ** EXPORT SUCCEEDED **.

  4. Upload and wait for processing:

    sh
    asc builds upload --app 6790142237 --ipa .asc/artifacts/export/TermioMobile.ipa --wait
  5. What to Test — required for external testers, good manners for internal:

    sh
    asc builds test-notes create --build-id "BUILD_ID" --locale en-US \
      --whats-new "..."

    Note the subcommand is create; update only edits notes that already exist. One paragraph, concrete, no AI attribution.

  6. Distribute.

    • Internal needs no command. Internal groups pick up every processed build automatically — asc builds add-groups on the Internal group fails with "Cannot add internal group to a build." Confirm instead: asc testflight distribution view --build-id "BUILD_ID" → Internal State: IN_BETA_TESTING.

    • Public Beta is external and gated on Beta App Review. Read externalBuildState before doing anything: READY_FOR_BETA_SUBMISSION means it still needs submitting, WAITING_FOR_BETA_REVIEW means it is already in Apple's queue and there is nothing to do but wait, and BETA_TESTING means it is live on the public link. Ask the user before submitting — that ships to real testers.

      It takes two commands, and the first one alone looks like it worked:

      sh
      asc builds add-groups --build-id "BUILD_ID" --group fe170244-643a-4c73-9c94-84ab44c254f9
      asc testflight review submit --build-id "BUILD_ID" --confirm

      Adding the group reports success and changes nothing — externalBuildState stays READY_FOR_BETA_SUBMISSION until the build is actually submitted. This holds even for a marketing version that has already cleared review: 1.1 build 951 still had to be submitted on 2026-08-28, having been told here that it would skip the step. What that version buys is the wait, not the submission — the state went WAITING_FOR_REVIEW → IN_BETA_TESTING within a minute rather than hours.

  7. Revert the pbxproj bump and delete ios/.asc/ (untracked build artifacts, ~10 MB IPA plus the archive).

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

Signing assets

The account has one iOS Distribution certificate (M92KPZPT43, expires 2027-08-12) and the Termio iOS App Store profile (R3N9335442). Both were created with the asc CLI, and the identity is installed in the login keychain.

If they are ever missing or expired, recreate them:

sh
mkdir -p ~/Library/Developer/asc-signing/termio && chmod 700 ~/Library/Developer/asc-signing/termio
asc certificates create --certificate-type IOS_DISTRIBUTION --generate-csr \
  --key-out ./dist.key --csr-out ./dist.csr --common-name "Jiwei Yuan"
# save the base64 certificateContent from the response as dist.cer, then:
openssl x509 -inform DER -in dist.cer -out dist.pem
openssl pkcs12 -export -legacy -inkey dist.key -in dist.pem -out dist.p12 \
  -name "iOS Distribution: Jiwei Yuan"
security import dist.p12 -k ~/Library/Keychains/login.keychain-db -T /usr/bin/codesign
asc profiles create --name "Termio iOS App Store" --profile-type IOS_APP_STORE \
  --bundle 97KQ9JGYL8 --certificate "CERT_ID"
asc profiles download --id "PROFILE_ID" --output ./TermioAppStore.mobileprovision
asc profiles local install --path ./TermioAppStore.mobileprovision

-legacy is not optional: OpenSSL 3 defaults to a PKCS#12 MAC that macOS cannot read, and security import fails with "MAC verification failed during PKCS12 import (wrong password?)" — which looks like a password problem and is not one.

Certificates are account-level and limited in number. Creating or revoking one affects every machine that signs this app, so confirm with the user first.

Notes

  • ios/dev-run.sh is the device-install loop for development; it has nothing to do with this path and never touches signing for distribution.

Bumping MARKETING_VERSION vs reusing it

Two different numbers move for two different reasons, and only one of them is free:

CURRENT_PROJECT_VERSION (build)MARKETING_VERSION
Movesevery uploadrarely, deliberately
Committed?never (resolved against ASC, reverted after)yes, its own commit
Costnonea Beta App Review round-trip

The rule: reuse the marketing version for iterative betas; bump it only when you are starting a new version train.

Bumping is not free. The first build of a new marketing version has to clear Apple's Beta App Review before any external tester can install it — it sits at externalBuildState: WAITING_FOR_BETA_REVIEW, typically hours. Every later build of that same version still has to be submitted — see step 6, the submission is never automatic — but clears in about a minute instead of hours. Internal testers are never affected either way; they get every processed build immediately (internalBuildState: IN_BETA_TESTING).

So a bump costs one review wait and buys nothing on its own. Bump when the version is about to mean something — an App Store submission, or a batch of work you want to name — and take the review hit once, up front, so the builds that follow it ship instantly.

Consequences worth knowing before you reach for it:

  • Pushing another build will not shorten a pending review. A rebuild of the same commit is identical code queued behind the same review. If external access is what you are waiting for, waiting is the action.
  • Check state before building anything: asc testflight distribution view --build-id "BUILD_ID". If external already reads WAITING_FOR_BETA_REVIEW, there is nothing useful to upload.
  • Review needs the Beta App Review contact, review notes, and What to Test in every locale you ship. Missing any of them turns the wait into a rejection.

Observed 2026-08-13 on 1.1 (build 947): internal IN_BETA_TESTING within minutes, external WAITING_FOR_BETA_REVIEW — the one-time cost of the 1.0 → 1.1 bump, paid so later 1.1 builds go straight out.

An App Store release (as opposed to a beta train) is a separate decision — see docs/RELEASING.md and the asc skill's release-flow reference.

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

Files

Just SKILL.md in skills/testflight-release of termio-sh/termio.

Open the folder on GitHubat commit af3b35b

Compare with similar skills

Testflight 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.

Testflight Release compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Testflight Release this skilltermio-sh/termio540—~2.5kAutomated safety check: WarnMIT
OdevioOdevio/Odevio-CLI423—~7.6kAutomated safety check: PassMIT
iOS App Store SubmitZestfulPulse/ios-app-store-submit142—~4.7kAutomated safety check: PassMIT
Remote Installericodesign/remote-installer106—~4kAutomated safety check: PassMIT
Asc Xcode Buildrorkai/app-store-connect-cli-skills1.1k2 repos~2.1kAutomated safety check: PassMIT
App Releaseglebis/claude-skills389—~1.4kAutomated safety check: PassMIT

Similar skills

  • Odevio

    Odevio/Odevio-CLI

    Take a Flutter project to an iPhone or the App Store with Odevio - build, sign and publish iOS apps from Windows, Linux or macOS with no Mac and no Xcode.

    423 GitHub stars~7.6k tokensUpdated 14 days ago
    MobileAuto-check passed
  • iOS App Store Submit

    ZestfulPulse/ios-app-store-submit

    Build, sign, and submit a Flutter/iOS app to the App Store Connect — covers Xcode archive/export, code signing (including headless-Mac keychain workarounds), the asc CLI for App Store Connect…

    142 GitHub stars~4.7k tokensUpdated 7 days ago
    MobileAuto-check passed
  • Remote Installer

    icodesign/remote-installer

    Put an iOS or Android build on a real phone or tablet over the air with the remote-installer CLI — it validates the build, opens a temporary HTTPS tunnel, and prints one or more install URLs plus QR…

    106 GitHub stars~4k tokensUpdated 8 days ago
    MobileAuto-check passed
  • Asc Xcode Build

    rorkai/app-store-connect-cli-skills

    Build, archive, generate export options, export, upload, and manage Xcode version/build numbers with the current asc xcode helpers.

    1.1k GitHub starsUsed in 2 repos~2.1k tokens
    MobileAuto-check passed
  • App Release

    glebis/claude-skills

    End-to-end pipeline for releasing an iOS / watchOS app to TestFlight and the App Store.

    389 GitHub stars~1.4k tokensUpdated 12 days ago
    MobileAuto-check passed
  • CI CD Setup

    rshankras/claude-code-apple-skills

    Generate CI/CD configuration for automated builds, tests, and distribution of iOS/macOS apps.

    783 GitHub stars~1.5k tokensUpdated 2 mo ago
    DevOps & CloudAuto-check: notes

More from termio-sh/termio

All 19 skills in this repo
  • Termio Bug Report

    termio-sh/termio

    Diagnose a termio hang, beachball, crash, or 'it froze again' from the evidence macOS and termio actually leave behind — live process samples, crash and CPU-burn reports, the unified log, the…

    540 GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • App Screenshot Debug

    termio-sh/termio

    Drive the running termio app via AppleScript / System Events to reach a UI state (focus the window, click a sidebar project, a terminal pane, a control), capture a pixel-accurate screenshot of just…

    540 GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed
  • Dia Source Analysis

    termio-sh/termio

    Analyze / reverse-engineer the locally installed Dia Browser mac app (The Browser Company; bundle id company.thebrowser.dia; shares ArcCore with Arc).

    540 GitHub stars~2.5k tokensUpdated yesterday
    Auto-check passed
  • Asc

    termio-sh/termio

    Drive App Store Connect from the terminal with the asc CLI — TestFlight builds, groups, testers and What to Test notes; App Store versions, metadata, keywords, screenshots and release notes…

    540 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • Issue Creator

    termio-sh/termio

    Turn vague customer or user feedback from pasted text, chat excerpts, or screenshots into a clear, evidence-backed GitHub issue without inventing requirements.

    540 GitHub stars~1.7k tokensUpdated yesterday
    Auto-check passed
  • Og Generation

    termio-sh/termio

    Regenerate the landing site's OG/social card (web/landing/public/og.webp) by rendering a temporary in-app route with the real hero WebGL aurora and screenshotting it with headless Chrome.

    540 GitHub stars~1k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Testflight Release

What does Testflight Release do?

Ship a new TestFlight build of the iOS companion (TermioMobile) — resolve the next build number against App Store Connect, archive, sign, export, upload, write the What to Test notes, and distribute. Testflight Release is an agent skill from termio-sh/termio. Ship a new TestFlight build of the iOS companion (TermioMobile) — resolve the next build number against App Store Connect, archive, sign, export, upload, write the What to Test notes, and distribute.

When should I use Testflight Release?

Testflight Release fits situations like: says ship a testflight build; update testflight; upload to testflight; push the ios app to testers.

How do I install Testflight Release in Claude Code?

Run `npx skills add termio-sh/termio --skill testflight-release -a claude-code`. Or copy the skill folder (skills/testflight-release in termio-sh/termio) into .claude/skills/testflight-release in your project. Claude Code loads it when a task matches its description.

How do I install Testflight Release in Codex?

Run `npx skills add termio-sh/termio --skill testflight-release -a codex`. Or copy the skill folder (skills/testflight-release in termio-sh/termio) into .agents/skills/testflight-release in your project. Codex loads it when a task matches its description.

Can I use Testflight 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 termio-sh/termio --skill testflight-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/testflight-release, .gemini/skills/testflight-release, .github/skills/testflight-release and .opencode/skills/testflight-release in your project.

What does Testflight Release need to run?

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

Does Testflight Release access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Testflight Release safe to install?

Our automated static check of SKILL.md flagged 1 warning(s): mentions a credentials file (ssh keys, cloud or package-manager tokens). Read the flagged lines before installing; the check is not a guarantee either way.

What licence does Testflight Release use?

Testflight 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 Testflight Release use?

About 2.5k tokens (SKILL.md is roughly 9.8k 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 Testflight Release?

Skills that share tags, products or a category with Testflight Release: Odevio (Odevio/Odevio-CLI, 423 stars), iOS App Store Submit (ZestfulPulse/ios-app-store-submit, 142 stars), Remote Installer (icodesign/remote-installer, 106 stars) and Asc Xcode Build (rorkai/app-store-connect-cli-skills, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Testflight Release?

termio-sh (a GitHub organization) maintains it in termio-sh/termio, which has 540 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 7, 2026.

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