Ship one binary to every channel.

Hand it a binary you already built — it ships to Homebrew, Scoop, apt/rpm and containers, in any language, and always knows where each version landed.

Built to be driven by your AI agent. The whole tool describes itself in its output, so an agent reads one command and runs the release.

Get started →
$ brew install shirodoromoto/wharfy/wharfy
$ scoop bucket add wharfy https://github.com/ShiroDoromoto/scoop-wharfy
$ scoop install wharfy
$ curl -fsSL https://wharfy.io/install.sh | sh

A release, top to bottom — one run. Every command takes --json and ends with a next: block, so you (or your agent) just follow the output. Nothing prompts and every credential comes from the environment, so the same commands run on your laptop and in GitHub Actions.

Hand it to your AI. One read returns every command, channel, and order — then it drives, no docs to hunt.

$ wharfy agent
wharfy — ship one binary to every channel. Read this once, then drive.
commands agent · status · build · sign · release · promote · publish · verify
channels homebrew cask scoop apt rpm container aur goinstall script · winget, homebrew-core (gated)
every command takes --json and ends with a next: block.
next: wharfy status

Build here, or bring your own. For Go it cross-builds every os/arch in one command. Binaries from any other language go in prebuilt: — wharfy ships those exact bytes and never builds at all.

$ wharfy build
✓ built 6 artifacts → .wharfy/dist
next: wharfy sign · wharfy release

Verify before anyone can see it. The real artifacts go up and download from their public URLs, but latest still serves the previous version — so you install what CI just built, on a real machine, before a single user gets it.

$ wharfy release --yes --prerelease
✓ release 0.22.0 uploaded · prerelease (users stay on 0.21.0)
✓ build provenance attested
next: wharfy verify --version 0.22.0 · wharfy promote --yes

Non-destructive by default. It prints the plan and writes nothing until --yes. Owned channels publish, gated ones get a tracked PR — and a version still in prerelease is refused outright.

$ wharfy publish
✓ plan: 8 channel(s)
next: wharfy publish --yes # apply all channels, one release

Always know where each version landed. "How did I ship last time?" stops being a question.

$ wharfy status
wharfy v0.22.0 · build: ok (6 artifacts)
homebrew probed published 0.22.0
scoop probed published 0.22.0
releases recorded published 0.22.0
script probed published 0.22.0
goinstall probed published v0.22.0
apt probed published 0.22.0
rpm probed published 0.22.0
winget probed pending
next: wharfy verify

Stop hand-writing a different manifest for every channel.

Push a tag. Your agent and your CI take it from there.