01
Install
Download the disk image and drag Hermes to Applications. It runs on macOS 14 and up, Apple silicon and Intel, signed and notarized.
Download Hermes.dmgHermes drives the open source asc command line tool. Install it with Homebrew:
brew install asc
02
Your key
Make an API key in App Store Connect under Users and Access, Integrations. Download the .p8 file once, then hand it to asc:
asc auth login --name MyKey --key-id KEY_ID --issuer-id ISSUER_ID --private-key AuthKey.p8
Open Hermes and every app on the account shows up. The key stays on your Mac. There is no Hermes account and no server in between.
03
The window
The list shows every app with its live version on each platform and a dot for where it stands. Open one for its tabs:
- Status
- What to do next and what is in the way.
- Versions
- Every version on every platform. Submit or cancel.
- Metadata
- Store text in every language, with Apple's limits.
- Media
- Screenshots and previews by device.
- Builds
- Every build and its processing state. Upload .ipa and .pkg.
- TestFlight
- Groups, testers, What to Test, beta review.
- Reviews
- Ratings and reviews. Reply in place.
- Submissions
- Every App Review outcome, rejections included.
- Events
- In-app events.
- Purchases
- In-app purchases, subscriptions, prices and offers.
Read only is on by default. Every change shows the exact asc command and asks first.
04
MCP
The Hermes MCP server gives Claude and other agents the same view. One line, no clone. It needs uv and a signed in asc.
claude mcp add hermes -- uv run https://raw.githubusercontent.com/nulljosh/hermes/main/mcp/server.py
Read only unless you set HERMES_ALLOW_WRITES=1. Add --http to serve the same tools on 127.0.0.1:8787, as MCP at /mcp and plain JSON at /api/<tool>.
- fleet_status
- Newest version on each platform for every app, with its state.
- list_apps
- Every app with its id, name and bundle id.
- app_status
- Health, next action, blockers, latest build, review state.
- list_versions
- All App Store versions, newest first.
- list_builds
- Recent builds with processing state.
- list_reviews
- Customer reviews, newest first.
- review_history
- Every App Review submission and its outcome.
- reply_to_review
- Publish a reply. Writes only.
- submit_for_review
- Attach the newest build and submit. Writes only.
- open_rejections
- The open Resolution Center thread: Apple's message, the reasons, the thread to answer.
- app_facts
- Checked facts for an appeal: versions already approved, builds, the app's own source files and any shared with your other apps.
- saved_drafts
- The last Resolve All run, reply by reply.
- send_rejection_reply
- Send one Resolution Center reply. Writes only, never retried.
05
Skills
Three Claude Code skills ride on the MCP. hermes-status reads the whole fleet and leads with what is rejected. hermes-ship walks one version from build to App Review and confirms before every write. hermes-resolve answers rejections from checked facts and sends only on your yes.
git clone https://github.com/nulljosh/hermes cp -R hermes/skills/* ~/.claude/skills/
06
Build
SwiftUI, MIT licensed.
brew install xcodegen asc xcodegen generate && open Hermes.xcodeproj
How it works is in the whitepaper.
07
FAQ
- Does it cost anything?
- No. Hermes is free and open source.
- Where does my key go?
- Nowhere. asc keeps it on your Mac, and Hermes only talks to Apple.
- Can it break a live app?
- Not by accident. Read only is on until you turn it off, and every write asks first.
- Something wrong?
- Send feedback or open an issue on GitHub.