Agent skill

Publish App Store Version

by KeeForge in KeeForge/KeeForge

Prepare and publish an already-built KeeForge iOS or macOS version through the App Store Connect API using an API key.

GPL-3.0Auto-check passedMobile

Install Publish App Store Version

skills CLI
$ npx skills add KeeForge/KeeForge --skill publish-app-store-version -a claude-code

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

GitHub CLI
$ gh skill install KeeForge/KeeForge publish-app-store-version --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/KeeForge/KeeForge.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/publish-app-store-version .claude/skills/publish-app-store-version && 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
publish-app-store-version
GitHub stars
114
Token cost
~3.5k tokens
SKILL.md length
1,829 words
Files
4 (incl. references)
Skills in repo
9
Repo updated
First seen
Licence
GPL-3.0

At a glance

Prepare and publish an already-built KeeForge iOS or macOS version through the App Store Connect API using an API key.

  • Works in 8 steps: Inspect each platform → Create or reuse the exact version and… → Verify export compliance → …
  • Uploaded-build selection
  • SKILL.md covers Scope and authorization, Credentials stay local, Release inputs and platform… and Workflow, plus 1 more section
  • Reaches api.appstoreconnect.apple.com; needs APP_STORE_CONNECT_KEY_ID

What it does

Publish App Store Version is an agent skill from KeeForge/KeeForge. Prepare and publish an already-built KeeForge iOS or macOS version through the App Store Connect API using an API key. Use for uploaded-build selection, localized listing and release notes, reviewer attachments, release settings, and App Review staging or submission. Do not use for version bumps, release candidates, tags, compatibility gates, or archive creation; use prepare-release or respin-release for candidates, and ship-release for coordinated production publication.

Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `agents/openai.yaml`, `mac-listing-metadata.md` and `references/api-operations.md`).

It sits in Mobile, covering App store release, Customer feedback analysis and Changelog and release notes. It works with App Store Connect, iOS and macOS. The repository describes itself as: KeePass-compatible password manager for iPhone, iPad, and Mac. The licence is GPL-3.0.

When your agent uses it

  • Uploaded-build selection
  • Localized listing and release notes
  • Reviewer attachments
  • Release settings

Example prompts

  • “/publish-app-store-version”

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Inspect each platform
  2. Create or reuse the exact version and attach its build
  3. Verify export compliance
  4. Save localized copy and verify screenshots
  5. Verify reviewer details and fixture
  6. Preserve release behavior and unrelated settings
  7. Stage a review draft and stop
  8. Submit only the authorized platform and candidate

What it can do on your machine

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

    No scripts in the folder and no shell commands in SKILL.md.

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

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • api.appstoreconnect.apple.com

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

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • APP_STORE_CONNECT_KEY_ID

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

Context cost

Publish App Store Version loads about 3.5k tokens when it runs, and up to ~6k if it reads all its reference files. Until then it costs about 126 tokens; SKILL.md has 1,829 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~126
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~6k

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 KeeForge/KeeForge at commit b04a461, republished under its GPL-3.0 licence (© KeeForge). 1,829 words, ~3,503 tokens.

Download SKILL.mdSave it as .claude/skills/publish-app-store-version/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
publish-app-store-version
description
Prepare and publish an already-built KeeForge iOS or macOS version through the App Store Connect API using an API key. Use for uploaded-build selection, localized listing and release notes, reviewer attachments, release settings, and App Review staging or submission. Do not use for version bumps, release candidates, tags, compatibility gates, or archive creation; use prepare-release or respin-release for candidates, and ship-release for coordinated production publication.

Publish KeeForge App Store Version

Scope and authorization

Use the documented App Store Connect REST API at https://api.appstoreconnect.apple.com with API-key authentication. No signed-in browser, session cookies, or private website APIs are required. If an operation is unavailable through the public API or the key lacks permission, report the specific blocker. Do not silently switch to browser automation or broaden key access.

