Release tooling for coding agents: check, make and publish a release to every channel a project ships to, from one config file per repository
agent-ship releases a project to its GitHub release, npm and a Homebrew tap from the project's ship.toml.
agent-ship checkjudges whether HEAD is ready to release and changes nothing.agent-ship releasebumps the version by what the Conventional Commits since the previous tag warrant, commits and tags it, and prints the command that pushes it; the owner pushes.- The pushed tag runs the project's
release.yml, which calls agent-ship's reusable workflow to publish to each channel. agent-ship status <tag>says whether each channel serves the version, andagent-ship doctorreports each credential the channels need and where it comes from.
SPEC.md states what the commands and the workflow must do.
agent-ship ships builds for two platforms: darwin-arm64, macOS on Apple silicon, and linux-x64.
With Homebrew:
brew install cniska/tap/agent-shipWith npm, which installs the package for your platform and needs no Bun:
npm install --global @cniska/agent-shipFrom a GitHub release, verify the tarball before you unpack it:
gh release download --repo cniska/agent-ship --pattern 'agent-ship-linux-x64.tar.gz' --pattern SHA256SUMS.txt
shasum -a 256 --check --ignore-missing SHA256SUMS.txt
gh attestation verify agent-ship-linux-x64.tar.gz --repo cniska/agent-ship
tar -xzf agent-ship-linux-x64.tar.gzThen put agent-ship on your PATH.
For Claude Code, the cniska-ship plugin tells each session how a release maps to these commands:
claude plugin install cniska-ship@cniskaTo run it from a checkout with Bun, follow Development.
A project that ships to a GitHub release, npm and a Homebrew tap repeats the same release flow in scripts of its own: gate the tree, bump the version, commit, tag, then build, attest, publish and repin in CI. Each copy drifts from the others. agent-ship holds the flow once, so each repository keeps only its ship.toml and a release.yml that calls the reusable workflow.
A release needs credentials on the machine and in CI. ship.toml names each one a channel reads and holds no secret, doctor reports where each one comes from without printing it, and the workflow masks each value it reads.
| Command | Does |
|---|---|
agent-ship check [<app>] |
Judge whether HEAD is ready to release and report the bump its commits warrant, changing nothing |
agent-ship release [<patch|minor|major|<version>>] [<app>] [--dry-run] |
Bump the version, commit and tag the release, and print the push command, or with --dry-run print what it would do |
agent-ship status <tag> |
Wait on the runs the tag started and say whether each channel serves the tag's version |
agent-ship doctor |
Check git, gh and each credential the channels need, with the fix for each that fails |
agent-ship, agent-ship --help |
List the commands and flags |
agent-ship --version |
Print the version |
Commands lists every command, its output, its refusals and ship.toml.
- Commands: every command, its output and refusals, and
ship.toml. - Releasing: the reusable release workflow, how a project calls it, and the owner's setup.
- Development: setup, checks and rules, for working on this repo.
- Contributing: how outside contributors propose a change.
agent-ship works on its own in any agent workflow, and is one of the optional add-ons to agent-skills, engineering skills for coding agents. The other add-ons:
- agent-task: task tracking for coding agents, the tasks running, in review and waiting to run
- agent-record: a session record for coding agents, every past session queryable and joined to its commits
- agent-gates: commit gates for coding agents, git hooks and CI checks that refuse a bad commit
- agent-worktree: task worktrees for coding agents, one checkout per task, set up and torn down by the project's own commands