Local CLI
Useful offline, without a cloud account. No target installation and no execution of downloaded code.
30-second quick start
Python 3.12 or later is required. Install from the published DriftSeal source release when available, or from a local checkout. The npm wrapper also requires Python; it never installs Python or a scanned dependency for you.
python3 -m pip install . driftseal scan ./agent-tools --json driftseal baseline ./agent-tools --output approved.json driftseal scan ./agent-tools --json --output current.json driftseal diff approved.json current.json --fail-on critical
Public components and CI output
Prefix PyPI names with pypi:, or use --kind pypi. Unprefixed names are npm. GitHub URLs are recognised automatically. JSON from standard input uses a dash.
driftseal scan @scope/package --json driftseal scan pypi:mcp --sarif --output findings.sarif cat manifest.json | driftseal scan - --json driftseal version
Cloud monitoring
Sign in on the console and create a CLI token. driftseal login asks for the token without echoing it and stores it in a mode-0600 file. Tokens expire after 14 days. watch uploads only a public target coordinate and requires a paid entitlement. status reads your private workspace history. logout revokes the token and removes the local credential file.
driftseal login driftseal watch @scope/package driftseal status --json driftseal logout
Exactly what leaves the workstation
Local path and stdin scans do not send source, environment values, credential files or private keys to DriftSeal. A local baseline remains a local JSON file. There is no automatic private-source telemetry or private summary upload in v0.1.
Registry scans contact the corresponding public registry and artifact host. GitHub scans contact api.github.com and codeload.github.com. MCP scans contact only the supplied endpoint after public-IP validation. A cloud watch sends the public target identity; the service retrieves that public component independently.
Local evidence includes relative source paths, descriptions and schemas after best-effort redaction. Treat exported reports as sensitive. Credential files are excluded, but no pattern-based redactor can recognise every possible secret. Do not upload private reports unless you review them.
Exit codes
0 means the configured severity threshold was not reached; 1 means a finding met the threshold; 2 means input, network, authentication or execution failed. --fail-on accepts info, low, medium, high, critical and none. A baseline command refuses to overwrite an existing file.
Establish your baseline.
Inspect a public component or use the local CLI for private source.
Scan a component — free ↗