Skip to content

Guide · Agent skill

How to use the macOS App Release Helper agent skill (release-mac-app)

Updated · written with AI from the project's own documentation and checked against our catalogue data

The release-mac-app skill is a set of instructions and helper scripts that tells an AI agent how to release a Sparkle-updated macOS app through GitHub Releases. It is aimed at indie developers and maintainers who ship several apps and want the same release steps every time. After this guide you will know how to install the skill, how to ask an agent to use it, what your repo needs before it will work, and which safety limits apply.

macOS App Release Helpersteipete/agent-scripts · MIT

Quick start

  1. 1Download and unzip the skill. Download the release-mac-app ZIP from this page and unzip it. Place the folder in ~/.claude/skills/ or a project's .claude/skills/, or upload it under Settings → Capabilities → Skills in the Claude apps.
  2. 2Add the manifest to your repo. Create .mac-release.env at the root of your app repo with the required entries and no secrets.
  3. 3Set up signing and keys. Store the Sparkle EdDSA key in 1Password or Keychain, and prepare a dedicated Developer ID release keychain if you release from this machine.
  4. 4Ask for a status check. Start the agent in the repo and request a release status check using release-mac-app. Review the output before continuing.
  5. 5Generate notes and appcast. Ask the agent for release notes and appcast generation, then check the result yourself.
  6. 6Verify and check assets. Ask for verify-appcast and check-assets so the agent confirms the published feed and uploaded files.
  7. 7Run the release with supervision. Only ask for the release command once the earlier checks pass, and watch each step the agent reports.

What an agent skill is and what this one does

An agent skill is a folder with a SKILL.md file that an AI agent reads to learn a fixed procedure. This skill covers the release work for macOS apps that use Sparkle for updates: status checks, release notes, appcast generation and verification, and asset checks. Its name is release-mac-app and its SKILL.md lists the commands the agent should run through the bundled scripts/mac-release helper.

The skill is a workflow guide plus helper scripts. It is not a general app builder, and it does not create signing credentials for you.

  • Reads the repo's .mac-release.env manifest before doing anything else.
  • Runs scripts/mac-release for shared release, appcast and verify work.
  • Keeps app-specific build, package and signing behaviour in your repo scripts.
  • Avoids deleting or retagging a release after a failure; the agent is told to inspect existing state and resume the failed step.

Install the release-mac-app skill

Download the ZIP for the skill from this page and unzip it. To make it available to Claude Code for all your projects, place the folder in ~/.claude/skills/. To limit it to one project, place it in that project's .claude/skills/ folder.

If you use the Claude apps instead, upload the skill under Settings → Capabilities → Skills.

  • Personal, all projects: ~/.claude/skills/
  • Single project: <your-project>/.claude/skills/
  • Claude apps: Settings → Capabilities → Skills, then upload

Prepare your app repo

The skill assumes a specific setup. Each app repo needs a .mac-release.env file at its root. The file is the repo-owned release manifest and must contain no secrets.

The required entries are MAC_RELEASE_APP_NAME, MAC_RELEASE_REPO, MAC_RELEASE_BUNDLE_ID, MAC_RELEASE_VERSION_FILE, MAC_RELEASE_APPCAST, MAC_RELEASE_FEED_URL, MAC_RELEASE_DOWNLOAD_URL_PREFIX and MAC_RELEASE_APP_ZIP. You also need either MAC_RELEASE_INFO_PLIST or MAC_RELEASE_SUPUBLIC_ED_KEY.

MAC_RELEASE_PACKAGE_CMD is required only for the release command. Status, notes, changelog-html, verify-appcast and check-assets do not need it.

  • MAC_RELEASE_APP_NAME
  • MAC_RELEASE_REPO
  • MAC_RELEASE_BUNDLE_ID
  • MAC_RELEASE_VERSION_FILE
  • MAC_RELEASE_APPCAST
  • MAC_RELEASE_FEED_URL
  • MAC_RELEASE_DOWNLOAD_URL_PREFIX
  • MAC_RELEASE_APP_ZIP
  • MAC_RELEASE_INFO_PLIST or MAC_RELEASE_SUPUBLIC_ED_KEY

Trigger the skill with a natural request

You do not need to type commands yourself. Open your app repo, start the agent and describe the task in plain language, naming the skill or the kind of work. The agent should read .mac-release.env first and then use the matching helper command.

Good requests say what you want checked or produced, for example a status check before a release, release notes for a version, or verification of the published appcast.

  • "Use release-mac-app to check the release status of this app."
  • "Use release-mac-app to draft release notes for the next version."
  • "Use release-mac-app to verify the appcast for the current version."
  • "Use release-mac-app to check the assets on the latest GitHub Release."

