Claim Check compares a change against what it was asked to do — so it needs to know what was asked. This page covers the four ways to supply that intent, how Shipmoor decides how much to trust it (confidence), and why that trust level matters downstream.
When the claim check appears
The claim check rides on a diff-bearing scan — --changed, --staged, --diff <range>, or --patch <file> — with at least one intent source. A plain filesystem scan has no changeset to judge, and a scan with no intent is unchanged from a plain Community scan.
The four sources
In precedence order:
| Source | How | Typical confidence |
|---|---|---|
| One-line goal | --intent "add a failed-payment webhook" | low |
| Agent prompt | --prompt "$PROMPT" — the prompt that produced the change | low |
| Session transcript | --session run.jsonl — the first user turn becomes the intent | from the first user turn |
| Manual file | .shipmoor/intent.txt in the scanned directory | low |
shipmoor scan --staged \
--intent "Add a Stripe webhook handler for failed payments (payment_intent.payment_failed)"
The --session source does double duty: besides resolving the intent from the first user turn, it ingests the agent’s plan (masked, opt-in) and compares it to the diff — see plan drift in Reading the verdict. Claude Code and Cursor transcripts are supported; other shapes degrade gracefully (the first user turn still works, no plan is ingested).
The intent file is the convenient form for CI and agent workflows — the shipmoor-intent-contract skill maintains one for you.
Agreement raises confidence
Confidence answers: how sure are we about what the change was meant to do? It’s reported on the Source: line of every claim check:
Intent: As a user I want every Flask response to carry an X-Request-ID header — add a small helper that sets it
Source: prompt:--prompt (prompt), manual:--intent (manual_string) · agreement: consistent · Confidence: medium
The rules are simple and conservative:
- One source resolves at
low. A bare--intentone-liner is a claim about the task, not proof of it. - Two consistent sources resolve at
medium. Pass--intentand--prompttogether; if they agree, confidence rises. - Divergent sources drop a step. Shipmoor never rewards disagreement between sources.
Why confidence matters
Confidence is one of the three independent axes of the verdict (alongside maturity and coverage), and two features key off it:
- The gate. Blocking requires a non-low-confidence intent — the gate’s built-in floor refuses to block a merge on a one-line guess, no matter what your policy says. See Turning on the gate.
- BYO-Judge. The advisory LLM opinion only runs at
mediumorhighconfidence. See BYO-Judge.
This is also why a real miss can be reported as only a minor gap when the intent came from a single low-confidence source: low confidence caps how far the verdict can escalate. Add a second agreeing source and the same miss is reported at full strength.
Resolving intent without a scan
To see just the resolved intent — no diff, no probes — use resolve-intent with the same sources. It shares the resolver with scan, so the intent resolves identically:
shipmoor resolve-intent --intent "…" --json # → goal_text, confidence, sources
shipmoor resolve-intent --session run.jsonl
(The legacy intent-scan command is a deprecated alias for scan --intent.)
Privacy
The resolved intent is masked before anything else happens — a secret pasted into a prompt or ticket text never survives into the output, the change signal, or a judge prompt. Session transcripts are masked on ingestion. See Privacy & telemetry.
Next
- Reading the verdict — maturity, coverage, and confidence in practice.
- Turning on the gate — making a deterministic failure block.
- Claim Check quickstart — the five-minute first run.