Shipmoor × Claude Code
Shipmoor for Claude Code
Claude Code writes and edits across your repo. Shipmoor's harness re-scans every edit and holds the agent at the Stop event until the structural defects and claim gaps it introduced are fixed, with deterministic checks an LLM can never override.
- Hard PostToolUse + Stop loop
- Deterministic: an LLM never blocks
- Local-first, no source upload
edit → re-scan → Stop → blocked → fix → cleared → done · the gate won't open on a defect.
Claude Code already writes most of the diff. The harness makes it run Shipmoor as part of that work, re-scanning each edit and refusing to let the session end while a blocking defect is present, without you switching tools. The local Shipmoor CLI does the scanning and stays the single source of truth.
- hard loop
- PostToolUse + Stop
- CLI = source of truth
- an LLM never blocks
- no source upload
The hard loop: Claude Code can't talk its way past the gate
Most integrity checks are advisory: a rule that asks the agent to scan, which it ignores under load. On Claude Code, Shipmoor's harness is not advisory. It installs native hooks that turn the scan into an enforced gate.
- PostToolUse Re-scan after every edit After the agent edits, re-scan the change so findings are always current, with no stale report to reason around.
- Stop Block "done" until blockers clear When the agent tries to finish, scan the change-set. If a blocking finding is present, the hook blocks the stop and feeds the findings back, so the session can't end while defects remain. A loop bound keeps it from ever trapping the agent.
A rule that asks an agent to scan is weak. A gate that won't let it declare "done" until the blockers clear changes what the agent actually ships: the difference between knowledge and behavior. On Claude Code it works out of the box.
⏹ Stop → shipmoor scan --changed --json
✗ blocked: 1 high finding must clear before done
SM-IMP-002 phantom import src/auth/session.ts:4
'verifyToken' is imported but never declared or exported
SM-ERR-014 silenced error src/auth/session.ts:39
catch block swallows the error without rethrow or log
↩ findings fed back to the agent · session held open
loop 1 / 3 · fix the high finding, then Stop re-runs
The Stop hook runs one shipmoor scan, blocks on the high finding, and hands the agent the findings to repair.
What the gate catches
The scan engine targets the structural failure modes agent-assisted edits introduce. These are deterministic checks; they decide. The scan --json output is rich enough that the hooks act on it directly: rule_id, severity, path, line, message, root cause, and a recommended fix.
-
01
Phantom & undeclared imports
References to symbols and modules that were never declared, exported, or installed: code that reads as wired but isn't.
deterministic -
02
Placeholder & empty-body stubs
Functions that return a placeholder,
deterministicTODObodies, and empty implementations that pattern-complete as "done". -
03
Silenced errors
Swallowed exceptions and discarded error returns: failure paths quietly removed so the change looks like it works.
deterministic
-
Install the hard PostToolUse + Stop hooks
shipmoor harness install claude -
Start safe: report only, then escalate
shipmoor harness mode observe -
Check mode & adapter for this repo
shipmoor harness status
Modes escalate as you trust it: observe (report only), feedback (loop findings back, bounded), block (non-zero verdict on a breach; pairs with CI).
Skills, so the agent scans on its own
shipmoor skills install claude writes always-applied instructions that make Claude Code scan its changes, triage, explain the blockers, and gate before "done", plus pre-edit discipline: inspect manifests, don't invent imports or APIs, no placeholder logic, never fake success.
Skills make the agent want to scan; the hooks make the scan happen and enforce the result. Use both.
Check the change against the task
Beyond defects, Claim Check compares the change to the task it was given, and flags work that runs but doesn't do what was asked.
Claim Check
Resolves intent from the ticket, the prompt, or the Claude Code agent session (secrets masked on ingest). A deterministic floor decides the verdict; the optional LLM advisory only comments and is excluded from the score.
Deterministic evidence decides: an LLM never blocks
A machine that can hallucinate is never the gate
Every finding that can hold the gate is deterministic. Shipmoor structurally bars LLM inference from producing a blocking verdict, and the optional advisory runs inside your own coding agent (Shipmoor hosts and calls no model), labeled as inference and excluded from the verdict.
Honest about scope: Shipmoor catches what didn't earn its claim and says "couldn't check" where it has no probe. It doesn't prove your change succeeded, and it checks structural risk, not logic or design. Tests and builds still run. It raises the floor and gives a repeatable checkpoint; it doesn't replace the reasoning.
Local first: your source never leaves
The scan engine runs on your machine or in your own CI runner. The Shipmoor Console handles licensing and billing only; it never receives your source. No source upload, at any tier.
Get started in Claude Code
Start free and local with no account, then add the hard harness loop and skills.
shipmoor scan --changed
Free, local, no account. Scan your current changes before you wire anything up.
-
Install always-applied skills
shipmoor skills install claude -
Install the PostToolUse + Stop hooks
shipmoor harness install claude -
Loop findings back to the agent
shipmoor harness mode feedback
The Community CLI is free. Skills, Claim Check, and the harness are part of Shipmoor IC ($19/dev·mo, $190/yr). Self-serve, no sales call.
Run Shipmoor where Claude Code writes
One installer. One shipmoor command. Free Community scans, then a gate the agent can't declare done past.
Claude Code FAQ
How the harness installs and enforces inside Claude Code.
Is the gate really hard, or just advisory?
Hard. The harness installs native PostToolUse and Stop hooks. The Stop hook blocks the agent from finishing while a blocking finding is present and feeds the findings back; the session can't end with the defect in place. A loop bound keeps it from ever trapping the agent. This shipped in CLI v0.5.0.
Can the LLM hallucinate its way past the gate?
No. Every finding that can hold the gate is deterministic. Shipmoor structurally bars LLM inference from producing a blocking verdict. The optional advisory runs inside your own coding agent and is labeled as inference, excluded from the verdict.
Does my code leave my machine?
No. The scan engine runs locally or in your own CI runner. The Shipmoor Console handles licensing and billing only and never receives your source. No source upload, at any tier.
How do skills relate to the harness?
A skill is the behavior the agent follows; the harness is the runtime that invokes the CLI against edits and feeds findings back. Skills make the agent want to scan; the hooks make the scan happen and enforce the result. Both are clients of the CLI, which stays the source of truth. Use both.