Agent skill

Ship

by luongnv89 in luongnv89/skills

Run a release end to end, autonomous by default: version bump everywhere, changelog, docs, landing page, tag, push, GitHub release, PyPI/npm.

MITAuto-check passedDevelopment

Install Ship

skills CLI
$ npx skills add luongnv89/skills --skill ship -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install luongnv89/skills ship --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/luongnv89/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ship .claude/skills/ship && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
ship
GitHub stars
131
Token cost
~3.3k tokens
SKILL.md length
1,615 words
Files
14 (incl. references)
Skills in repo
35
Repo updated
First seen
Licence
MIT

At a glance

Run a release end to end, autonomous by default: version bump everywhere, changelog, docs, landing page, tag, push, GitHub release, PyPI/npm.

  • Works in 9 steps: Pre-flight (inline) → Determine Version (inline) → Prepare Changes (subagents, two waves) → …
  • Routine commits
  • SKILL.md covers Usage, Steps, Repo Sync Before Edits… and Step 1: Pre-flight (inline), plus 13 more sections
  • Calls git and gh

What it does

Ship is an agent skill from luongnv89/skills. Run a release end to end, autonomous by default: version bump everywhere, changelog, docs, landing page, tag, push, GitHub release, PyPI/npm. Use to ship, cut, or tag a release. Don't use for routine commits, pull requests, or marketplace publishing.

Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 17 other files, including reference files (for example `agents/changelog-generator.md`, `agents/docs-updater.md` and `agents/landing-page-updater.md`).

It sits in Development, covering Landing pages, Changelog and release notes and Pull requests. It works with GitHub and npm. The repository describes itself as: Supercharge your AI agents/bots with reusable skills. The licence is MIT.

When your agent uses it

  • Routine commits
  • Marketplace publishing

Example prompts

  • “/ship”

Requirements

  • Python 3

Workflow steps

9 steps, taken from the step headings in SKILL.md.

  1. Pre-flight (inline)
  2. Determine Version (inline)
  3. Prepare Changes (subagents, two waves)
  4. Review (subagent)
  5. Apply and Sweep (inline)
  6. Build (inline)
  7. Commit, Tag, Push (inline)
  8. GitHub Release (inline)
  9. Publish to Package Registries (inline)

What it can do on your machine

Read from SKILL.md and the folder at commit b5ef695. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • gh

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Ship loads about 3.3k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 64 tokens; SKILL.md has 1,615 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~64
When it runs · the whole SKILL.md, loaded when a task matches
~3.3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~11k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from luongnv89/skills at commit b5ef695, republished under its MIT licence (© luongnv89). 1,615 words, ~3,342 tokens.

