shipmill
The open-source AI software factory for GitHub. Agents triage your issues, fix them, and land the pull requests; release lanes cut, publish, deploy, and roll back by a policy you write. Everything runs on GitHub, and you stay in charge.
issue ─▶ triage ─▶ fix ─▶ review & land ─▶ release ─▶ deploy ─▶ watch
agent agent agent policy policy agent
Why shipmill
Coding agents can write a fix. Getting that fix to users is the rest of the work: deciding which issues deserve one, reviewing the pull request, waiting for green CI, cutting a release, publishing it, telling the reporter, and noticing when production breaks. shipmill does that rest, end to end, on any GitHub repository.
- Issue to release, not just issue to PR. One pipeline from a new issue to a published, deployed, and announced release
- Policy, not prompts, decides what ships. A single file,
.github/shipmill.toml, says which lanes release and when (dev,rc,stable,hotfix), what gates hold them, and how far automation may go - You stay in control. Each stage runs at
observe,propose, oract; oneshipmill-holdissue, opened from your phone, stops everything - No server, no state of its own. GitHub is the database: issues, labels, pull requests, tags, deployments; nothing lives outside your repository
- Releases you can trust. CI runs on the exact release commit before it is tagged; a stable release ships the code a pre-release already soaked; a failing deploy rolls back and opens an incident
How it works
| Stage | Done by | What happens |
|---|---|---|
| Intake | product-intake skill |
Feature requests and discussions grouped into opportunities you accept or decline |
| Triage | github-issue-triage skill |
A verdict on every issue (implement, feature, postpone, clarify), a comment, labels, one PR per fix; a feature gets a spec first |
| Fix | github-issue-resolve skill |
One issue verified against main, fixed with a regression test, opened as a PR |
| Land | github-pr-triage skill |
Each PR reviewed in its own worktree, small problems fixed, merged only on green CI |
| Release | shipmill workflows | The release cut on its lane when the policy says one is due, CI run on it, tagged, published |
| Deploy | shipmill operate |
Health checks, bake time, promotion between environments, automatic rollback |
| Watch | github-ship-watch skill |
A stalled release, a missing upload, an unannounced fix, an untriaged issue: reported and finished |
The skills run in Claude Code, on demand or unattended on
a schedule. The release side is plain GitHub Actions plus the shipmill CLI, and works
without the agents.
Quickstart
You need a GitHub repository with a CHANGELOG.md that has an ## [Unreleased] section,
the gh CLI signed in, uv, and
Claude Code. From the root of your repository:
claude plugin marketplace add shipmill/shipmill && claude plugin install shipmill@shipmill && claude "/shipmill:shipmill-setup"
The shipmill-setup skill inspects the repository, asks which lanes to run, and wires
everything on a branch, ending with a pull request. Releases start in dry-run mode until you
switch them on.
Then ask what needs you:
uv tool install shipmill # once; `uv tool upgrade shipmill` after a release
shipmill status
Without the install, uvx --from git+https://github.com/shipmill/shipmill@v0 shipmill status
runs it from git, resolving it again on each call.
It answers STUCK, WAITS ON YOU, WORKING, or IDLE, with a link to each item that waits on you.
Prefer to set it up by hand, or want only the release lanes without agents? Follow docs/install.md.
Release lanes at a glance
| Lane | Version | Released from | Typical trigger |
|---|---|---|---|
dev |
1.5.0.dev412 |
main's head | after every batch of merges |
rc |
1.5.0rc2 |
main's head | each workday morning |
stable |
1.5.0 |
an rc that soaked without a blocker | weekly, a milestone, or by hand |
hotfix |
1.4.1 |
release/1.4 plus the pull requests you name |
by hand only |
Every pull request adds its own CHANGELOG entry; the entries decide the next version.
Installers skip dev and rc unless asked, so a user who needs a fix today pins the
pre-release while everyone else gets stable releases that real users already ran.
Documentation
| Read | For |
|---|---|
| Install | Prerequisites, every setup step, and how to pause or remove shipmill |
| Flow | What to say to run each stage, alone or all at once |
| Release lanes | The policy file, environments, operate, autonomy, versions, the CLI, and limits |
| Decisions | The rules shipmill follows and why |
| Changelog | What changed in each release |
Status
shipmill is alpha and releases itself with its own workflows, so every release you see on PyPI went through the pipeline described above. Expect the policy keys to change between minor versions; the CHANGELOG says how.
Contributing
Issues and pull requests are welcome. A new feature starts as a spec in
docs/specs/; every pull
request adds its own entry under ## [Unreleased] in the CHANGELOG. The checks CI runs are
listed in CLAUDE.md.
License
Metadata
Release files for shipmill 0.33.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| shipmill-0.33.2.tar.gz | 588.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| shipmill-0.33.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 917.2 kB
Release files / shipmill-0.33.2.tar.gz
| Download URL | shipmill-0.33.2.tar.gz |
|---|---|
| Size | 588.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5f5f2a6155339e32d6fd50d3b421f0faad1d9c5ff4fac5d3faac399e7af57fea
|
|
BLAKE2b-256 checksum How to use checksums |
578c64f193b7237d764c982299550dd83197125b9c890d5f3ad65d4cb36af363
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / shipmill-0.33.2-py3-none-any.whl
| Download URL | shipmill-0.33.2-py3-none-any.whl |
|---|---|
| Size | 328.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6917e32063ddfc037d4d271781456c5577b809c354edeb1504b5f5c13ded706e
|
|
BLAKE2b-256 checksum How to use checksums |
86688821cfdb05ae000d4450a7e4328b05689750b0e8c171a7c07503e8c54648
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|