⚙️ shipit-skill
Take an existing developer tool from "it works" to "published + listed + marketable" — one pass.
shipit-skill is an Agent Skill that runs the full launch pipeline for AI/developer tools
(MCP servers, CLIs, libraries): engineering baseline → publish → directory listings →
promo material. It was distilled from shipping wheel-hub,
zspace-cli and
media-manager-skill — every gotcha
below is one that actually bit during those releases.
Install
Two ways to use it — as a CLI tool or as an Agent Skill:
A. CLI (via pip) — for running the pipeline commands yourself:
pip install shipit-skill
shipit-skill init ./my-tool --server my-tool --pkg my-tool # scaffold CI/Dockerfile/promo
shipit-skill check-promo --dir promo --version 0.1.1 --prs 13600=open
B. Agent Skill — copy this folder into your project (or your agent's skills dir):
cp -r shipit-skill/ ~/your-project/.opencode/skills/shipit-skill # opencode
# cp -r shipit-skill/ ~/your-project/skills/shipit-skill # Claude Code, Cursor, etc.
What it does
| Phase | Exit criterion | CLI |
|---|---|---|
| 0. Recon | gap report (CI? Docker? Release? listed? promo?) | — |
| 1. Baseline | CI green, metadata right, Dockerfile present | shipit-skill ci, shipit-skill init |
| 2. Publish | on registry + GitHub Release + clean-env verified | shipit-skill publish |
| 3. Listings | Glama live + awesome PR open | shipit-skill check-glama, shipit-skill awesome-pr |
| 4. Promo | promo docs match reality | shipit-skill check-promo |
See SKILL.md for the full agent instructions and the automation
boundary (what the agent runs vs. what needs a human/credential).
Example
examples/mcp-server-launch.md walks all four
phases against a toy hello-mcp server — reproduce it locally to learn the
pipeline before applying it to a real project.
Automate releases (GitHub Action)
shipit-skill release --execute runs a doctor gate, bumps, builds, publishes
to PyPI, then tags + opens a GitHub Release (notes from CHANGELOG) — all from a
token in PYPI_TOKEN env. Re-running is safe (existing tags/releases are
skipped), and a failed publish rolls back the commit instead of leaving a
dangling release. Preview what it will do without touching anything:
shipit-skill release --lang python --pkg your-tool --how minor --dry-run-notes
Hook it up as a manual GitHub Actions job:
# .github/workflows/release.yml
name: Release
on:
workflow_dispatch:
inputs:
how: {type: choice, options: [patch, minor, major], default: patch}
jobs:
release:
runs-on: ubuntu-latest
permissions: {contents: write}
steps:
- uses: actions/checkout@v4
with: {fetch-depth: 0}
- uses: actions/setup-python@v5
with: {python-version: "3.12"}
- run: pip install -e ".[dev]" build twine
- run: shipit-skill doctor # fail fast on missing prereqs
env: {PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}}
- run: shipit-skill release --lang python --pkg your-tool \
--how ${{ inputs.how }} --repo owner/your-tool --execute
env:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
Other one-shot commands with --execute: publish (real PyPI/NPM upload +
fresh-install verify, auto-retry with diagnostic hints), bump --commit
(bump + git commit), and awesome-pr --execute (opens the PR via gh).
changelog --version X.Y.Z generates a CHANGELOG entry from your git log.
--lang is auto-detected from pyproject.toml / package.json.
Development
pip install -e ".[dev]"
pytest -q # 179 tests, coverage ≥ 93%, parallel (-n auto)
ruff check . # lint
pyright # type check (strict)
## The scars (why this exists)
- `mcp>=1.0` + a new SDK → fresh installs crash. Set dependency floors.
- Python 3.9 can't install `mcp>=2.0` — split the CI matrix.
- YAML block scalar + inline heredoc = broken workflow. Use a script file.
- Glama introspection needs stdin held open (`sleep 1`) in smoke tests.
- PyPI tokens start `pypi-`; UUID-style strings are wrong and 403.
- npm typosquatting blocks similar names — scoped names dodge it.
- Glama builds take minutes to hours — poll, don't panic.
## License
MIT
Metadata
Release files for shipit-skill 0.8.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 | |
|---|---|---|---|
| shipit_skill-0.8.0.tar.gz | 42.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| shipit_skill-0.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 78.1 kB
Release files / shipit_skill-0.8.0.tar.gz
| Download URL | shipit_skill-0.8.0.tar.gz |
|---|---|
| Size | 42.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9c36a249f2de62bc03c78b867fba1b916e16583b6d7714e604180de1475eb5b7
|
|
BLAKE2b-256 checksum How to use checksums |
55890c97fbfabcfb6806be4567fa163bdd8a4b3884c2f645ea33e873310b701b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / shipit_skill-0.8.0-py3-none-any.whl
| Download URL | shipit_skill-0.8.0-py3-none-any.whl |
|---|---|
| Size | 36.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
56d574c0d9caf8ef6af6f216e63564db463ffdac423855f2571409fd202734b7
|
|
BLAKE2b-256 checksum How to use checksums |
ccb6b3a4eb06c423eed8ede9f9724ecc93161c366f75a6f2536685f5d749c074
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|