Download SKILL.mdSave it as .claude/skills/ship/SKILL.md (or your agent's skills folder). This skill also uses 13 other files; get the full folder from GitHub.
name
ship
description
Run a release end to end, autonomous by default: version bump everywhere, changelog, docs, landing page, tag, push, GitHub release, PyPI/npm. Use to ship, cut, or tag a release. Don't use for routine commits, pull requests, or marketplace publishing.
license
MIT
effort
max
metadata.version
3.0.1
metadata.author
Luong NGUYEN <luongnv89@gmail.com>

Ship

Release a project end to end: the version in every place it appears, the developer changelog and end-user notes, the README, docs, and landing page, then build, tag, push, GitHub release, and PyPI/npm publish.

Usage

/ship [X.Y.Z | major | minor | patch] [--auto | --no-auto]
  • Auto mode (default) runs every step without asking. Each point where interactive mode asks has a fixed outcome: continue, skip with PARTIAL, or stop with BLOCKED.
  • Interactive mode (--no-auto) asks the user to confirm the version, the file changes, the build, the push, the GitHub release, and each publish. "Ask me before each step" selects it too.
  • Version argument: X.Y.Z releases that version; major|minor|patch sets the bump.

Read references/auto-mode.md before Step 1: outcome table, hard stops, version rules.

Scope. A mode removes confirmations; it never widens the request. Only /ship or an explicit request to ship, cut, tag, or publish a release runs Steps 6-9. "What changed?" or "draft release notes" runs Step 2 and the changelog-generator only, and changes no file. "Bump the version" or "update the docs/landing page for the release" runs Steps 1-5 and leaves the changes uncommitted.

Steps

  1. Pre-flight: mode, resume check, clean tree, branch, sync, release tool
  2. Determine version from the commits since the last tag, and check the registries
  3. Prepare changes: (subagents, two waves) version, changelog, docs, landing page
  4. Review: (subagent) mandatory in auto mode
  5. Apply and sweep: write the changes, prove no stale version remains
  6. Build
  7. Commit, tag, push
  8. GitHub release
  9. Publish to PyPI and/or npm

Repo Sync Before Edits (mandatory)

Before creating, updating, or deleting files, sync the current branch with the remote. If the working tree is not clean, run git stash push -u -m "pre-sync" first and git stash pop after:

bash
branch="$(git rev-parse --abbrev-ref HEAD)"
git fetch origin && git pull --rebase origin "$branch"

If a rebase or stash conflict occurs, stop with BLOCKED — sync conflict and list the files under Decision (interactive mode: ask the user). If origin is missing, follow the origin missing row in references/auto-mode.md.


Step 1: Pre-flight (inline)

  1. Print the mode, the version argument, and the scope.

  2. Full release only: run git status --porcelain. If it prints anything: auto mode stops with BLOCKED — uncommitted changes and lists the files; interactive mode asks whether to stash (pop after the final report), commit, or abort. Never discard work.

  3. Full release only: check that the current branch is the default branch: git symbolic-ref --short refs/remotes/origin/HEAD prints origin/<default>; if that ref is missing, read the HEAD branch: line of git remote show origin. If the branches differ, follow the Not on the default branch row in references/auto-mode.md.

  4. Full release only: run git describe --exact-match --tags HEAD. Resume that release only when no version argument was given, or an explicit version equals the tag's release version. A different version or major|minor|patch continues through the sync and normal version selection. For resume, follow references/resume.md: skip version preparation, but rebuild and verify artifacts before any unfinished local upload.

  5. Run the Repo Sync above.

  6. Check for a release tool or a monorepo:

    bash
    ls -d .releaserc* .changeset .versionrc* lerna.json release.config.* pnpm-workspace.yaml 2>/dev/null
    grep -qs '^\[workspace\]' Cargo.toml && echo "cargo workspace"
    grep -E '"(release|semantic-release|release-it|@changesets/cli|standard-version|workspaces)"[[:space:]]*:' package.json 2>/dev/null

    The package.json grep matches a scripts.release entry, a release-tool dependency, or workspaces, never "version". On a match, follow the Release tool detected or Monorepo row in references/auto-mode.md.

Step 2: Determine Version (inline)

bash
last_tag="$(git describe --tags --abbrev=0 2>/dev/null)"
range="${last_tag:+$last_tag..}HEAD"
git log "$range" --oneline --no-merges -n 300
git log "$range" --format=%B --no-merges | grep -E '^BREAKING[ -]CHANGE:'

OLD_VERSION is last_tag without its prefix; the new tag keeps that prefix (v when there are no tags). Choose NEW_VERSION by the first rule that applies:

  1. A version argument → use it.
  2. last_tag exists and the log is empty → BLOCKED — nothing to release.
  3. A row in references/auto-mode.md → Version rules matches → use its outcome.
  4. Commits: MAJOR for a BREAKING: or !: subject or a BREAKING CHANGE: footer, MINOR for feat:, else PATCH.

Stop with BLOCKED before any file changes if the tag for NEW_VERSION exists locally or on origin, or if a registry the project publishes to already has NEW_VERSION (references/publishing.md → Decide per registry). Print "N features, M fixes, K breaking since vOLD → vNEW (rule: <rule>)". Interactive mode asks the user to confirm or override; auto mode continues.

Step 3: Prepare Changes (subagents, two waves)

Subagents read in isolated context so the main agent's context window stays small. Spawn inputs, file ownership, and the workspace: references/orchestration.md. Without the Agent tool, run each agent file inline in the same order.

  • Wave 1, same turn: version-bumper and changelog-generator.
  • Wave 2, same turn, after wave 1 returns: docs-updater and landing-page-updater, both reading version-changes.json and user-notes.md.

The landing-page-updater owns the files that render the landing site and reports four items, each updated, current, or not on page with evidence: version (stale older values too), changelog for end users (plain language, no hashes, PR numbers, or authors), feature list, and documentation. It never adds a section the page lacks. With no landing page it reports "No landing page — skipped."

Interactive mode shows the consolidated summary and waits for confirmation.

Step 4: Review (subagent)

Spawn release-reviewer. Auto mode always runs it; it replaces the human check. On NEEDS_FIX, apply each issue's suggestion to the workspace proposals and review once more. Still NEEDS_FIX → BLOCKED — release review failed, with no project file written. Without the Agent tool, run the reviewer's checklist inline and note under Uncertainty that the review was not independent.

Step 5: Apply and Sweep (inline)

Apply in the order in references/orchestration.md → Apply changes. Then, unless this is a first release, sweep for the old version:

bash
git grep -n -I -F "$OLD_VERSION" -- . ':(exclude,glob)**/CHANGELOG*' ':(exclude,glob)**/CHANGES*' ':(exclude,glob)**/HISTORY*' ':(exclude,glob)**/NEWS*'

Run the same sweep for each drifted current value in version_sources. Use one class per hit: missed (the project's own version: fix it and re-run the sweep), historical, dependency, or fixture. The step passes when no hit is missed and every version_sources file reads NEW_VERSION; otherwise stop with BLOCKED — version not updated in <file>. Record the class counts under Evidence.

Step 6: Build (inline)

bash
[ -f package.json ] && grep -q '"build"' package.json && echo "npm run build"
[ -f Makefile ] && grep -q '^build:' Makefile && echo "make build"
[ -f Cargo.toml ] && echo "cargo build --release"
[ -f pyproject.toml ] && grep -q '^\[build-system\]' pyproject.toml && echo "python -m build"

Interactive mode asks first; auto mode runs it. A failed build stops the run: BLOCKED — build failed. No build step → skip and say so.

Show full SKILL.md (648 more words)Show less

Step 7: Commit, Tag, Push (inline)

Step 1 guaranteed a clean start, so every tracked change belongs to the release, including regenerated lockfiles:

bash
git add -u
git add <each file Step 5 created, such as a new CHANGELOG.md>
git commit -m "chore(release): vX.Y.Z"
git tag -a vX.Y.Z -m "Release vX.Y.Z"
git status --porcelain --untracked-files=no   # must print nothing

If a hook rejects the commit, stop: BLOCKED — commit hook failed; never use --no-verify. Interactive mode asks "Push <branch> and tag vX.Y.Z to origin?"; a decline ends with PARTIAL — tag vX.Y.Z created locally, not pushed. Auto mode pushes:

bash
git push origin <branch> && git push origin vX.Y.Z
git ls-remote --tags origin "refs/tags/vX.Y.Z"

A rejected push stops with BLOCKED — push rejected; never force-push. If git ls-remote prints nothing, stop, skip Steps 8-9: BLOCKED — tag vX.Y.Z not on origin (recovery: references/final-report.md).

Step 8: GitHub Release (inline)

If gh auth status fails or the remote is not GitHub, skip with PARTIAL and put the command under Decision. If a workflow creates releases on tag push, verify with gh release view vX.Y.Z instead (references/publishing.md). Interactive mode asks first.

bash
gh release create vX.Y.Z --title "vX.Y.Z" --notes-file "$WORKSPACE/changelog-generator/release-notes.md" --latest

A pre-release (a - suffix, or a PEP 440 a, b, rc, or .dev suffix) uses --prerelease instead of --latest; a version below the highest existing tag uses --latest=false. Append artifact paths if any exist.

Step 9: Publish to Package Registries (inline)

Follow references/publishing.md, using the per-registry decision made in Step 2. Auto mode publishes only where the package already exists for this repository, or to a registry the request names; a missing credential or an npm one-time-password prompt skips that registry with PARTIAL; a CI-owned publish is verified, not repeated.

Expected Output

Every run, including one that stops early, ends with: Result: (COMPLETE, PARTIAL — <reason>, or BLOCKED — <reason>), Mode:, Evidence: (checks that ran, plus each auto decision and its reason), Uncertainty: (not verified), and Decision: (pending user action, or "No approval needed"). Then the post-release checklist. Status rules, an example report for each status, and the checklist: references/final-report.md.

Edge Cases

  • No remote: tag locally; skip the push, the GitHub release, and publishing: PARTIAL — no remote.
  • Resume: HEAD carries the requested release tag after an earlier stop (no version argument, or the same explicit version). Step 1 sends the run to references/resume.md, which recovers the notes and registry decisions, rebuilds for unfinished local uploads, and finishes only the steps not yet done.
  • Failure after the push: never roll back automatically, in either mode. Stop with BLOCKED and list the recovery commands (delete the tag locally and on origin, revert the commit) under Decision; the user confirms and runs them. A version published to PyPI or npm cannot be reused; the fix is a new version.

Acceptance Criteria

  • The Step 1 report and the final report print the mode; in auto mode, every gate outcome matches references/auto-mode.md and appears under Evidence
  • In interactive mode, the user confirms the version, the file changes, the build, the push, the GitHub release, and each publish
  • A narrower request (notes, bump, docs) never commits, tags, pushes, or publishes
  • Auto mode releases only from the default branch, and never runs a project's own release script
  • Every version source reads the new version and the sweep ends with no missed hit
  • The history file has exactly one entry for the release; an existing ## Unreleased section is promoted, not duplicated
  • A landing page's report covers version, end-user changelog, feature list, and documentation, each with a status and evidence
  • The tag is confirmed on origin by git ls-remote; the GitHub release exists when gh is available
  • The final report passes the reader checks in references/final-report.md: result findable first, facts separated from assumptions, claims traceable to evidence, next decision named. Without reviewer feedback, human understanding stays unconfirmed

Step Completion Reports

After each step, print a status report (√ pass, × fail, a Criteria line, Result: PASS | FAIL | PARTIAL). Templates: references/step-reports.md.

Reference files

  • references/auto-mode.md: gate outcomes in both modes, hard stops, version rules
  • references/orchestration.md: workspace, two-wave spawn inputs, file ownership, apply order
  • references/step-reports.md: step report templates
  • references/publishing.md: per-registry decision, CI-owned publishing, PyPI / npm commands
  • references/resume.md: finishing a release that stopped after its tag was created
  • references/final-report.md: status rules, examples, reader checks, post-release checklist
  • agents/: version-bumper, changelog-generator, docs-updater, landing-page-updater, release-reviewer

© luongnv89, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 13 other files (references) in skills/ship of luongnv89/skills.

  • SKILL.md
  • agents/changelog-generator.md
  • agents/docs-updater.md
  • agents/landing-page-updater.md
  • agents/release-reviewer.md
  • agents/version-bumper.md
  • docs/README.md
  • evals/evals.json
  • references/auto-mode.md
  • references/final-report.md
  • references/orchestration.md
  • references/publishing.md
  • references/resume.md
  • references/step-reports.md

Open the folder on GitHubat commit b5ef695

Compare with similar skills

Ship next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Ship compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Ship this skillluongnv89/skills131—~3.3kAutomated safety check: PassMIT
Verdaccio Pull Request Workflowverdaccio/verdaccio18k—~1.9kAutomated safety check: PassMIT
ZCF Release AutomationUfoMiao/zcf6.1k—~3.4kAutomated safety check: PassMIT
Prisma Release PRprisma/orm48k—~4kAutomated safety check: PassApache-2.0
Nylas Nodejs Releasenylas/nylas-nodejs180—~1.6kAutomated safety check: WarnMIT
Dev Releasealecs5am/ralphy138—~757Automated safety check: PassApache-2.0

Similar skills

  • Takes a change through a verdaccio pull request: branch, local checks, changeset, title and body, labels, CI and review rounds, and ports to other release lines.

    18k GitHub stars~1.9k tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Automates a version release with changesets: analyzes code changes, writes a bilingual CHANGELOG, bumps the version and commits through a release branch and pull request.

    6.1k GitHub stars~3.4k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Official

    Helps a Prisma 8 maintainer cut the next release by bumping the version across every workspace package, opening the release PR and preparing the docs PR.

    48k GitHub stars~4k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Nylas Nodejs Release

    nylas/nylas-nodejs

    Prepares nylas-nodejs SDK releases on a versioned release branch with CHANGELOG updates, version bump, git tag, and PR body.

    180 GitHub stars~1.6k tokensUpdated 7 days ago
    DevelopmentAuto-check: warnings
  • Dev Release

    alecs5am/ralphy

    Cut a Ralphy CLI release across GitHub Releases, Homebrew, and npm.

    138 GitHub stars~757 tokensUpdated 18 days ago
    DevelopmentAuto-check passed
  • Publish Release

    arietan/lite-edit

    Publish a new LiteEdit release to GitHub — commit code, bump version, write changelog, create GitHub release, and update the landing page.

    167 GitHub stars~656 tokensUpdated 5 mo ago
    DevelopmentAuto-check passed

More from luongnv89/skills

All 35 skills in this repo
  • Dont Make Me Think

    luongnv89/skills

    Review UI usability using Steve Krug's principles and produce a scannable report.

    131 GitHub stars~2.5k tokensUpdated yesterday
    Auto-check passed
  • Herdr Agent

    luongnv89/skills

    Manage AI agent fleets in Herdr: tile root + sub-agents in one tab, start/prompt/wait/read/monitor via the herdr agent CLI, steer any pane; help lists every operation.

    131 GitHub stars~4.8k tokensUpdated yesterday
    Auto-check passed
  • Ollama Optimizer

    luongnv89/skills

    Optimize Ollama configuration for the current machine's hardware.

    131 GitHub stars~4.1k tokensUpdated yesterday
    Auto-check: notes
  • Security Setup

    luongnv89/skills

    Install local-first security hardening: pre-commit secret detection, offline dependency scans, static analysis, reports, and gated free CI.

    131 GitHub stars~4.5k tokensUpdated yesterday
    Auto-check passed
  • SEO AI Optimizer

    luongnv89/skills

    Audit and optimize websites for technical SEO, content SEO, and AI bot accessibility.

    131 GitHub stars~2.7k tokensUpdated yesterday
    Auto-check passed
  • Tasks Generator

    luongnv89/skills

    Generate sprint-based development tasks from a PRD. An agent skill from luongnv89/skills.

    131 GitHub stars~3.8k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Ship

What does Ship do?

Run a release end to end, autonomous by default: version bump everywhere, changelog, docs, landing page, tag, push, GitHub release, PyPI/npm. Ship is an agent skill from luongnv89/skills. Run a release end to end, autonomous by default: version bump everywhere, changelog, docs, landing page, tag, push, GitHub release, PyPI/npm.

When should I use Ship?

Ship fits situations like: routine commits; marketplace publishing.

How do I install Ship in Claude Code?

Run `npx skills add luongnv89/skills --skill ship -a claude-code`. Or copy the skill folder (skills/ship in luongnv89/skills) into .claude/skills/ship in your project. Claude Code loads it when a task matches its description.

How do I install Ship in Codex?

Run `npx skills add luongnv89/skills --skill ship -a codex`. Or copy the skill folder (skills/ship in luongnv89/skills) into .agents/skills/ship in your project. Codex loads it when a task matches its description.

Can I use Ship in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add luongnv89/skills --skill ship -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ship, .gemini/skills/ship, .github/skills/ship and .opencode/skills/ship in your project.

What does Ship need to run?

Going by SKILL.md and its folder, Ship needs the command-line tools its instructions call (git and gh). Our summary lists: Python 3.

Does Ship access the network?

SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Ship safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Ship use?

Ship is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Ship use?

About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.9k tokens, read only when the agent opens those files.

What are the alternatives to Ship?

Skills that share tags, products or a category with Ship: Verdaccio Pull Request Workflow (verdaccio/verdaccio, 18k stars), ZCF Release Automation (UfoMiao/zcf, 6.1k stars), Prisma Release PR (prisma/orm, 48k stars) and Nylas Nodejs Release (nylas/nylas-nodejs, 180 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Ship?

luongnv89 (a GitHub user) maintains it in luongnv89/skills, which has 131 GitHub stars. The repository holds 35 skills in this directory. The repository was last updated on October 9, 2026.

Source: luongnv89/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.