Operate only on the requested platforms and fields. Prepare localization, attachment, and review-draft writes within the authorized scope. Show the English release-note draft before saving public copy unless already approved. Retain the version-creation and final-submission confirmation boundaries below.

Staging ends before final submission. PATCH /v1/reviewSubmissions/{id} with submitted: true sends the contents to Apple; it is not a validation or staging request. Obtain a separate explicit action-time confirmation immediately before each platform's final submission, naming its exact version and build. Approval for iOS does not imply approval for macOS. A request to prepare everything before submission authorizes neither submission nor production release. Never use the legacy appStoreVersionSubmissions POST as a way to stage a draft.

Beta App Review, external TestFlight distribution, production submission, production release, and legal declarations are separate actions. Perform them only within the user's explicit scope. Do not add a platform, change purchase configuration, or change availability as a side effect of publishing an existing platform.

Credentials stay local

Read applicable private local guidance for credential discovery. Otherwise use configured environment variables or a user-specified private environment file:

  • APP_STORE_CONNECT_KEY_ID
  • APP_STORE_CONNECT_ISSUER_ID for a team API key
  • APP_STORE_CONNECT_KEY_PATH for the private .p8 key

The public skill must contain no actual key or issuer IDs, credential filenames, personal filesystem paths, reviewer contact details, or tokens. Keep machine-specific discovery paths in private, Git-excluded local guidance. Do not copy the credentials into this skill, scratch artifacts, release manifests, issues, commits, or terminal output. Parse an environment file as data; do not execute its contents. Resolve configured home-relative paths in process.

Generate a short-lived ES256 JWT using an established library such as PyJWT with cryptography. For a team key use iss, iat, exp, and aud: appstoreconnect-v1; header fields are kid, typ: JWT, and alg: ES256. A two-minute lifetime suits a preflight; keep other tokens at or below 20 minutes and renew during longer work. Individual keys use sub: user instead of iss; confirm key type rather than guessing from a missing issuer.

Keep the key and JWT in memory. Send the bearer token only to the API origin above. Do not put it in process arguments, shell traces, HTTP debug output, or a printed request object. Disable automatic redirects for authenticated requests. Upload URLs have their own authorization and must not receive the ASC bearer token.

Start with a read-only app lookup to verify authentication and app identity. A successful GET proves read access only, not permission to submit or release. For 401, check token expiry, clock, and configured key type; for 403, report the missing permission without changing roles.

See API operations for endpoints, JSON:API request shapes, upload handling, and current Apple documentation. Verify the current documented schema before using a field not covered there.

Release inputs and platform identity

KeeForge has one app record with separate IOS and MAC_OS versions, builds, localizations, screenshots, and review submissions. Resolve the app from the handoff or the repository's main bundle identifier, then confirm its identity. Do not select an app by display name alone.

The prepare-release and respin-release skills prepare the candidate; after soak, ship-release hands off the accepted release manifest. Require that handoff at scratch/release-manifests/{version}-b{repoBuild}.json. Match the marketing version, repo build, RC tag/SHA, iosTestFlightBuild, macTestFlightBuild, and platform build IDs. Both builds must come from the accepted RC; directCFBundleVersion must equal repoBuild. Verify the recorded external TestFlight soak and direct-channel evidence. Internal-only testing and Xcode Cloud upload success do not establish an accepted external soak.

The direct-download Mac artifact is outside this skill: verify its handoff evidence but never upload, notarize, rebuild, or release it here. Select the existing accepted App Store builds; never substitute the newest build, trigger CI, bump versions, or make an archive. If a required manifest mapping or build is missing, stop and report it. An existing upload may still be processing; bounded polling is allowed, but do not wait for an unrequested new build.

For a narrowly requested listing correction or read-only investigation, inspect the specified record without requiring a release manifest. That scope does not authorize changing its build, staging a different candidate, or submitting it.

