Vulnerabilities, VEX and exploitation context
Local advisory data and scanner results, matched offline. This page documents every command in the vulnerabilities group, in the order sbomflow help vulnerabilities lists them. Each command's section is generated from the command itself — its summary, description and options from the parser, and its reads, writes, exit codes, examples and see-also from the command catalog — so it says exactly what sbomflow <command> --help says. Every example below is executed offline by the test suite, and every non-zero exit code is either produced by an executed probe or carries a recorded reason why no offline probe can produce it.
See the CLI overview for how the thirteen groups fit together and the command reference for every command's options in one place.
Overview#
sbomflow vulndb— manage the local, pinned advisory snapshots a scan matches against.vulndb updateis one of the explicit network gates; every other verb reads local files.sbomflow recheck— re-evaluate a shipped release against newer local advisory data, without re-scanning its source. With--vulndb-dir DIR, each row also says whether its advisory was in the snapshot the release recorded.sbomflow ingest-trivy/ingest-grype/ingest-sarif/ingest-codex-security— read another scanner's results as observations. None of them sets a VEX status;not_affectedandfixedcome only from recorded human review.
Who this is for: PSIRT engineers, AppSec engineers and vulnerability coordinators.
sbomflow vulndb#
Manage local pinned vulnerability-data snapshots (OSV dump / CVE List V5).
Manage the local, pinned vulnerability-data snapshots a run can match against:
download one (`update`, the one explicit network step), then inspect, verify,
pin, reindex, retain and compare them offline. --dir is set here, before the
verb. Name a verb, or the group prints its usage and exits 2.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | nothing itself; its verbs read and write one local snapshot directory. |
| Writes | nothing itself; each verb's help names what it writes |
| Network | opt-in-network — Only vulndb update can download; inspect, pin, and verify are offline. Gates: subcommand: update. |
| Exit codes | 0 a verb ran and returned 0 · 2 no verb given, or the verb refused |
| Machine output | human-only-by-design — group dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
--dir | DIR | .sbomflow-vulndb | any | no | Snapshot directory (default: .sbomflow-vulndb). |
Examples
List the local advisory sources and what each has pinned.
sbomflow vulndb --dir vuln-data sourcesVerify every local snapshot's hashes and record counts.
sbomflow vulndb --dir vulndb-store verifyList a store's snapshots and manifests.
sbomflow vulndb --dir vulndb-store inspectSee also: sbomflow vulndb sources, sbomflow vulndb update, sbomflow recheck, sbomflow help goal vulnerabilities.
sbomflow vulndb change-impact#
Explain what changed between two RECORDED source sets for the stored releases.
Explain what changed between two RECORDED source sets (from `vulndb
sources --set`, or the set a run recorded), reading each side's retained
snapshots, and which stored release candidates that may affect. The
active set is never substituted for a recorded one. Read-only and
offline; it writes source-change-impact.json, or prints it with --json
(and also writes it into an --output named beside it).| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | two recorded source-set documents, their retained snapshots, and an evidence store. |
| Writes | source-change-impact.json (into --output, or with --json on stdout) |
--output names | a directory |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 ok · 2 a missing or unreadable set, snapshot or store |
| Machine output | has-json — explains which stored releases a source-set change touches, reusing the release comparison already on disk; --store is required so the command can only emit the shape the schema registry declares |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
--old-set | PATH | none | any | yes | A source-set document recorded EARLIER (vulndb sources --set, or the source_set block a run recorded in source-health.json). Its retained snapshots are read from --dir; the active set is never substituted for it. |
--new-set | PATH | none | any | yes | The source-set document to compare it against, same shape and rules. |
--store | STORE | none | any | yes | Evidence store whose stored releases are evaluated against both sides. Required: the per-release candidate section is part of this artifact's shape, and a store with no releases reports that honestly rather than producing a differently-shaped document. |
--output | OUTPUT | none | any | no | Where source-change-impact.json is written (directory). Default: the current directory. |
--as-of | AS_OF | none | any | no | Pin the comparison timestamp (ISO-8601; default: now). |
--json | (flag) | false | — | no | Print the document on stdout; nothing is written unless --output is also named, in which case the same document is written there too. |
Examples
Explain what changed between two recorded source sets for the stored releases.
sbomflow vulndb --dir vulndb-store change-impact --old-set vulndb-sets/set-old.json --new-set vulndb-sets/set-new.json --store .sbomflow-storePrint the document as JSON instead, at a pinned time.
sbomflow vulndb --dir vulndb-store change-impact --old-set vulndb-sets/set-old.json --new-set vulndb-sets/set-new.json --store .sbomflow-store --json --as-of 2026-07-01T00:00:00ZSee also: sbomflow vulndb sources, sbomflow recheck, sbomflow store verify-replay.
sbomflow vulndb inspect#
List local snapshots + manifests (offline).
List the snapshots in a local snapshot directory with their manifests, as
JSON. Read-only; an empty directory lists none.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | one local snapshot directory. |
| Writes | stdout (each snapshot with its manifest, as JSON) |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 ok, including an empty directory · 2 usage error |
| Machine output | machine-native — prints its report as JSON on stdout with no flag needed |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
Examples
List the store's snapshots and manifests.
sbomflow vulndb --dir vulndb-store inspectAn empty directory lists none.
sbomflow vulndb --dir vuln-data inspectSee also: sbomflow vulndb sources, sbomflow vulndb verify.
sbomflow vulndb pin#
Pin a snapshot as the active one (offline).
Make one snapshot the active one its source matches against, recording the
change in the activation log. Offline; an id the directory does not hold exits
2.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | one local snapshot directory. |
| Writes | the index's active-snapshot pointer and an activation log entry |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 ok · 2 no snapshot by that id |
| Machine output | artifact-suffices — records the active-snapshot pin; vulndb inspect is the JSON read side |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
snapshot_id | snapshot_id | none | any | yes | Snapshot id to pin. |
Examples
Pin the earlier snapshot as the active one.
sbomflow vulndb --dir vulndb-store pin c3a055262999702fRefuse a snapshot id the store does not hold. Exits 2.
sbomflow vulndb --dir vulndb-store pin no-such-snapshotSee also: sbomflow vulndb inspect, sbomflow vulndb sources.
sbomflow vulndb reindex#
Rebuild the derived index from snapshot manifests (offline).
Rebuild the derived index.json of a local snapshot directory from its snapshot
manifests, after the index was lost or corrupted. Offline.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | the snapshot manifests in one local snapshot directory. |
| Writes | the derived index.json, rebuilt from the manifests |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 ok, including an empty directory · 2 usage error |
| Machine output | artifact-suffices — rebuilds the derived index from complete snapshot manifests after index loss or corruption |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
Examples
Rebuild the index from the snapshot manifests.
sbomflow vulndb --dir vulndb-store reindexSee also: sbomflow vulndb inspect, sbomflow vulndb verify.
sbomflow vulndb retention#
Plan conservative snapshot retention against a release store (offline).
Plan conservative snapshot retention: a snapshot any release in the evidence
store still references is kept. --apply removes the rest; without it nothing
is deleted.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | one local snapshot directory and the evidence store whose releases reference it. |
| Writes | with --apply removes unreferenced snapshots; the plan otherwise |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 ok · 2 usage error |
| Machine output | artifact-suffices — writes a deterministic needed-snapshots binding and conservative retention plan; deletion requires explicit --apply |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
--release-store | RELEASE_STORE | none | any | yes | Evidence store whose releases decide which snapshots are still referenced. |
--apply | (flag) | false | — | no | Apply the displayed plan. |
Examples
Plan which snapshots no stored release still references.
sbomflow vulndb --dir vulndb-store retention --release-store .sbomflow-storeApply the plan.
sbomflow vulndb --dir vulndb-store retention --release-store .sbomflow-store --applySee also: sbomflow store retain, sbomflow vulndb inspect.
sbomflow vulndb sources#
List the registered vulnerability sources and each one's active snapshot (offline).
List the registered vulnerability sources and the snapshot each one has ACTIVE
locally, or one source in full. --set prints the content-addressed active set
to record beside a run; --verify-set replays a recorded set and exits 1 when a
source no longer matches; --coverage says which sources an operator can reach
from this build. Nothing is activated or fetched.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | one local snapshot directory and the source registry shipped with SBOMFlow. |
| Writes | stdout (the source inventory; --json, --set and --coverage print JSON) |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 ok · 1 --verify-set: a recorded source no longer matches what is active · 2 an unknown source id |
| Machine output | has-json — read/status surface; lists the registered sources and what each one has ACTIVE locally |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
[source_id] | [source_id] | none | any | no | Show one source in full (default: list all). |
--json | (flag) | false | — | no | Machine-readable inventory on stdout (schema_version sbomflow-vulndb-source-inventory-v1). |
--set | (flag) | false | — | no | Emit the content-addressed ACTIVE source set on stdout (schema_version sbomflow-vulndb-source-set-v1); record it to replay a run. |
--coverage | (flag) | false | — | no | Report, per source, whether an operator can REACH it from this build (schema_version sbomflow-vuln-source-coverage-v1). Reads no store and says nothing about whether data is current or complete. |
--verify-set | PATH | none | any | no | Replay a recorded source set against this store and report per-source match/missing/differs/added. Observes only: nothing is activated or fetched. |
Examples
List the local advisory sources and what each has pinned.
sbomflow vulndb --dir vuln-data sourcesThe inventory as JSON.
sbomflow vulndb --dir vulndb-store sources --jsonPrint the active source set, to record beside a run.
sbomflow vulndb --dir vulndb-store sources --setReplay a recorded set: the KEV snapshot it named is no longer active, so it exits 1. Exits 1.
sbomflow vulndb --dir vulndb-store sources --verify-set vulndb-sets/set-old.jsonSee also: sbomflow vulndb verify, sbomflow vulndb change-impact, sbomflow vulndb update.
sbomflow vulndb update#
Download an official data archive into a pinned, hashed snapshot (the only network step).
Download one official data archive (an OSV dump, a CVE List V5 release, an NVD
feed, or a managed KEV or EPSS feed) into a pinned, content-hashed snapshot
with its manifest. This is the one explicit network step in SBOMFlow; every
other vulndb verb is offline. Exactly one of --url or --source names what to
fetch; --source csaf-provider --url walks a CSAF 2.0 provider's TLP:WHITE
feeds into a local mirror. --source-type csaf-directory --path <dir> instead
registers a local directory of CSAF 2.0 advisories and opens no socket.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | an official archive over the network: the one explicit network step. |
| Writes | a new pinned, hashed snapshot and its manifest in --dir |
| Network | opt-in-network — This explicit command downloads the configured official archive; --source csaf-provider --url walks one CSAF provider's TLP:WHITE feeds; --source-type csaf-directory --path registers a local directory and opens no socket. Gates: explicit vulndb update invocation, --source csaf-provider. |
| Exit codes | 0 a snapshot was fetched and pinned · 2 usage or input error, refused before anything is fetched |
| Machine output | artifact-suffices — records a pinned, hashed snapshot plus its manifest (the one explicit network step) |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
--url | URL | none | any | no | Official archive URL (OSV dump / CVE List V5 release / NVD CVE feed). Omit when --source names a managed feed. |
--source | {csaf-provider,epss,kev} | none | csaf-provider, epss, kev | no | Pin a managed exploitation feed by its official URL (CISA KEV / FIRST EPSS) instead of --url/--source-type; or csaf-provider with --url <provider-metadata.json> to fetch a CSAF 2.0 provider's TLP:WHITE advisories into a local csaf-directory mirror. |
--source-type | TYPE | other | csaf-directory, cve-v5, epss, kev, nvd, osv, other | no | Which registered dataset family the snapshot holds, so it is parsed by the right reader (default: other). One of: csaf-directory, cve-v5, epss, kev, nvd, osv, other. |
--path | PATH | none | any | no | Local directory of CSAF 2.0 documents (as a CSAF downloader writes it) to register as a pinned snapshot, offline. Valid only with --source-type csaf-directory; refused together with --url. |
--release-identity | RELEASE_IDENTITY | none | any | no | Release tag/identity to record. |
--modification-window | MODIFICATION_WINDOW | none | any | no | Covered modification window to record. |
--as-of | AS_OF | none | any | no | Pinned retrieval timestamp (testing/determinism). |
--allow-shrink | (flag) | false | — | no | Allow a >30% record-count drop to become eligible for implicit activation; requires --shrink-reason and still emits a warning. |
--shrink-reason | SHRINK_REASON | none | any | no | Auditable reason for --allow-shrink (for example, confirmed mass withdrawal). |
Examples
Name neither --url nor --source: refused before anything is fetched. Exits 2.
sbomflow vulndb --dir vuln-data updateName both a managed feed and a URL: refused, since exactly one source is allowed. Exits 2.
sbomflow vulndb --dir vuln-data update --source kev --url https://example.invalid/kev.jsonSee also: sbomflow vulndb sources, sbomflow vulndb verify, sbomflow help network.
sbomflow vulndb verify#
Verify snapshot hashes + record counts (offline).
Re-hash every snapshot, or one, and re-count its records against its manifest.
A snapshot that is missing or does not match exits 1. Offline.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | one local snapshot directory. |
| Writes | stdout (one verdict per snapshot; --json prints JSON) |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 ok · 1 a snapshot is missing or failed its hash or record count · 2 no vulndb store at --dir |
| Machine output | has-json — read/status surface; one versioned JSON document on stdout |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
[snapshot_id] | [snapshot_id] | none | any | no | Snapshot id (default: all). |
--json | (flag) | false | — | no | Machine-readable verdict on stdout (schema_version sbomflow-vulndb-verify-v1); same exit codes as the human output. |
Examples
Verify every snapshot's hashes and record counts.
sbomflow vulndb --dir vulndb-store verifyOne snapshot, as JSON.
sbomflow vulndb --dir vulndb-store verify c3a055262999702f --jsonA snapshot id the store does not hold fails and exits 1. Exits 1.
sbomflow vulndb --dir vulndb-store verify no-such-snapshotSee also: sbomflow vulndb inspect, sbomflow vulndb sources.
sbomflow recheck#
Re-evaluate a shipped release against newer local advisory data (offline).
Answer the continuous vulnerability-handling question: has anything in this
already-shipped, FROZEN release become newly affected since we shipped it?
The release's components are read from its evidence-pack.json (the source
is never re-scanned) and the shipped pack is never mutated. Supply the newer
advisory data as a local snapshot.
Statuses newly_affected / no_longer_affected / unchanged. A prior
reviewer decision is attached as CONTEXT only, never applied.
Snapshot with --vulndb-dir, each row says whether its advisory was in
the snapshot the release recorded, looked up by that digest
only; without it every row reads release_snapshot_unavailable.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | a shipped release's evidence-pack.json and a newer local advisory snapshot; the source is never re-scanned. |
| Writes | a NEW recheck/ directory with recheck.json and recheck.md; the pack is never changed |
--output names | a directory |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 ok · 2 a missing or incomplete release (E031), or a missing or unreadable snapshot (E015 when the file is absent or not a file) |
| Machine output | artifact-suffices — writes the recheck report artifact comparing shipped evidence to newer local advisory data |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
EVIDENCE_DIR | EVIDENCE_DIR | none | any | yes | A completed release directory (read-only). |
--osv-snapshot | OSV_SNAPSHOT | none | any | yes | Newer local OSV-format advisory snapshot (JSON list, {'vulns': [...]}, JSONL, or an OSV per-ecosystem all.zip). |
--nvd-file | NVD_FILE | none | any | no | Local NVD snapshot for CVSS/CPE context. |
--kev-file | KEV_FILE | none | any | no | Local CISA KEV snapshot. |
--epss-file | EPSS_FILE | none | any | no | Local FIRST EPSS snapshot. |
--store | STORE | none | any | no | Release store, to attach prior decisions as context. |
--output | OUTPUT | none | any | no | Where the report is written (directory). Default: EVIDENCE_DIR/recheck. |
--as-of | AS_OF | none | any | no | Pinned timestamp for a reproducible recheck. |
--vulndb-dir | DIR | none | any | no | Local vulndb store holding the advisory snapshot the release recorded. Offline: that store's index and the one archive named by the release's recorded digest are read, nothing is fetched, and no other snapshot is read in its place. Each row then says whether its advisory was present_in_release_snapshot or absent_from_release_snapshot. Without it every row reads release_snapshot_unavailable — which is the honest answer, since no store was examined; a store guessed from the working directory would make the answer depend on where the command was run. Changes no status, no summary count and no exit code. |
Examples
Ask whether a shipped release has become newly affected.
sbomflow recheck out --osv-snapshot osv-snapshot.jsonAttach prior decisions from a store and KEV context, at a pinned time.
sbomflow recheck out --osv-snapshot osv-snapshot.json --store .sbomflow-store --kev-file kev.json --as-of 2026-07-01T00:00:00ZSay whether each advisory was in the snapshot the release recorded.
sbomflow recheck out --osv-snapshot osv-snapshot.json --vulndb-dir vulndb-storeSee also: sbomflow store timeline, sbomflow vulndb change-impact, sbomflow report freshness, sbomflow help goal vulnerabilities.
sbomflow ingest-trivy#
Ingest a Trivy JSON report as sourced observations (offline; never native findings/VEX/gate).
Read one Trivy JSON report and write each result as a sourced external
observation, on stdout or to --output. Offline. An imported result is a claim
about what Trivy said, never a native finding, a VEX status or a gate input.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | one Trivy JSON report. |
| Writes | stdout (trivy-ingest.json, or to the file --output names) |
--output names | one file (stdout when omitted) |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 ok · 2 a missing or unrecognised report |
| Machine output | machine-native — prints the sourced Trivy observations as JSON on stdout by default, no flag needed; --output writes the same document to a file instead |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
path | path | none | any | yes | A Trivy JSON report file. |
--output | OUTPUT | none | any | no | Write trivy-ingest.json here (file; default stdout). |
Examples
Normalize a Trivy report into external scanner claims.
sbomflow ingest-trivy exports/trivy.jsonWrite the same document to a file.
sbomflow ingest-trivy exports/trivy.json --output trivy-ingest.jsonRefuse a report that is not Trivy's. Exits 2.
sbomflow ingest-trivy exports/grype.jsonSee also: sbomflow ingest-grype, sbomflow ingest-sarif, sbomflow migrate-in.
sbomflow ingest-grype#
Ingest a Grype JSON report as sourced observations (offline; never native findings/VEX/gate).
Read one Grype JSON report and write each match as a sourced external
observation, on stdout or to --output. Offline. An imported match is a claim
about what Grype said, never a native finding, a VEX status or a gate input.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | one Grype JSON report. |
| Writes | stdout (grype-ingest.json, or to the file --output names) |
--output names | one file (stdout when omitted) |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 ok · 2 a missing or unrecognised report |
| Machine output | machine-native — prints the sourced Grype observations as JSON on stdout by default, no flag needed; --output writes the same document to a file instead |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
path | path | none | any | yes | A Grype JSON report file. |
--output | OUTPUT | none | any | no | Write grype-ingest.json here (file; default stdout). |
Examples
Normalize a Grype report into external scanner claims.
sbomflow ingest-grype exports/grype.jsonWrite the same document to a file.
sbomflow ingest-grype exports/grype.json --output grype-ingest.jsonSee also: sbomflow ingest-trivy, sbomflow ingest-sarif, sbomflow migrate-in.
sbomflow ingest-sarif#
Ingest a SARIF 2.1.0 log (CodeQL/Semgrep/clang-tidy/…) as sourced observations (offline).
Read one SARIF 2.1.0 log from a static-analysis tool (CodeQL, Semgrep, clang-
tidy and others) and write each result as a sourced external observation, on
stdout or to --output. Offline. An imported result is a claim about what that
tool said, never a native finding, a VEX status or a gate input.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | one SARIF 2.1.0 log. |
| Writes | stdout (sarif-ingest.json, or to the file --output names) |
--output names | one file (stdout when omitted) |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 ok · 2 a missing or unrecognised log |
| Machine output | machine-native — prints the sourced SARIF observations as JSON on stdout by default, no flag needed; --output writes the same document to a file instead |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
path | path | none | any | yes | A SARIF 2.1.0 (.sarif/.json) file. |
--output | OUTPUT | none | any | no | Write sarif-ingest.json here (file; default stdout). |
Examples
Normalize a SARIF log into external scanner claims.
sbomflow ingest-sarif exports/semgrep.sarifWrite the same document to a file.
sbomflow ingest-sarif exports/semgrep.sarif --output sarif-ingest.jsonSee also: sbomflow ingest-trivy, sbomflow ingest-grype, sbomflow ingest-codex-security.
sbomflow ingest-codex-security#
Import a LOCAL completed Codex Security scan as external AI-assisted observations.
Import a completed Codex Security scan directory an operator placed on
disk as external AI-assisted observations. Offline: it never runs or
authenticates to the scanner. Every imported result is needs_review, never
a gate input, a VEX status or an approval; coverage stays visible, and zero
findings never means safe.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | one completed scan directory (scan-manifest.json, findings.json, coverage.json); it is never modified. |
| Writes | codex-security-ingest.json (at --output); stdout (with --json, the same document) |
--output names | one file |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 ok · 2 a missing or incomplete scan directory |
| Machine output | has-json — imports a sealed local Codex Security scan as external AI-assisted observations; one versioned JSON document on stdout, every record needs_review |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
scan_dir | scan_dir | none | any | yes | A completed scan directory holding scan-manifest.json, findings.json and coverage.json (read-only; never modified). |
--output | OUTPUT | none | any | no | Write codex-security-ingest.json here (file). |
--release-revision | RELEASE_REVISION | none | any | no | Bind to a stored release only if this recorded revision matches the scan's target. A mismatch stays unbound, never a guess. |
--release-id | RELEASE_ID | none | any | no | The stored release id to record on a successful binding. |
--json | (flag) | false | — | no | Print JSON to stdout instead. |
--as-of | AS_OF | none | any | no | Pinned timestamp recorded in the output. |
Examples
Import a completed scan as external AI-assisted observations.
sbomflow ingest-codex-security codex-scanWrite the import to a file, at a pinned time.
sbomflow ingest-codex-security codex-scan --output codex-security-ingest.json --as-of 2026-07-01T00:00:00ZPrint it as JSON; a revision that does not match the scan stays unbound.
sbomflow ingest-codex-security codex-scan --release-revision abc123 --release-id example-gateway-2.4.1 --jsonSee also: sbomflow ingest-sarif, sbomflow ingest-preserved-artifact, sbomflow help goal ai-evidence.
sbomflow ingest-build-cve-report#
Read a Yocto or Buildroot build's own CVE report as build-tool claims (offline; never a VEX status).
Import a CVE report a build tool wrote about its own packages - Yocto's
cve-check or vex class JSON (also sbom-cve-check's yocto-cve-check-manifest
export), or Buildroot's pkg-stats --json - as external observations. Each
row is the build tool's claim, its status and detail recorded verbatim;
none is an SBOMFlow finding, a VEX status, a review decision or a gate
input. When OUTPUT_DIR holds an evidence pack, each claim is shown beside
SBOMFlow's finding for the same component and CVE, whose status is unchanged.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | experimental |
| Regime | any |
| Reads | one Yocto cve-check/vex JSON report (or an sbom-cve-check Yocto export) or one Buildroot pkg-stats JSON report, and the evidence pack in OUTPUT_DIR when there is one. |
| Writes | build-cve-report-ingest.json (in OUTPUT_DIR; the evidence pack beside it is read, never changed); stdout (the claim counts by status and how many sit beside a finding) |
--output names | a directory |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 the claims were written · 2 a missing or unreadable report, one that is not the declared format or declares another report version, an empty --producer-release, or an OUTPUT_DIR holding another report's ingest; nothing is written |
| Machine output | artifact-suffices — writes build-cve-report-ingest.json into --output; that file is the machine surface |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
REPORT | REPORT | none | any | yes | The build tool's JSON report (read-only; never modified). |
--format | FORMAT | none | yocto-cve-json, buildroot-pkg-stats | yes | Which report this is: yocto-cve-json or buildroot-pkg-stats. Never guessed. |
--producer-release | TEXT | none | any | yes | The release of the tool that wrote the report (for example a Yocto or Buildroot release), as you state it. |
--pass | TEXT | none | any | no | The pass that produced or rewrote the report, when it is not the build tool's own class. |
--output | OUTPUT_DIR | none | any | yes | Where build-cve-report-ingest.json is written (directory); created if absent. An evidence pack already there is read, never changed. |
Examples
Put a Yocto cve-check report's claims beside the findings of an analysed release; nothing SBOMFlow wrote changes.
sbomflow ingest-build-cve-report cve-summary.json --format yocto-cve-json --producer-release 'scarthgap 5.0.4' --output outRecord a Buildroot pkg-stats report; the list each CVE sits in is its status, by name.
sbomflow ingest-build-cve-report pkg-stats.json --format buildroot-pkg-stats --producer-release 2024.02.6 --output br-claimsRefuse a report that is not the declared format; nothing is written. Exits 2.
sbomflow ingest-build-cve-report pkg-stats.json --format yocto-cve-json --producer-release 2024.02.6 --output wrongSee also: sbomflow ingest-grype, sbomflow ingest-trivy, sbomflow migrate-in, sbomflow build-applicability-evidence.
sbomflow validate-ssvc-model#
Validate the packaged or supplied CISA SSVC coordinator decision model.
Validate the packaged CISA SSVC coordinator decision model, or a supplied one,
against its schema and decision-table rules. The exit code is the contract: a
missing or invalid model exits 4.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | stable |
| Regime | any |
| Reads | the packaged SSVC decision model, or the model file named. |
| Writes | stdout (the validation result) |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 the model is valid · 4 the model is missing or invalid |
| Machine output | human-only-by-design — packaged-model self-check; the machine contract is the exit code (0 pass, non-zero fail) |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
[model_path] | [model_path] | none | any | no | Optional SSVC model JSON file. Defaults to packaged model. |
Examples
Validate the packaged SSVC decision model.
sbomflow validate-ssvc-modelA file that is not an SSVC model fails and exits 4. Exits 4.
sbomflow validate-ssvc-model exports/trivy.jsonSee also: sbomflow analyze, sbomflow validate-graph, sbomflow validate-config.
sbomflow ingest-cyclonedx-vdr#
Import a tool's CycloneDX VDR/VEX export as the tool's claims (offline; never a VEX status).
Import the vulnerabilities[] of a CycloneDX VDR or VEX that a binary-analysis
or SCA tool exported about this release, as external observations: one row
per vulnerability and affects[].ref, the ref resolved to the document's own
component (an unresolved ref is kept and counted), ratings verbatim. The
tool's analysis state and justification are recorded as its claim
(decided_by external_tool); none is an SBOMFlow finding, a VEX status, a
review decision or a gate input. When OUTPUT_DIR holds an evidence pack, each
claim is shown beside SBOMFlow's finding for the same component and
vulnerability, whose status is unchanged.| Fact | Value |
|---|---|
| Group | vulnerabilities — Vulnerabilities, VEX & exploitation context |
| Stability | experimental |
| Regime | any |
| Reads | one CycloneDX JSON VDR/VEX (1.4 to 1.7) a binary-analysis or SCA tool exported, and the evidence pack in OUTPUT_DIR when there is one. |
| Writes | cyclonedx-vdr-ingest.json (in OUTPUT_DIR; the evidence pack beside it is read, never changed); stdout (the claim counts by tool analysis state, unresolved refs and how many sit beside a finding) |
--output names | a directory |
| Network | offline — This command has no network-capable path. |
| Exit codes | 0 the claims were written · 2 a missing or unreadable document, one that is not a CycloneDX VDR/VEX of 1.4 or later with a vulnerabilities array, one the run in OUTPUT_DIR read as supplier VEX, an empty --tool-name or --tool-version, or an OUTPUT_DIR holding another document's ingest; nothing is written |
| Machine output | artifact-suffices — writes cyclonedx-vdr-ingest.json into --output; that file is the machine surface |
Options
| Option | Value | Default | Allowed | Required | Help |
|---|---|---|---|---|---|
-h, --help | (flag) | none | — | no | show this help message and exit |
FILE | FILE | none | any | yes | The tool's CycloneDX JSON VDR/VEX export (read-only; never modified). |
--tool-name | TEXT | none | any | yes | The tool that wrote the export, as you state it. |
--tool-version | TEXT | none | any | yes | That tool's version or release, as you state it. |
--output | OUTPUT_DIR | none | any | yes | Where cyclonedx-vdr-ingest.json is written (directory); created if absent. An evidence pack already there is read, never changed. |
Examples
Put a tool's CycloneDX VDR claims beside the findings of an analysed release; its not_affected changes no status.
sbomflow ingest-cyclonedx-vdr vdr.json --tool-name synthetic-binary-analyzer --tool-version 0.0.0-synthetic --output outRecord an SCA tool's CycloneDX 1.5 VEX; an affects ref that names another document is kept and counted.
sbomflow ingest-cyclonedx-vdr sca-vex.json --tool-name synthetic-sca-exporter --tool-version 0.0.0-synthetic --output sca-claimsRefuse a file that is not a CycloneDX VDR/VEX; nothing is written. Exits 2.
sbomflow ingest-cyclonedx-vdr pkg-stats.json --tool-name synthetic-sca-exporter --tool-version 0.0.0-synthetic --output wrongSee also: sbomflow ingest-build-cve-report, sbomflow ingest-grype, sbomflow ingest-trivy, sbomflow migrate-in.