Know the commands the agent will run

The skill lists these mac-release subcommands. You can read them to understand what the agent is about to do. Each command is run from the skill's scripts folder, and the agent should execute mac-release directly rather than through plain bash.

verify-appcast uses only SUPublicEDKey. It needs no private key, Keychain or 1Password access.

  • status
  • notes [version] [output.md]
  • changelog-html <version> [CHANGELOG.md]
  • make-appcast <zip> [feed-url]
  • verify-appcast [version]
  • check-assets [tag]
  • release
  • codesign-run [--with-package-secrets] -- <command> [args...]
  • package-run -- <command> [args...]
/Users/steipete/Projects/agent-scripts/skills/release-mac-app/scripts/mac-release status

Understand the signing and credential rules

For the EdDSA key that signs Sparkle updates, the skill prefers MAC_RELEASE_SPARKLE_OP_REF when the key lives in 1Password. Otherwise it prefers Keychain Sparkle signing. SPARKLE_PRIVATE_KEY_FILE is only an explicit local override. The helper resolves the 1Password reference in a shared tmux session, writes a temporary key file with mode 0600 and deletes it afterwards.

Non-interactive Developer ID signing needs a dedicated, replaceable release keychain separate from your default keychain. The skill says the keychain must contain exactly one signing private key. The skill is written so that secrets stay out of printed output.

  • Prefer MAC_RELEASE_SPARKLE_OP_REF for headless signing when the key is in 1Password.
  • Use Keychain Sparkle signing otherwise.
  • MAC_RELEASE_SIGNING_KEY_FILE is a local fallback path only.
  • Set MAC_RELEASE_CODESIGN_PASSWORDLESS=1 only for a canonical passwordless, never-locking release keychain.

Safety notes: scripts and network access

This skill runs scripts and uses the network. The release path can publish a GitHub Release and an appcast, and a bad or unsigned release reaches users, so review what the agent proposes before it runs release. The skill's own rules say uploads go to a draft before publication and that a failed release must be preserved rather than deleted.

Do not use the skill without an existing Developer ID signing setup and release keys. It cannot create them, and misuse could publish a bad or unsigned release.

  • Uses the network: yes. Runs scripts: yes.
  • Upload app and dSYM assets to a draft before publication.
  • After a failure, inspect existing state and resume the failed step.
  • Never print private key material.
  • Do not retry 1Password reads in a fresh shell; rerun only from the same tmux session after explicit direction.

What people use it for

  • Checking release status and pending steps before shipping a Sparkle-updated app.
  • Generating release notes and changelog HTML from the repo's changelog for a given version.
  • Regenerating and verifying the appcast feed after a new build.
  • Checking that the app and dSYM assets are present on a GitHub Release.
  • Running the same release steps across several Sparkle-updated macOS apps such as the ones named in the source.

Frequently asked questions

How do I install the release-mac-app skill?

Download the ZIP from this page and unzip it into ~/.claude/skills/ for all projects, or into a project's .claude/skills/ folder for one project. In the Claude apps you can upload it under Settings → Capabilities → Skills.

What do I need to use release-mac-app?

You need macOS with bash, git and the GitHub CLI (gh), Sparkle tooling and an EdDSA signing key. A Developer ID Application signing identity and a dedicated release keychain are needed only for releasing, and the 1Password CLI and tmux are needed if you use 1Password references.

Is release-mac-app free?

The skill is published under the MIT licence. The source does not describe any paid tier.

Does this skill work for apps that don't use Sparkle or GitHub Releases?

No. The manifest and commands assume Sparkle updates and GitHub Releases, so apps without that setup are not a good fit.

Can the skill create my signing keys or certificates?

No. The skill cannot create credentials. You need an existing Developer ID signing setup and release keys before using it.

Will the skill leak my signing keys into logs?

The skill's rules say never to print private key material and to keep secrets out of printed output. Its manifest must contain no secrets, and 1Password references are resolved into a temporary file that is removed afterwards.

New agent skills, repos and AI tools — every week

The best new skills and open-source projects, the fastest-growing repos, and one free prompt. Five minutes to read. Unsubscribe anytime.

Our verdict

Use release-mac-app if you ship Sparkle-updated macOS apps through GitHub Releases and want an agent to follow the same release steps for each one. Pick something else if your apps do not use Sparkle or GitHub Releases, or if you do not yet have a Developer ID signing setup and release keys, because the skill cannot create them and a mistake could publish an unsigned release.

Download the skill