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:

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, 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 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 changelog entry as a new file in changelog.d/. The checks CI runs are listed in CLAUDE.md.

License

MIT

Metadata

Release files for shipmill 0.41.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.41.0
File Size Uploaded
shipmill-0.41.0.tar.gz 695.5 kB Details

Built distribution (wheel)

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

Total release size: 1.1 MB

Release files / shipmill-0.41.0.tar.gz

Download URL shipmill-0.41.0.tar.gz
Size 695.5 kB
Tags Source
SHA-256 checksum
How to use checksums
646b7ab0a97736127f184e4c7d7fa2f6a5269c1847b220914ce2b52bf22d1b05
BLAKE2b-256 checksum
How to use checksums
130a244cbaa61c43ffe0f75d33f805e166d69eceb47b3f11425d1dbeefc79410
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.41.0-py3-none-any.whl

Download URL shipmill-0.41.0-py3-none-any.whl
Size 370.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ca3ec6e7d183b04ccca3057ba739cd0b684926ff321f51e91fe3bde178fcbd5d
BLAKE2b-256 checksum
How to use checksums
69546cca91c8671831da4e7abf8132a8ada7e23d41a64247250535fb870e99a8
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}
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