Troubleshooting

Shipmoor Team
June 11, 2026
4 min read

The issues users actually hit, in rough order of frequency.

shipmoor: command not found after install

The installer puts the binary at ~/.shipmoor/bin/shipmoor and never edits your shell profile silently — it prints the exact export PATH line instead. If the command isn’t found, add that line to your shell rc and reload:

export PATH="$HOME/.shipmoor/bin:$PATH"

In CI, append the directory to the path mechanism your runner uses (on GitHub Actions: echo "$HOME/.shipmoor/bin" >> $GITHUB_PATH), or call the binary by its absolute path.

The installer requires curl, tar, python3, and sha256sum or shasum. Intel Macs (darwin-amd64) are not supported in this release.

A full-repo scan reports a wall of phantom imports

A full shipmoor scan . on a project whose third-party dependencies aren’t declared where Shipmoor can see them (no manifest, or a bare checkout without requirements.txt) reports many missing_manifest_entry / unresolved_local_module findings. That’s the resolver being honest about what it can’t resolve — but it’s noise if you only care about your change.

Two fixes, in order of preference:

  1. Scope to the change. --changed, --staged, or --diff <range> is what the agent loop and CI should use anyway; with diff.only_introduced: true (the default) the gate only counts what the change introduced.
  2. Declare the project’s dependencies. A requirements.txt / package.json / go.mod at the project root gives the resolvers the manifest context they need. The context line of the output tells you what was found — degraded resolvers means no manifest was discovered.

Work through it in this order:

shipmoor whoami            # authenticated? plan? reason?
shipmoor capabilities --json
  • reason: missing / not_logged_in — no license on this machine; run shipmoor login.
  • reason: expired_in_grace / expired_past_grace — renew or re-login; past grace the binary behaves as Community by design.
  • reason: missing_entitlement — signed in, but the account doesn’t carry that feature; check your plan at accounts.shipmoor.dev.
  • old_community_binary — a pre-universal build; run shipmoor upgrade, then login.
  • In CI — make sure SHIPMOOR_LICENSE_TOKEN (or SHIPMOOR_LICENSE_FILE) is actually injected into the job’s environment.

See Sign in & licensing for the full reason-code list.

CI treats a finding as a tooling failure

Exit code 1 means the gate fired — findings met the --fail-on threshold; the JSON/SARIF report is complete and should still be uploaded. Only 2 (usage error) and 3 (scan crashed) are tooling failures, and only those runs lack a report. Pattern your pipeline accordingly — see SARIF & code scanning.

No claim check appears on my scan

The claim check requires both a diff-bearing scope (--changed / --staged / --diff / --patch) and an intent source (--intent, --prompt, --session, or .shipmoor/intent.txt) — plus the intent_scan entitlement. A plain path scan, or a scan with no intent, is a normal structural scan. See Providing intent.

The claim-check gate won’t block

By design, mostly. The floor refuses to block when the intent confidence is low (one source), the result is unprobed/inferred, or the evidence isn’t deterministic. Run with --would-block to see the gate’s reasoning, and add a second agreeing intent source. See Turning on the gate.

shipmoor upgrade fails

upgrade has its own exit codes: 20 network/manifest fetch, 21 checksum mismatch (retry; if persistent, report it), 22 permission or install-path error, 23 atomic replacement failed (the original install is left intact). Windows isn’t supported by upgrade — install manually from dl.shipmoor.dev.

Still stuck?

Capture shipmoor version, the exact command, and the stderr output. For scan issues, a --json report (it contains findings, paths, and rule IDs — no source) is the most useful artifact to share.

Next

Last updated on June 11, 2026

Was this article helpful?

Your response is saved on this device.