Install
SBOM Sentinel is a single command-line program. It uses Syft to build a software inventory and Grype and Trivy to check it. Homebrew and Scoop install these tools for you.
macOS · Homebrew
brew install cloudengine-labs/tap/sbom-sentinel
sbom-sentinel --versionUpgrade later with brew upgrade sbom-sentinel. Current Homebrew version: 0.3.2.
Linux · Homebrew on Linux
Install Homebrew first if you don't have it, then run:
Get Homebrewbrew install cloudengine-labs/tap/sbom-sentinel
sbom-sentinel --versionWorks on x86_64 and ARM64, on Ubuntu 22.04 or newer and equivalent distributions (glibc 2.34 or newer).
Windows · Scoop
scoop bucket add cloudengine-labs https://github.com/cloudengine-labs/scoop-bucket
scoop install sbom-sentinel
sbom-sentinel --versionUpgrade later with scoop update sbom-sentinel. Current Scoop version: 0.3.1.
Windows · Chocolatey (coming soon)
The package is submitted and waiting for Chocolatey's review. choco install sbom-sentinel will not work until it is approved; use Scoop for now.
Download manually
Each release has an archive and a .sha256 checksum. Check the archive against its checksum, unpack it, and put sbom-sentinel on your PATH. For manual installs, also put syft plus grype and/or trivy on your PATH.
macOS and Linux releasesWindows releasesQuick start
Run these from your project folder. Keep changes on a branch so you can review and revert them.
1. Find vulnerable dependencies
sbom-sentinel scan .Scan finds your projects, builds a software inventory for each, checks it with Grype and Trivy, and writes a report folder at <project>/.sbom-assessment/<timestamp>/. It prints the path.
2. Write a fix plan
sbom-sentinel remediate .sbom-assessmentThis writes remediation-plan.json and prints a Plan ID. It never changes your project.
3. Preview the plan
sbom-sentinel apply-remediation .sbom-assessment/<run>/remediation-plan.jsonReplace <run> with the timestamped folder from your scan. Without --apply, this is a read-only preview: it lists each upgrade, marks it direct or transitive, and warns if a file changed since the plan was made.
4. Apply with confirmation
sbom-sentinel apply-remediation <plan> --apply --confirm <PLAN-ID>Replace <plan> with the plan's file path and <PLAN-ID> with its printed ID. The command refuses to run if the ID doesn't match or a manifest changed. Then run your tests and a build, and review git diff.
5. Verify the fixes
sbom-sentinel scan .Scan again to confirm. Findings that remain usually have no published fix yet.
Other commands
| Command | Use |
|---|---|
| sbom-sentinel report <report-folder> | Show a previous scan again, without rescanning. |
| sbom-sentinel clean-artifacts [path] | List stale build folders. Dry run unless you add --apply. |
| sbom-sentinel --help | Step-by-step guide, options and examples. |
| sbom-sentinel <command> --help | Details and examples for a specific command. |
Reading the results
- report.md is a readable summary. issues.csv opens in a spreadsheet. findings.json is for scripts.
- A finding is a vulnerability, not a package. One package can have many findings.
- Reports list only vulnerable packages, sorted most severe first.
- The report command takes the scanned project's .sbom-assessment folder. Relative paths resolve from where you run the command; use the full path if you're elsewhere.
Use it in CI
By default, scan exits 0 even when it finds vulnerabilities. Add --fail-on to make it a gate:
sbom-sentinel scan . --fail-on high| Option | Fails the build on |
|---|---|
| --fail-on critical | Critical findings |
| --fail-on high | High and critical |
| --fail-on medium | Medium, high and critical |
| --fail-on low | Any finding |
| Exit code | Meaning |
|---|---|
| 0 | Success, or no finding reached the level |
| 1 | At least one finding is at or above the level |
| 2 | An error: bad path, missing scanner or network failure |
Reports are always written first, and a one-line PASS or FAIL goes to stderr. You can also gate an existing scan:
sbom-sentinel report <folder> --fail-on highCompatibility
Operating systems
| Operating system | Architecture | Install with | Status |
|---|---|---|---|
| macOS | Apple Silicon (arm64) | Homebrew | Available, tested |
| macOS | Intel (x86_64) | Homebrew | Available; checksummed build, not yet run on Intel hardware |
| Linux · Ubuntu 22.04+ and equivalents | x86_64 | Homebrew on Linux | Available, tested |
| Linux · Ubuntu 22.04+ and equivalents | ARM64 | Homebrew on Linux | Available, tested |
| Windows 10 / 11 | x86_64 | Scoop | Available, tested |
| Windows 10 / 11 | x86_64 | Chocolatey | Coming soon; awaiting review |
| Windows | ARM64 | — | Not available |
| Debian / Ubuntu packages (apt) | — | — | Not available yet |
| Linux older than Ubuntu 22.04; Alpine (musl) | — | — | Not supported |
The Windows binary isn't code-signed. Windows SmartScreen may ask for confirmation the first time you run it.
Languages and ecosystems
Scanning covers all eight ecosystems below. Automatic fixing is most complete for Node (JavaScript & TypeScript).
| Ecosystem | Detected from | Automatic fix |
|---|---|---|
| Node (JavaScript & TypeScript) | package.json | Yes. npm and Bun tested; pnpm and Yarn commands supported |
| Python | requirements.txt, pyproject.toml | Plan only; does not edit requirements files yet |
| Rust | Cargo.toml | Updates Cargo.lock only |
| Go | go.mod | Supported, not widely tested |
| Java (Maven) | pom.xml | Supported, not widely tested |
| Java (Gradle) | build.gradle, build.gradle.kts | Reported only; fix by hand |
| .NET | *.csproj, *.fsproj | Supported, not widely tested |
| Ruby | Gemfile | Supported, not widely tested |
| PHP | composer.json | Supported, not widely tested |
For Node projects, the package manager is detected from the packageManager field in package.json, then the newest lockfile (bun.lock/bun.lockb, pnpm-lock.yaml, yarn.lock, package-lock.json), then npm. Transitive packages are fixed with overrides, resolutions or pnpm.overrides; dev dependencies stay in devDependencies. Multiple package-manager lockfiles trigger a warning: keep one and delete stale lockfiles.
Requirements
- syft, plus grype and/or trivy on your PATH. Homebrew and Scoop install them.
- Internet access the first time and whenever scanner databases update. Without it, Trivy fails with a ‘failed to download vulnerability DB’ error.
How it stays safe
- Scanning never changes your project. It writes only inside .sbom-assessment/.
- Fixes need two steps: preview first, then --apply --confirm <PLAN-ID>.
- Plans record a hash of every file they will change and refuse to run if one changed.
- No shell commands are built from package names, and there is no telemetry.
- Everything runs on your machine. Scan results are not sent anywhere.
Know the limits
- It reports what the Grype and Trivy databases know. A clean result is not proof of safety.
- An upgrade can break your code. Run your tests and a build before merging; keep changes on a branch.
- Some findings have no published fix. Packages installed at several major versions may need a manual upgrade.
- It doesn't tell you whether your code actually uses the vulnerable function.
- There is no undo command. Review git diff and revert with git if needed.
Troubleshooting
| You see | What it means / what to do |
|---|---|
| failed to download vulnerability DB | Trivy couldn't reach its database. Check your network, VPN or DNS and retry. |
| no findings.json in … | report or remediate is pointed at the wrong folder. Use the path scan printed. |
| warning: Syft found no packages in … | No lockfile or installed dependencies. Results may be incomplete. |
| WARNING: other lockfiles present | Mixed package managers. Keep one and delete the stale lockfiles. |
| Nothing found, but you expected something | Check the scanned folder and that a lockfile exists. |
License
Apache License 2.0. Free to use.