Other inputs:

  • Read only the requested version's CHANGELOG.md section, never Unreleased.
  • Preserve existing reviewer notes and contact details unless incorrect. The disposable reviewer fixture is test.kdbx.zip, with password testpassword123; resolve its local source from private guidance or user input. Never substitute a personal database.
  • For Mac listing/reviewer copy, read mac-listing-metadata.md. It is a historical saved-copy reference, not live submission or release authorization. Update it after an authorized Mac copy change with redacted readback evidence only.
  • Enumerate each version's actual localizations; the App Store list can differ from the app's shipped languages. Do not assume seven locales or add a locale just because the app supports it.

Workflow

1. Inspect each platform

Read the requested version, its attached build, localizations, reviewer details/attachments, screenshot sets, release settings, availability, and existing review submissions/items. Follow pagination, including nested relationship lists. Record only the non-secret IDs and state needed for the task; summarize reviewer contact completeness without printing personal contact values.

Match the build's preReleaseVersion.version and preReleaseVersion.platform as well as its ID and build.version (the build number). API processingState: VALID means processing succeeded; it is distinct from an asset's COMPLETE state. Reject failed/invalid builds and buildAudienceType: INTERNAL_ONLY for production. Inspect beta eligibility and the accepted soak evidence rather than interpreting processing success as test distribution or approval.

If a version is already submitted, in review, or released, report its actual state and use only operations valid for the requested correction. Do not cancel, withdraw, recreate, or resubmit it to force it through the preparation path.

2. Create or reuse the exact version and attach its build

Reuse the matching platform/version record. If absent, confirm creation immediately before POSTing an appStoreVersions resource related to the app, with the exact platform, versionString, and intended releaseType. Coordinate KeeForge releases with MANUAL unless the owner explicitly chooses otherwise. Check for an existing record again after an ambiguous POST outcome.

PATCH the version's build relationship with the exact manifest build ID. GET that relationship and build afterward and recheck the full platform/version/build mapping. If Apple rejects the build, report the error instead of choosing another candidate.

Show full SKILL.md (745 more words)Show less
3. Verify export compliance

Read the selected build's usesNonExemptEncryption and any associated encryption declaration. Both app plists declare ITSAppUsesNonExemptEncryption=false, but that source declaration is not proof that the selected upload has resolved compliance. Verify both platforms separately.

Do not automatically PATCH a missing declaration to false. New encryption answers, documents, or France-related declarations require the exact current question/field choices and explicit owner/legal confirmation at action time. The accepted prior record is context, not authorization to reuse an answer. Preserve France availability unless the owner explicitly decides otherwise. If a required legal workflow is unsupported by the public API, identify the manual action needed.

4. Save localized copy and verify screenshots

Draft concise user-facing release notes from the versioned changelog, mentioning minimum-OS changes. Save approved whatsNew through appStoreVersionLocalizations; translate the same meaning into every live locale. Keep KeeForge, KeePass, KDBX, AutoFill, WebDAV, TOTP, passkey, and iOS recognizable. Read back each field after saving and check documented field limits. Do not change descriptions, keywords, URLs, or other listing fields unless in scope.

Verify the version's screenshot sets and processed assets, including inherited galleries. iOS screenshots do not satisfy macOS. When new Mac screenshots are requested, use KeeForgeMacUITests/MacScreenshotAuditUITests exports and ci_scripts/make_appstore_screenshots.py --platform mac --input-dir <export> for the seven 2880×1800 images; read the test folder's guidance before capturing. Upload only the appropriate platform assets using the reservation/upload/commit protocol in the API reference.

5. Verify reviewer details and fixture

Read appStoreReviewDetail: preserve the contact fields, confirm sign-in is unnecessary for KeeForge, and keep notes explaining how to open the attached fixture with its password. Mac notes should describe File > Open Database and System Settings > General > AutoFill & Passwords; iOS notes should describe its own import and AutoFill flow.

