Skip to main content

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.

PyPI Python CI License: MIT

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, or act; one shipmill-hold issue, 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:

uvx --from git+https://github.com/shipmill/shipmill@v0 shipmill status

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

MIT

Metadata

Release files for shipmill 0.32.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for shipmill 0.32.0
File Size Uploaded
shipmill-0.32.0.tar.gz 563.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for shipmill 0.32.0
File Interpreter ABI Platform
shipmill-0.32.0-py3-none-any.whl Python 3 none any Details

Total release size: 880.1 kB

Release files / shipmill-0.32.0.tar.gz

Download URL shipmill-0.32.0.tar.gz
Size 563.4 kB
Tags Source
SHA-256 checksum
How to use checksums
d8f60de2785e268676965a836a37ef2cfeee9af9cd43a3b419c7bf160f4f04b8
BLAKE2b-256 checksum
How to use checksums
00da2e60281a217406a0fcb508b1b20bb6fc910f258a0d5ecc7b8f570e782a6e
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.32.0-py3-none-any.whl

Download URL shipmill-0.32.0-py3-none-any.whl
Size 316.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a87df08bbb444ebdde98226b2fa8153e9bf443194901721ca6c69cf7805069d5
BLAKE2b-256 checksum
How to use checksums
0107d186b072c7f7f87a7775053f4cc1c946f232118c90764a248991b89e151e
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 history Release notifications | RSS feed

This release

0.32.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page