Claim Check · the loop that proves done

Your agent says done. Evidence decides.

Coding agents ship plausible diffs that did not do what the task asked. Claim Check freezes what you asked for into atomic obligations, tells your agent exactly which check would prove each one, and verifies those checks on a model-free deterministic floor. A block always carries a witness. An undecided obligation arrives with its action, never a shrug. The judge audits what the floor cannot bind and only ever subtracts. Local, no source upload, no Shipmoor-hosted model.

Your agent finishes a task and writes a confident summary: “Added retry handling for failed Stripe payment webhooks.” The diff looks plausible. But did it bind a handler to the payment-failure event, or refactor something nearby and call it done? Claim Check answers that question with a binding verdict, and when it cannot answer yet, it tells your agent exactly what evidence would settle it.

The gate freezes your intent and derives a contract of atomic obligations you approve with one commit. A deterministic floor decides on evidence: checks bound to obligations that must fail at base and pass at head, your build, your tests, the scan, the review pass. An obligation nothing binds routes to a bring-your-own judge that samples three times, blocks only on two-of-three agreement with a pointer that resolves, and never passes anything. The fix packet hands your agent the checks to author, tagged per obligation; the next round binds them by exact join and the floor verifies them, with the authored share disclosed on the verdict. Four lanes (READY, READY WITH GAPS, BLOCKED, INCONCLUSIVE), one VSA attestation you can defend, and a repo that gets permanently easier to verify with every change.

  • A block always carries a witness
  • The floor decides; the judge only subtracts
  • Authored by agent, executed by your toolchain, decided by the floor
  • frozen intent
  • derived contract
  • set-scoped check tags
  • fail at base, pass at head
  • VSA attestation
  • no source upload
$ shipmoor claim-check --intent-prompt "Add an IsPrivileged detector that inspects Containers, InitContainers and EphemeralContainers; make EnforcePrivilegedPolicy return an error instead of calling panic" --agent claude --diff main..HEAD . Claim Check  BLOCKED · coverage 100% · verified 0 · divergent 2 · judge-open 6  verification: build red · tests not checked · scan red  judge block AC-04 · ...detector runs, then it inspects all EphemeralContainers  → rules/check_privileged.go  judge block AC-06 · ...no panic statements are called instead of returning errors  → rules/check_privileged.go  floor FAIL  AC-07 · ...all referenced identifiers have their packages imported  → sha256:3cb521a0...  why blocked — 10 actionable, each with resolving evidence:    1 · the configured build did not exit green → sha256:fcbf486e...    5 · 3/3 samples witnessed a divergence (≥2 agreement) → rules/check_privileged.go $ shipmoor claim-check --agent claude --diff main..HEAD .   # after the fix packet's tasks Claim Check  READY · coverage 100% · verified 8 · divergent 0 · gaps 0 · authored 6  verification: build green · scan green · 0 must-fix  floor pass  AC-04 · ...detector runs, then it inspects all EphemeralContainers  → sha256:8f1a1df7...  floor pass  AC-05 · ...EnforcePrivilegedPolicy is called, then it returns an error  → sha256:88b150ac...  judge ----  (no residue this run)Wrote attestation to .shipmoor/claim-check.vsa.json

A real run on a Kubernetes admission controller change: round one blocks a flawed diff with ten witnessed reasons; after the fix packet hands the agent its tasks, the terminal round verifies the corrected change on the floor, with the agent-authored checks disclosed.

Run it

Start from nothing but the prompt you gave your agent: the gate derives a reviewable contract and tells you what would decide each obligation. Commit the contract to approve it; run floor-only for a reproducible CI gate.

  • Gate a change against the prompt you gave your agent

    shipmoor claim-check --intent-prompt "add retry to the webhook client" --agent claude --diff main..HEAD .
  • Run against the committed contract

    shipmoor claim-check --agent claude .
  • Reproducible floor only, no model, no secret (the CI gate)

    shipmoor claim-check --floor-only .
  • Author the contract by hand instead of deriving it

    shipmoor claim-check --acceptance .shipmoor/acceptance.yaml .
  • Point the floor at your own toolchain

    claim_check.runners.test: "pytest {ref}" # .shipmoor.yaml
  • Write the attestation to a path

    shipmoor claim-check --vsa-out .shipmoor/claim-check.vsa.json .

Every run ends in one of four lanes: READY, READY WITH GAPS, BLOCKED with witnesses, or INCONCLUSIVE with the exact actions that would decide it. Exit codes stay binary for automation: the ready lanes exit 0, everything else does not.

Your model, your machine, your call

Claim Check runs locally. The deterministic floor never leaves your machine and never calls a model. Derivation and the judge run in your own agent under your own provider relationship. Shipmoor hosts no model and uploads no source. The result is a binding verdict and a VSA you can defend, not a vibe you have to trust.

How Claim Check works

The loop, not a single pass: freeze the intent, derive the contract, bind every obligation to a real check or route it honestly, run the evidence, and let the floor decide. The judge covers only the residue the floor cannot bind, and it can only block by citing a divergence or abstain. It never passes anything.

  1. Freeze the intent and derive the contract
  2. Bind each obligation to a check, or route it to the judge
  3. Run the evidence: your build, your tests, scan, review
  4. The floor decides; a block always carries a witness
  5. The packet hands your agent the checks to author
  6. Authored checks graduate obligations to the floor

Floor-only mode is what the CI gate runs against the committed contract: model-free, reproducible, binary, no secret. Full mode adds derivation, the judge, and the authoring loop. Approving the contract is one commit, reviewed with your code. You stay in control of what ships.

Check your next agent change against the claim

Install the CLI, sign in to Shipmoor IC, and run shipmoor claim-check on your next agent change with the prompt you gave it. Round one tells you the truth about what it can prove and hands your agent the tasks that would prove the rest. The terminal round is a verdict you can stake a merge on.

Get Shipmoor CLI

One installer. One shipmoor command. Free Community scans.

curl -fsSL https://dl.shipmoor.dev/install.sh | bash


Claim Check docs

Claim Check FAQ FAQ

The derived contract, the deterministic floor, the authoring loop, and the four-lane verdict vocabulary.

Contact sales

Our team can help with custom support, team rollouts, and self-hosted deployments. Or to get started now, explore our self-serve plans.