Build on evidence.
One scanner for your terminal, app and agent.
Command line
JSON · SARIF · CI exit codesCheck a lockfile without running its dependencies. Live scans send names and versions to OSV.
Terminal
npx @heysalad/shiptested-cli@0.1.0 scan package-lock.json --json
# Export evidence for code-scanning tools
npx @heysalad/shiptested-cli@0.1.0 scan package-lock.json \
--sarif report.sarifNonzero exits include Blocked, Review required and Incomplete. Reports are not security guarantees.
TypeScript library
@heysalad/shiptestedUse the same deterministic checks inside your own workflow.
Install
npm install @heysalad/shiptested@0.1.0scan.mjs
import { readFile } from 'node:fs/promises';
import { scan } from '@heysalad/shiptested';
const report = await scan({
filename: 'package-lock.json',
lockfile: await readFile('package-lock.json', 'utf8'),
});
for (const finding of report.findings) {
console.log(finding.severity, finding.title);
}
console.log(report.status);Connect your agent
Model Context ProtocolThe local MCP server reads its working directory. The remote endpoint accepts file content.
Local stdio server
npx @heysalad/shiptested-mcp@0.1.0Remote HTTP
Setup guides for Claude Code, Codex, Cursor and Gemini CLI https://mcp.shiptested.com/mcpStart from a small example.
The verdict is a contract.
- Blocked
- A high-severity finding requires attention.
- Incomplete
- Some checks could not establish coverage.
- Review required
- Findings remain for a person to assess.
- Checks passed
- No findings within the completed, documented checks.
Source-code exploitability, Git history and unsupported dependency formats are not established. AI enrichment never overrides the deterministic verdict.
Preview may be ahead of published 0.1.0 packages. Build from source for current changes.