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.
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.
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add termio-sh/termio --skill testflight-release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install termio-sh/termio testflight-release --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "testflight-release" agent skill from https://github.com/termio-sh/termio/tree/main/skills/testflight-release into .claude/skills/testflight-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testflight-release", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/termio-sh/termio/tree/main/skills/testflight-releaseType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add termio-sh/termio --skill testflight-release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install termio-sh/termio testflight-release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/termio-sh/termio.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/testflight-release .agents/skills/testflight-release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "testflight-release" agent skill from https://github.com/termio-sh/termio/tree/main/skills/testflight-release into .agents/skills/testflight-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testflight-release", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add termio-sh/termio --skill testflight-release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install termio-sh/termio testflight-release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/termio-sh/termio.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/testflight-release .cursor/skills/testflight-release && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "testflight-release" agent skill from https://github.com/termio-sh/termio/tree/main/skills/testflight-release into .cursor/skills/testflight-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testflight-release", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/termio-sh/termio.git --path skills/testflight-release--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add termio-sh/termio --skill testflight-release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install termio-sh/termio testflight-release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/termio-sh/termio.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/testflight-release .gemini/skills/testflight-release && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "testflight-release" agent skill from https://github.com/termio-sh/termio/tree/main/skills/testflight-release into .gemini/skills/testflight-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testflight-release", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install termio-sh/termio testflight-releaseInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add termio-sh/termio --skill testflight-release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/termio-sh/termio.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/testflight-release .github/skills/testflight-release && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "testflight-release" agent skill from https://github.com/termio-sh/termio/tree/main/skills/testflight-release into .github/skills/testflight-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testflight-release", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add termio-sh/termio --skill testflight-release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install termio-sh/termio testflight-release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/termio-sh/termio.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/testflight-release .opencode/skills/testflight-release && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "testflight-release" agent skill from https://github.com/termio-sh/termio/tree/main/skills/testflight-release into .opencode/skills/testflight-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "testflight-release", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
testflight-releaseShip 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. 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.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit af3b35b. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
opensslgitxcodebuildFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
The automated check found patterns that need a careful read before installing.
t dist.p12 -k ~/Library/Keychains/login.keychain-db -T /usr/bin/codesignAutomated 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.
The full file from termio-sh/termio at commit af3b35b, republished under its MIT licence (© termio-sh). 993 words, ~2,458 tokens.
.claude/skills/testflight-release/SKILL.md (or your agent's skills folder).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.
| Thing | Value |
|---|---|
| App ID | 6790142237 (sh.termio.mobile, "Termio: Agentic Terminal") |
| Bundle ID resource | 97KQ9JGYL8 |
| Team | 5Y27G7B6D8, from ios/Signing.xcconfig — not the project file |
| Internal group | 7b62f012-b166-40df-ba19-e43c3a0b2c88 |
| Public Beta group | fe170244-643a-4c73-9c94-84ab44c254f9 (external, public link) |
| Signing assets | ~/Library/Developer/asc-signing/termio/ (mode 700, outside the repo) |
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:
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.pbxprojUploading a build number at or below the highest one in ASC is rejected, so never guess it from the repo.
Run from a clean worktree on the commit you want to ship (normally main).
Bump — the command above. It reports the number it chose.
Archive (Release, signed for distribution):
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 jsonExport. 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:
<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>xcodebuild -exportArchive \
-archivePath .asc/artifacts/TermioMobile.xcarchive \
-exportPath .asc/artifacts/export \
-exportOptionsPlist .asc/ExportOptions.plistIt still logs the DVTDeveloperAccountManager credential error; with manual
signing that is noise, not a failure. Check for ** EXPORT SUCCEEDED **.
Upload and wait for processing:
asc builds upload --app 6790142237 --ipa .asc/artifacts/export/TermioMobile.ipa --waitWhat to Test — required for external testers, good manners for internal:
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.
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:
asc builds add-groups --build-id "BUILD_ID" --group fe170244-643a-4c73-9c94-84ab44c254f9
asc testflight review submit --build-id "BUILD_ID" --confirmAdding 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.
Revert the pbxproj bump and delete ios/.asc/ (untracked build
artifacts, ~10 MB IPA plus the archive).
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:
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.
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.MARKETING_VERSION vs reusing itTwo different numbers move for two different reasons, and only one of them is free:
CURRENT_PROJECT_VERSION (build) | MARKETING_VERSION | |
|---|---|---|
| Moves | every upload | rarely, deliberately |
| Committed? | never (resolved against ASC, reverted after) | yes, its own commit |
| Cost | none | a 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:
asc testflight distribution view --build-id "BUILD_ID". If external already
reads WAITING_FOR_BETA_REVIEW, there is nothing useful to upload.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
Just SKILL.md in skills/testflight-release of termio-sh/termio.
Open the folder on GitHubat commit af3b35b
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Testflight Release this skilltermio-sh/termio | 540 | — | ~2.5k | Automated safety check: Warn | MIT | |
| OdevioOdevio/Odevio-CLI | 423 | — | ~7.6k | Automated safety check: Pass | MIT | |
| iOS App Store SubmitZestfulPulse/ios-app-store-submit | 142 | — | ~4.7k | Automated safety check: Pass | MIT | |
| Remote Installericodesign/remote-installer | 106 | — | ~4k | Automated safety check: Pass | MIT | |
| Asc Xcode Buildrorkai/app-store-connect-cli-skills | 1.1k | 2 repos | ~2.1k | Automated safety check: Pass | MIT | |
| App Releaseglebis/claude-skills | 389 | — | ~1.4k | Automated safety check: Pass | MIT |
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.
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…
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…
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.
glebis/claude-skills
End-to-end pipeline for releasing an iOS / watchOS app to TestFlight and the App Store.
rshankras/claude-code-apple-skills
Generate CI/CD configuration for automated builds, tests, and distribution of iOS/macOS apps.
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…
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…
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).
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…
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.
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.
Works with
Categories
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.
Testflight Release fits situations like: says ship a testflight build; update testflight; upload to testflight; push the ios app to testers.
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.
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.
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.
Going by SKILL.md and its folder, Testflight Release needs the command-line tools its instructions call (openssl, git and xcodebuild).
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.
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.
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.
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.
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.
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.