Get started
Install wharfy, then hand it to your AI agent. Once a release works, move the run into CI — that’s the whole setup. wharfy is built to be run by your assistant, not memorised by you.
Before you begin
- Homebrew (macOS), Scoop (Windows), or the install script (Linux) — to install wharfy
- a GitHub repo for your binary — wharfy publishes its release artifacts there
- your binary — cross-built here if it’s Go, or already built by you, in any language
- the channels you want to own — a Homebrew tap, a Scoop bucket, a hosted apt/yum repo; set them up when you publish, not now
1. Install
macOS (Homebrew):
brew install shirodoromoto/wharfy/wharfy
Windows (Scoop):
scoop bucket add wharfy https://github.com/ShiroDoromoto/scoop-wharfy
scoop install wharfy
Linux:
curl -fsSL https://wharfy.io/install.sh | sh
2. Hand it to your AI
In your project, tell your assistant to run:
wharfy agent
That one command returns every command, its arguments, the order to use them in, and how to read the current state. Your AI reads it once and drives the release from there — build, release, publish, verify.
3. Put it in CI
A release usually belongs in GitHub Actions rather than on a laptop: the artifacts are built in the open, no signing key has to live on anyone’s machine, and build provenance can only be signed there — Actions hands the workflow the OIDC identity that signs it.
wharfy secrets
That prints the credentials to register, the tools the runner needs, and the
permissions: / env: blocks to paste into your workflow. wharfy never prompts and
never needs a TTY, so the commands you just ran by hand are the same ones the
workflow runs.
What stays deliberate is the trigger, not the machine: ship on a tag push or a manual dispatch, never on every merge.
What a release looks like
wharfy status # where am I? (what's built / released / published, and where)
wharfy build # cross-compile — or skip it entirely with prebuilt: → next: sign | release
wharfy release # upload the GitHub release, attest its provenance → next: publish
wharfy promote # make a prerelease you verified the latest one → next: publish
wharfy publish # write each owned channel; prepare gated ones → next: verify
wharfy verify # check every channel from the consumer's side
Every command also takes --json, and ends with a next: block — so neither you
nor your AI has to remember the order.