List review attachments. Reuse an existing test.kdbx.zip only after confirming successful asset processing. If absent, resolve and verify the disposable fixture, reserve an appStoreReviewAttachments resource, upload its exact byte ranges, commit the checksum, and poll until assetDeliveryState.state: COMPLETE. A filename or successful reservation alone is not evidence of an uploaded attachment. If the fixture is unavailable, ask for its path.

6. Preserve release behavior and unrelated settings

For coordinated releases, verify both version records use releaseType: MANUAL. Preserve any existing phased-release configuration; create or change one only when explicitly requested. Keep existing ratings and do not send a rating-reset operation. Preserve availability, pricing, privacy, age ratings, and purchase configuration. If a setting cannot be verified through the current public API, report it as unverified rather than claiming the UI-equivalent check passed.

7. Stage a review draft and stop

For each platform, reuse an appropriate unsubmitted reviewSubmissions draft, or create one related to the app with the explicit platform. List its items before editing. Do not alter a draft containing unrelated versions/items or combine the two platforms into one submission.

Add the exact version via reviewSubmissionItems only if it is not already present. Resolve concrete validation errors within scope and read back the submission, item, version, and build. The staging target is a READY_FOR_REVIEW submission with the exact version's item also READY_FOR_REVIEW and no submitted date. Report the version's own state separately; it is not interchangeable with the submission or item state. These checks cannot guarantee Apple will accept final submission; never submit just to discover additional validation errors.

Stop here for a prepare-only request. Report each platform's version ID, build ID/number, submission ID/state, item state, release setting, and any remaining blocker. State explicitly that no submitted: true request was sent.

8. Submit only the authorized platform and candidate

Immediately before an authorized submission, re-fetch the draft and its items and verify the platform/version/build and release settings still match the authorization. PATCH that submission with submitted: true once, then GET its resulting state. On a timeout or ambiguous error, reconcile the live state before retrying. Do not assume a transport error means nothing happened.

Report each platform's resulting state independently. Stop after submission; a manual production release uses appStoreVersionReleaseRequests and requires separate explicit release authorization plus the ship-release skill's gates. This skill must not release a held version as a side effect of submitting it.

Completion evidence

For each requested platform report the exact candidate, saved locales, screenshot and fixture processing, compliance status, release setting, and review state. Store only sanitized evidence in the release manifest: record IDs, build mapping, states, and timestamps. Exclude credentials, JWTs, signed upload URLs, private source paths, reviewer contacts, and complete API response dumps. Do not mark a blocked or partially staged platform complete because the other platform succeeded.

© KeeForge, GPL-3.0. 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 3 other files (references) in .agents/skills/publish-app-store-version of KeeForge/KeeForge.

  • SKILL.md
  • agents/openai.yaml
  • mac-listing-metadata.md
  • references/api-operations.md

Open the folder on GitHubat commit b04a461

Compare with similar skills

Publish App Store Version 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.

Publish App Store Version compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Publish App Store Version this skillKeeForge/KeeForge114—~3.5kAutomated safety check: PassGPL-3.0
Releasevaayne/mori303—~1.2kAutomated safety check: PassMIT
Testflightkmworks/kmreader111—~403Automated safety check: PassMIT
Appstore Releasekmworks/kmreader111—~2.5kAutomated safety check: PassMIT
App Store Preflight Skillstruongduy2611/app-store-preflight-skills1.4k—~1.4kAutomated safety check: PassMIT
OdevioOdevio/Odevio-CLI423—~7.6kAutomated safety check: PassMIT

Similar skills

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

    kmworks/kmreader

    Distribute KMReader builds to TestFlight groups via the asc CLI.

    111 GitHub stars~403 tokensUpdated today
    MobileAuto-check passed
  • Appstore Release

    kmworks/kmreader

    Coordinate the KMReader App Store release workflow. An agent skill from kmworks/kmreader.

    111 GitHub stars~2.5k tokensUpdated today
    MobileAuto-check passed
  • App Store Preflight Skills

    truongduy2611/app-store-preflight-skills

    Scan an iOS/macOS Xcode project for common App Store rejection patterns before submission.

    1.4k GitHub stars~1.4k tokensUpdated 4 mo ago
    MobileAuto-check passed
  • 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 15 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

