Hermes

Docs

Install it, connect your key, hand it to your agents.

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.dmg

Hermes 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.