Ship Sentinel

Makes Claude run your pre-ship check skills before it pushes, publishes or deploys. A Claude Code mod that holds the command until the checks have run since your last edit.

/plugin install ship-sentinel --marketplace arm-pz/ship-sentinel

Run it inside Claude Code 2.1.287 or later, the release that added mods. Version 0.1.0, free under MIT. Fails open, and touches no files, network or processes.

Would it hold this command?

Type a command Claude might run. This box tests it against the same patterns the mod ships in hooks/register.js.

Held until your checks have run.

Matched git push. In ask mode you choose “Run checks first” or “Ship anyway”.

Skills load when Claude decides

You wrote the checks as skills: a security pass, a performance audit, a preflight. Claude loads a skill when it decides to, and the moment you most want it to is the moment it is least likely to, with a push or a deploy a few seconds away.

Ship Sentinel holds git push, PR, publish and deploy commands until your check skills have run since your last edit. It contains no checks of its own; it makes sure yours ran.

ask
The default. The command waits and you choose “Run checks first” or “Ship anyway”. Shipping anyway lasts until the next edit.
block
The command is refused with an instruction for Claude: run the skills, fix what they find, then retry.
nudge
The command runs, and Claude is reminded which checks are still outstanding.

Two commands to set it up

Install the mod from its own marketplace, in Claude Code.

/plugin install ship-sentinel --marketplace arm-pz/ship-sentinel

Name your checks, for example pre-ship-security-red-team,pre-ship-performance-audit. All of them must have run since the last edit. Any skill name works; the default is release-gate.

/plugin configure ship-sentinel@ship-sentinel

What it reacts to

MomentWhat happens
A ship command runs with a required skill not yet run: git push, gh pr create or merge, gh release create, npm, pnpm, yarn or bun publish, wrangler deploy, vercel --prod, netlify deploy --prod, docker push, dotnet nuget push, cdk or sam deploy, terraform applyHeld, refused or flagged, depending on the mode. After two holds it lets the command through, so it can never trap a session.
A required skill is expandedIt counts as run.
A file is edited after the checks ranThe checks go stale.
You write “ship it”, “go live” or “deploy to prod”One line of context names the outstanding checks.
/ship-sentinel, /ship-sentinel off, /ship-sentinel onShows state, snoozes, resumes.

What Claude is told when it is held

ship-sentinel held this command: release-gate has not run since the last edit. Run that skill on the current changes, fix what they find, then retry. If a skill is not available, tell the user instead of retrying.

Copied from the source, hooks/register.js. Below, what claude plugin validate reports the mod can do, run on 2026-10-21 against version 0.1.0.

hooks: ./register.js session.start, skill.prompt, tool.call{tool=Edit|Write|MultiEdit|NotebookEdit}, tool.call{tool=Bash}, prompt.submit, command.run{command=ship-sentinel}
calls: ./register.js $.command.register, $.ui.ask, $.ui.status, $.ui.toast

Questions before you install it

Does it run my checks?

No. It holds the command and tells Claude, or asks you, which skills to run first. In ask mode you decide; in block mode Claude is told to run them and retry.

Can Claude get around it?

Yes, and so can a rewritten command. It reads the text of a Bash command, so it is a reminder, not a security control, and echo "git push" also matches. For enforcement use permission rules or managed settings.

What can it touch?

Four calls: $.command.register, $.ui.ask, $.ui.status and $.ui.toast. No files, processes, network, environment variables or model calls. Mods are not sandboxed, so read that list, and the one short file, hooks/register.js, before installing any mod.

Does “ran” mean “passed”?

No. It means the skill was loaded since your last edit. A skill that was loaded and then ignored counts as run. Checking a receipt the skill writes is a planned improvement, described in DESIGN.md.

What if I only use claude -p or the VS Code panel?

Hooks run, but a question or toast may not draw, so use block mode there. Under an organisation that allows only managed mods, user mods do not load.

Does it work with subagents or MCP tools?

Not tested with subagents. It watches Bash commands only, so a ship done through an MCP tool is not seen.

Checks it can hold the line for

Read it before you install it: the whole mod is one short file, hooks/register.js, in arm-pz/ship-sentinel.

Open the repo