More from KeeForge/KeeForge

All 9 skills in this repo
  • Ship Release

    KeeForge/KeeForge

    Ship an accepted, soaked KeeForge candidate across iOS, Mac App Store, and direct Mac.

    114 GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed
  • Test Audit

    KeeForge/KeeForge

    Assess KeeForge test quality, redundant coverage, and test-support complexity; audit a selected subsystem or apply an authoring checklist while changing tests.

    114 GitHub stars~2.1k tokensUpdated yesterday
    Auto-check passed
  • Keeforge GitHub Issues

    KeeForge/KeeForge

    Create, edit, comment on, close, reopen, classify, or change project fields for issues in KeeForge/KeeForge.

    114 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • Pre Release Review

    KeeForge/KeeForge

    Statically review KeeForge changes since a shipped release for behavior risks, documentation inconsistencies, i18n gaps, and missing test coverage.

    114 GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed
  • Prepare Release

    KeeForge/KeeForge

    Prepare the first KeeForge candidate for a new marketing version, including minor/major releases and patches or hotfixes to shipped versions.

    114 GitHub stars~572 tokensUpdated yesterday
    Auto-check passed
  • Respin Release

    KeeForge/KeeForge

    Replace an unshipped KeeForge candidate after a fix on an existing release branch.

    114 GitHub stars~914 tokensUpdated yesterday
    Auto-check passed

Questions about Publish App Store Version

What does Publish App Store Version do?

Prepare and publish an already-built KeeForge iOS or macOS version through the App Store Connect API using an API key. Publish App Store Version is an agent skill from KeeForge/KeeForge. Prepare and publish an already-built KeeForge iOS or macOS version through the App Store Connect API using an API key.

When should I use Publish App Store Version?

Publish App Store Version fits situations like: uploaded-build selection; localized listing and release notes; reviewer attachments; release settings.

How do I install Publish App Store Version in Claude Code?

Run `npx skills add KeeForge/KeeForge --skill publish-app-store-version -a claude-code`. Or copy the skill folder (.agents/skills/publish-app-store-version in KeeForge/KeeForge) into .claude/skills/publish-app-store-version in your project. Claude Code loads it when a task matches its description.

How do I install Publish App Store Version in Codex?

Run `npx skills add KeeForge/KeeForge --skill publish-app-store-version -a codex`. Or copy the skill folder (.agents/skills/publish-app-store-version in KeeForge/KeeForge) into .agents/skills/publish-app-store-version in your project. Codex loads it when a task matches its description.

Can I use Publish App Store Version 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 KeeForge/KeeForge --skill publish-app-store-version -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/publish-app-store-version, .gemini/skills/publish-app-store-version, .github/skills/publish-app-store-version and .opencode/skills/publish-app-store-version in your project.

What does Publish App Store Version need to run?

Going by SKILL.md and its folder, Publish App Store Version needs credentials named APP_STORE_CONNECT_KEY_ID.

Does Publish App Store Version access the network?

SKILL.md names 1 domain. In commands or code: api.appstoreconnect.apple.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Publish App Store Version 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 Publish App Store Version use?

Publish App Store Version is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Publish App Store Version 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. Its references folder adds about 2.5k tokens, read only when the agent opens those files.

What are the alternatives to Publish App Store Version?

Skills that share tags, products or a category with Publish App Store Version: Release (vaayne/mori, 303 stars), Testflight (kmworks/kmreader, 111 stars), Appstore Release (kmworks/kmreader, 111 stars) and App Store Preflight Skills (truongduy2611/app-store-preflight-skills, 1.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Publish App Store Version?

KeeForge (a GitHub organization) maintains it in KeeForge/KeeForge, which has 114 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 8, 2026.

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