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 breaking change reaches a stable release only after your decision; 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 |
main's head after every green batch, or an rc | after every batch of merges, 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, as a fragment file by default so pull
requests don't conflict on it; the entries decide the next version.
Installers skip dev and rc unless asked, so a user who wants to try a change first pins
the pre-release while everyone else gets each stable release; a breaking change waits for
you.
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 |
| Direction | The docs/product.md you write when agents implement: what it holds, what the agents do with it, and how you change it |
| 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 changelog entry as a new file in
changelog.d/. The checks CI runs are
listed in CLAUDE.md.
License
Metadata
Release files for shipmill 0.57.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| shipmill-0.57.0.tar.gz | 1.2 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| shipmill-0.57.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.8 MB
Release files / shipmill-0.57.0.tar.gz
| Download URL | shipmill-0.57.0.tar.gz |
|---|---|
| Size | 1.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7e685860edff6b76bb7cdea5253cf038526ac1976b05cd3c02307a55518f0a78
|
|
BLAKE2b-256 checksum How to use checksums |
7812b010148669d98931c2bcaf9977ea88ac23f6e822045f2cba6f6ba15c3f91
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.3 {"installer":{"name":"uv","version":"0.13.3","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.57.0-py3-none-any.whl
| Download URL | shipmill-0.57.0-py3-none-any.whl |
|---|---|
| Size | 531.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0f469c24b51fc46d4b76bc2f1f6da4c074e91a6e821b5dc5a34140cb63df3789
|
|
BLAKE2b-256 checksum How to use checksums |
8e6c127561d3d51725a51583fcf20761a8d3a4dc904e4c07c076ecb52e5dc1c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.3 {"installer":{"name":"uv","version":"0.13.3","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}
|
Security for shipmill 0.57.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.