Baton: Skill for Claude Code

.agents/skills/testflight/SKILL.md

testflight is a skill for Claude Code, Codex from zhu-xiaowei/Baton. It costs 61 tokens per session (876 once invoked), scanned A, original, MIT.

An iOS release workflow that uploads a new build to TestFlight, Apple's service for distributing prerelease apps to testers.

In plain words
What is it for?
Use it to check whether an iOS build is ready, publish it through macOS or Xcode Cloud, and confirm its build number and tester-group status.
Why use it?
It prevents accidental publishing when the working tree has unapproved changes and separates readiness checks from actual uploads.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one. Also seen: reads .claude/ paths; installed under .agents/ (shared by several agents).

This is zhu-xiaowei/Baton's own configuration. It tells Claude Code and Codex how to work on Baton itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything Baton configures →

Reuse

Borrowing it

Nothing to install: this file belongs to zhu-xiaowei/Baton. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/zhu-xiaowei/Baton/main/.agents/skills/testflight/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/zhu-xiaowei/Baton

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for testflight

README.md
[![agentmods](https://agentmods.dev/badge/skills/zhu-xiaowei/baton/testflight/github.svg)](https://agentmods.dev/skills/zhu-xiaowei/baton/testflight)
Your own site
<a href="https://agentmods.dev/skills/zhu-xiaowei/baton/testflight"><img src="https://agentmods.dev/badge/skills/zhu-xiaowei/baton/testflight/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for testflight

Your own site · 80×15
<a href="https://agentmods.dev/skills/zhu-xiaowei/baton/testflight"><img src="https://agentmods.dev/badge/skills/zhu-xiaowei/baton/testflight.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 61 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 876 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00061 $0.00876
Opus 5.5 $0.00024 $0.00350
Sonnet 5.5 $0.00012 $0.00175
Haiku 4.5 $0.00006 $0.00088

Measured today against content hash 695a7bbe0fd3, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

testflight scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.agents/skills/testflight/SKILL.md · 71 lines

What it actually says

Baton TestFlight

Follow .claude/commands/testflight.md. A request to publish authorizes the release's source commits, branch creation, pushes, build-number bump, cloud run, TestFlight group assignment, the PR and merge after a successful release, and deletion of the release branch after the merge is confirmed. Perform these steps without asking for additional approval. Before publishing, inspect git status --short, including untracked files. Commit changes within the requested release scope automatically; preserve unrelated work, using an isolated checkout when needed.

On macOS, run npm run release:ios.

On Linux, publish from the fixed, unprotected release/testflight branch, not main:

  • Reuse release/testflight for every release. Fetch and merge the latest origin/main into it while preserving its release commits. If it does not exist, create it from the prepared release commit or latest origin/main. Do not create a new branch for each build number or force-push this branch.
  • Push the release source commit to Xcode Cloud's connected GitHub repository. Run node scripts/release-ios-cloud.mjs --dry-run as a preflight, then run npm run release:ios:cloud on that same branch in the same invocation. The cloud script commits and pushes its build-number bump before starting Xcode Cloud; a protected branch would reject that push.
  • Finish and verify the release before the automatic PR workflow below. Preserve branch protection.

If a protected-branch push fails after the script creates its bump commit, preserve that commit. Move it onto release/testflight automatically and push the branch. Rerun the dry-run and release on that branch; let the script decide whether the prepared build number is reusable instead of manually bumping again. No cloud run starts when that push fails.

For readiness questions, only inspect state and use the dry-run on Linux. Report the final build number, cloud run ID, and upload status; include a PR URL only if one exists. The cloud script adds valid builds to the internal Test group; confirm that state before saying testers can install the build. If group assignment fails after upload, report the existing build instead of starting another release.

If creating an Xcode Cloud run returns an unexplained HTTP 500, first remind the user to check for an updated Apple Developer Program License Agreement awaiting acceptance. Follow the agreement check in .claude/commands/testflight.md before further start attempts.

Wait until the TestFlight upload finishes, App Store Connect marks the build VALID, and the internal Test group is IN_BETA_TESTING. Only then automatically create or reuse a PR from the existing release/testflight branch to main, including the build-number bump and release changes. Do not create a temporary PR branch or ask for separate approval. Wait for its required CI checks and repository review requirements, resolve relevant failures within the release scope, and merge automatically when allowed. Use the repository's supported merge method and never bypass branch protection. Continue monitoring until the PR is actually merged and branch cleanup below is complete; starting an upload, opening a PR, or enabling auto-merge is not completion. Report the build number, upload and group status, PR URL, and merge result. Do not merge a PR whose release failed.

After confirming the PR is merged, delete release/testflight remotely and locally. If GitHub already deleted the remote branch, verify that it is gone. Switch the working tree to main before deleting the local branch. Do not restore the branch after merge; the next release recreates the same fixed branch name from the latest origin/main. Keep the branch if publication or merge fails so the release can be resumed.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. today Changed · +5 lines 695a7bbe0fd3
  2. 14d ago Changed · +6 lines · +17 tokens per session 5231661ebb01
  3. 16d ago Changed · +7 lines b9d368898c3e
  4. 18d ago Changed · +14 lines · -2 tokens per session 485515962b2e
  5. 19d ago Changed · +15 lines · +6 tokens per session a08553ba1f68
  6. 21d ago First seen · 24 lines · 40 tokens per session scan A c340f628cd2d

Subscribe to this mod's changes

testflight is a skill published in the GitHub repository zhu-xiaowei/Baton (14 stars, last pushed today), licensed MIT. It adds 61 tokens to every session and 876 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-08.

Related

Other skills, from other repositories

axiom-shipping

Use when preparing an app for App Store submission, handling rejections or appeals, managing App Store Connect and Xcode Cloud, or triaging TestFlight/Sentry crash corpora. Covers checklists, metadata, privacy manifests, age ratings, export compliance.

CharlesWiltgen/Axiom · 56 tokens

release-new-version

Use when the user wants to release a new Zafiro version — drafting bilingual release notes, deciding the next version number, bumping app/build.gradle.kts, tagging, and publishing to GitHub (main repo, optionally the Xposed repo).

niki914/zafiro · 54 tokens

asc-ad-hoc-distribution

Prepare, publish, resume, and verify private iOS release-testing installs with asc distribute. Use when distributing an IPA to registered devices outside TestFlight, reconciling ad hoc profiles, publishing through caller-owned S3-compatible storage, or diagnosing a resumable private distribution run.

rorkai/app-store-connect-cli-skills · 62 tokens

testflight-release

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'…

termio-sh/termio · 102 tokens

app-release

End-to-end pipeline for releasing an iOS / watchOS app to TestFlight and the App Store. Use when the user wants to publish, ship, or release an iOS/watchOS app, get a build onto TestFlight, archive and upload via xcodebuild, deploy a CloudKit schema to Production, set App Privacy or export compliance, mint a…

glebis/claude-skills · 166 tokens

suede-play-release

Suede AI Google Play Release Skills. Google Play release delivery with AAB preflight, test-track upload, exact versionCode promotion, staged rollout, locale notes, and API readback. Use when asked "promote this Android build" or to diagnose Play publishing access and prove the served release. NOT FOR: app building or…

JasonColapietro/suede-creator-skills · 97 tokens