The Shipmoor VS Code extension brings the advisory reviewer into your editor. It runs the same shipmoor review you would run in the terminal, and renders its findings as advisory diagnostics that are deliberately kept separate from the structural scan: different severity, different colour, different source, and never in your problem counts.
Install
Install the Shipmoor extension (publisher shipmoor) from the VS Code Marketplace, or from Open VSX for VS Code forks (Cursor, VSCodium, Windsurf). The extension shells out to the shipmoor CLI, so you also need the CLI on your PATH. The advisory review surface needs a CLI build that has shipmoor review, which ships in 0.6.0 and newer (see the Quickstart). Sign in with shipmoor login for the cli_pro entitlement.
For the full editor install and activation flow, including binary discovery and entitlement states, see Install and activate.
The commands
The extension contributes two review commands (Command Palette, then “Advisory Review”):
| Command ID | Palette title | What it reviews |
|---|---|---|
shipmoor.reviewChangedFiles | Advisory Review: Changed Files | Your working-tree changes (shells shipmoor review --json --no-color). |
shipmoor.reviewCurrentFile | Advisory Review: Current File | The active file (shells shipmoor review <path> --json --no-color). |
Review is manual. Unlike the structural scan (which can run on save, on type, or on open), these commands run only when you invoke them. Both are gated: they appear in the palette only when your entitlement state is active or grace (when: shipmoor.entitlementState == active || shipmoor.entitlementState == grace), and the handlers re-check, so a keybinding cannot fire them while locked.
How review findings appear
Review findings are rendered to be unmistakably advisory and structurally distinct from scan findings:
| Aspect | Structural (scan) | Advisory (review) |
|---|---|---|
| Diagnostic severity | Mapped from finding severity (Error, Warning, Information, or Hint) | Always Information, never Error or Warning |
Diagnostic source | Shipmoor | Shipmoor (advisory) |
| Diagnostic collection | shipmoor | shipmoor-review (a separate collection) |
| Message | the finding message | prefixed [advisory] … |
| Counted in the status bar? | Yes | No |
Three things make this robust:
-
Information-only. Advisory findings are always mapped to
DiagnosticSeverity.Information, regardless of the severity the model assigned. Model opinions never render as red (Error) or yellow (Warning) squiggles. -
A separate diagnostic collection. Review findings live in their own
shipmoor-reviewcollection, independent of the structuralshipmoorcollection. VS Code keys collections independently, so a file can show both a structural defect and an advisory comment without either clobbering the other. -
Excluded from the status-bar counts. The status bar’s “integrity” totals count only diagnostics whose
sourceis exactlyShipmoor. Advisory findings carryShipmoor (advisory), so they never inflate your problem count. The status bar stays an honest tally of structural issues.
If the finding’s position could not be resolved (it anchors to line 1), the title gets a (position approximate) note. Whether a one-line suggested fix is appended under each comment is controlled by shipmoor.review.showRemediation (default true), which falls back to the shared shipmoor.diagnostics.showRemediation.
Settings
| Setting | Type | Default | Meaning |
|---|---|---|---|
shipmoor.review.timeoutMs | number (1000 to 1800000) | 180000 | Abort an advisory review run longer than this. It is higher than the scan timeout because a bring-your-own-agent review is slower. |
shipmoor.review.showRemediation | boolean | true | Append the suggested fix under each advisory comment. |
Gating and entitlement loss
Review is gated on the cli_pro entitlement (surfaced as the extension’s entitlement state). When the gate is locked, the review commands disappear from the palette and cannot be invoked. If your entitlement is lost mid-session, for example a subscription lapses while a review is running, the extension detects the shipmoor.paid_feature_error.v1 signal the CLI writes to stderr, clears the advisory collection (removing stale advisory squiggles), and re-checks entitlement. No error toast is shown. The advisory findings simply stop appearing.
Explain and send-to-agent
Two actions work on advisory findings:
-
Explain this finding. The same explain panel that works on structural findings also resolves advisory ones (it looks the finding up in either collection). It opens a panel with the rule, the why (
root_cause), the fix (recommendation), and a docs link. -
Send to agent. This hands a finding back to a running agent harness session to be fixed. It is the editor end of the review then fix loop. Notably, advisory (review) findings are send-back-eligible without any agent attribution: a finding with
category: "code_review"can be sent back even if it did not come from an agent-driven session, because the intended flow is exactly this: you run a review, you see a finding, you send it back, then the agent delivers a fix. This action needs a running harness; if none is running you get a prompt to start one. See AI coding agents.
See also
- The CLI the extension shells: CLI reference.
- The review then fix loop: AI coding agents.
- The full editor surface (structural scan, settings, activation): IDE Extension overview.