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 update is 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_affected and fixed come 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).

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsnothing itself; its verbs read and write one local snapshot directory.
Writesnothing itself; each verb's help names what it writes
Networkopt-in-network — Only vulndb update can download; inspect, pin, and verify are offline. Gates: subcommand: update.
Exit codes0 a verb ran and returned 0 · 2 no verb given, or the verb refused
Machine outputhuman-only-by-design — group dispatcher: prints usage/guidance only; the machine surfaces are its nested verbs

Options

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
--dirDIR.sbomflow-vulndbanynoSnapshot directory (default: .sbomflow-vulndb).

Examples

List the local advisory sources and what each has pinned.

sh
sbomflow vulndb --dir vuln-data sources

Verify every local snapshot's hashes and record counts.

sh
sbomflow vulndb --dir vulndb-store verify

List a store's snapshots and manifests.

sh
sbomflow vulndb --dir vulndb-store inspect

See 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.

text
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).
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readstwo recorded source-set documents, their retained snapshots, and an evidence store.
Writessource-change-impact.json (into --output, or with --json on stdout)
--output namesa directory
Networkoffline — This command has no network-capable path.
Exit codes0 ok · 2 a missing or unreadable set, snapshot or store
Machine outputhas-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

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
--old-setPATHnoneanyyesA 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-setPATHnoneanyyesThe source-set document to compare it against, same shape and rules.
--storeSTOREnoneanyyesEvidence 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.
--outputOUTPUTnoneanynoWhere source-change-impact.json is written (directory). Default: the current directory.
--as-ofAS_OFnoneanynoPin the comparison timestamp (ISO-8601; default: now).
--json(flag)false—noPrint 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.

sh
sbomflow vulndb --dir vulndb-store change-impact --old-set vulndb-sets/set-old.json --new-set vulndb-sets/set-new.json --store .sbomflow-store

Print the document as JSON instead, at a pinned time.

sh
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:00Z

See also: sbomflow vulndb sources, sbomflow recheck, sbomflow store verify-replay.

sbomflow vulndb inspect#

List local snapshots + manifests (offline).

text
List the snapshots in a local snapshot directory with their manifests, as
JSON. Read-only; an empty directory lists none.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsone local snapshot directory.
Writesstdout (each snapshot with its manifest, as JSON)
Networkoffline — This command has no network-capable path.
Exit codes0 ok, including an empty directory · 2 usage error
Machine outputmachine-native — prints its report as JSON on stdout with no flag needed

Options

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit

Examples

List the store's snapshots and manifests.

sh
sbomflow vulndb --dir vulndb-store inspect

An empty directory lists none.

sh
sbomflow vulndb --dir vuln-data inspect

See also: sbomflow vulndb sources, sbomflow vulndb verify.

sbomflow vulndb pin#

Pin a snapshot as the active one (offline).

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsone local snapshot directory.
Writesthe index's active-snapshot pointer and an activation log entry
Networkoffline — This command has no network-capable path.
Exit codes0 ok · 2 no snapshot by that id
Machine outputartifact-suffices — records the active-snapshot pin; vulndb inspect is the JSON read side

Options

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
snapshot_idsnapshot_idnoneanyyesSnapshot id to pin.

Examples

Pin the earlier snapshot as the active one.

sh
sbomflow vulndb --dir vulndb-store pin c3a055262999702f

Refuse a snapshot id the store does not hold. Exits 2.

sh
sbomflow vulndb --dir vulndb-store pin no-such-snapshot

See also: sbomflow vulndb inspect, sbomflow vulndb sources.

sbomflow vulndb reindex#

Rebuild the derived index from snapshot manifests (offline).

text
Rebuild the derived index.json of a local snapshot directory from its snapshot
manifests, after the index was lost or corrupted. Offline.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsthe snapshot manifests in one local snapshot directory.
Writesthe derived index.json, rebuilt from the manifests
Networkoffline — This command has no network-capable path.
Exit codes0 ok, including an empty directory · 2 usage error
Machine outputartifact-suffices — rebuilds the derived index from complete snapshot manifests after index loss or corruption

Options

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit

Examples

Rebuild the index from the snapshot manifests.

sh
sbomflow vulndb --dir vulndb-store reindex

See also: sbomflow vulndb inspect, sbomflow vulndb verify.

sbomflow vulndb retention#

Plan conservative snapshot retention against a release store (offline).

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsone local snapshot directory and the evidence store whose releases reference it.
Writeswith --apply removes unreferenced snapshots; the plan otherwise
Networkoffline — This command has no network-capable path.
Exit codes0 ok · 2 usage error
Machine outputartifact-suffices — writes a deterministic needed-snapshots binding and conservative retention plan; deletion requires explicit --apply

Options

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
--release-storeRELEASE_STOREnoneanyyesEvidence store whose releases decide which snapshots are still referenced.
--apply(flag)false—noApply the displayed plan.

Examples

Plan which snapshots no stored release still references.

sh
sbomflow vulndb --dir vulndb-store retention --release-store .sbomflow-store

Apply the plan.

sh
sbomflow vulndb --dir vulndb-store retention --release-store .sbomflow-store --apply

See also: sbomflow store retain, sbomflow vulndb inspect.

sbomflow vulndb sources#

List the registered vulnerability sources and each one's active snapshot (offline).

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsone local snapshot directory and the source registry shipped with SBOMFlow.
Writesstdout (the source inventory; --json, --set and --coverage print JSON)
Networkoffline — This command has no network-capable path.
Exit codes0 ok · 1 --verify-set: a recorded source no longer matches what is active · 2 an unknown source id
Machine outputhas-json — read/status surface; lists the registered sources and what each one has ACTIVE locally

Options

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
[source_id][source_id]noneanynoShow one source in full (default: list all).
--json(flag)false—noMachine-readable inventory on stdout (schema_version sbomflow-vulndb-source-inventory-v1).
--set(flag)false—noEmit the content-addressed ACTIVE source set on stdout (schema_version sbomflow-vulndb-source-set-v1); record it to replay a run.
--coverage(flag)false—noReport, 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-setPATHnoneanynoReplay 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.

sh
sbomflow vulndb --dir vuln-data sources

The inventory as JSON.

sh
sbomflow vulndb --dir vulndb-store sources --json

Print the active source set, to record beside a run.

sh
sbomflow vulndb --dir vulndb-store sources --set

Replay a recorded set: the KEV snapshot it named is no longer active, so it exits 1. Exits 1.

sh
sbomflow vulndb --dir vulndb-store sources --verify-set vulndb-sets/set-old.json

See 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).

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsan official archive over the network: the one explicit network step.
Writesa new pinned, hashed snapshot and its manifest in --dir
Networkopt-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 codes0 a snapshot was fetched and pinned · 2 usage or input error, refused before anything is fetched
Machine outputartifact-suffices — records a pinned, hashed snapshot plus its manifest (the one explicit network step)

Options

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
--urlURLnoneanynoOfficial archive URL (OSV dump / CVE List V5 release / NVD CVE feed). Omit when --source names a managed feed.
--source{csaf-provider,epss,kev}nonecsaf-provider, epss, kevnoPin 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-typeTYPEothercsaf-directory, cve-v5, epss, kev, nvd, osv, othernoWhich 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.
--pathPATHnoneanynoLocal 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-identityRELEASE_IDENTITYnoneanynoRelease tag/identity to record.
--modification-windowMODIFICATION_WINDOWnoneanynoCovered modification window to record.
--as-ofAS_OFnoneanynoPinned retrieval timestamp (testing/determinism).
--allow-shrink(flag)false—noAllow a >30% record-count drop to become eligible for implicit activation; requires --shrink-reason and still emits a warning.
--shrink-reasonSHRINK_REASONnoneanynoAuditable reason for --allow-shrink (for example, confirmed mass withdrawal).

Examples

Name neither --url nor --source: refused before anything is fetched. Exits 2.

sh
sbomflow vulndb --dir vuln-data update

Name both a managed feed and a URL: refused, since exactly one source is allowed. Exits 2.

sh
sbomflow vulndb --dir vuln-data update --source kev --url https://example.invalid/kev.json

See also: sbomflow vulndb sources, sbomflow vulndb verify, sbomflow help network.

sbomflow vulndb verify#

Verify snapshot hashes + record counts (offline).

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsone local snapshot directory.
Writesstdout (one verdict per snapshot; --json prints JSON)
Networkoffline — This command has no network-capable path.
Exit codes0 ok · 1 a snapshot is missing or failed its hash or record count · 2 no vulndb store at --dir
Machine outputhas-json — read/status surface; one versioned JSON document on stdout

Options

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
[snapshot_id][snapshot_id]noneanynoSnapshot id (default: all).
--json(flag)false—noMachine-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.

sh
sbomflow vulndb --dir vulndb-store verify

One snapshot, as JSON.

sh
sbomflow vulndb --dir vulndb-store verify c3a055262999702f --json

A snapshot id the store does not hold fails and exits 1. Exits 1.

sh
sbomflow vulndb --dir vulndb-store verify no-such-snapshot

See also: sbomflow vulndb inspect, sbomflow vulndb sources.

sbomflow recheck#

Re-evaluate a shipped release against newer local advisory data (offline).

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsa shipped release's evidence-pack.json and a newer local advisory snapshot; the source is never re-scanned.
Writesa NEW recheck/ directory with recheck.json and recheck.md; the pack is never changed
--output namesa directory
Networkoffline — This command has no network-capable path.
Exit codes0 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 outputartifact-suffices — writes the recheck report artifact comparing shipped evidence to newer local advisory data

Options

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
EVIDENCE_DIREVIDENCE_DIRnoneanyyesA completed release directory (read-only).
--osv-snapshotOSV_SNAPSHOTnoneanyyesNewer local OSV-format advisory snapshot (JSON list, {'vulns': [...]}, JSONL, or an OSV per-ecosystem all.zip).
--nvd-fileNVD_FILEnoneanynoLocal NVD snapshot for CVSS/CPE context.
--kev-fileKEV_FILEnoneanynoLocal CISA KEV snapshot.
--epss-fileEPSS_FILEnoneanynoLocal FIRST EPSS snapshot.
--storeSTOREnoneanynoRelease store, to attach prior decisions as context.
--outputOUTPUTnoneanynoWhere the report is written (directory). Default: EVIDENCE_DIR/recheck.
--as-ofAS_OFnoneanynoPinned timestamp for a reproducible recheck.
--vulndb-dirDIRnoneanynoLocal 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.

sh
sbomflow recheck out --osv-snapshot osv-snapshot.json

Attach prior decisions from a store and KEV context, at a pinned time.

sh
sbomflow recheck out --osv-snapshot osv-snapshot.json --store .sbomflow-store --kev-file kev.json --as-of 2026-07-01T00:00:00Z

Say whether each advisory was in the snapshot the release recorded.

sh
sbomflow recheck out --osv-snapshot osv-snapshot.json --vulndb-dir vulndb-store

See 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).

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsone Trivy JSON report.
Writesstdout (trivy-ingest.json, or to the file --output names)
--output namesone file (stdout when omitted)
Networkoffline — This command has no network-capable path.
Exit codes0 ok · 2 a missing or unrecognised report
Machine outputmachine-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

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
pathpathnoneanyyesA Trivy JSON report file.
--outputOUTPUTnoneanynoWrite trivy-ingest.json here (file; default stdout).

Examples

Normalize a Trivy report into external scanner claims.

sh
sbomflow ingest-trivy exports/trivy.json

Write the same document to a file.

sh
sbomflow ingest-trivy exports/trivy.json --output trivy-ingest.json

Refuse a report that is not Trivy's. Exits 2.

sh
sbomflow ingest-trivy exports/grype.json

See 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).

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsone Grype JSON report.
Writesstdout (grype-ingest.json, or to the file --output names)
--output namesone file (stdout when omitted)
Networkoffline — This command has no network-capable path.
Exit codes0 ok · 2 a missing or unrecognised report
Machine outputmachine-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

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
pathpathnoneanyyesA Grype JSON report file.
--outputOUTPUTnoneanynoWrite grype-ingest.json here (file; default stdout).

Examples

Normalize a Grype report into external scanner claims.

sh
sbomflow ingest-grype exports/grype.json

Write the same document to a file.

sh
sbomflow ingest-grype exports/grype.json --output grype-ingest.json

See 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).

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsone SARIF 2.1.0 log.
Writesstdout (sarif-ingest.json, or to the file --output names)
--output namesone file (stdout when omitted)
Networkoffline — This command has no network-capable path.
Exit codes0 ok · 2 a missing or unrecognised log
Machine outputmachine-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

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
pathpathnoneanyyesA SARIF 2.1.0 (.sarif/.json) file.
--outputOUTPUTnoneanynoWrite sarif-ingest.json here (file; default stdout).

Examples

Normalize a SARIF log into external scanner claims.

sh
sbomflow ingest-sarif exports/semgrep.sarif

Write the same document to a file.

sh
sbomflow ingest-sarif exports/semgrep.sarif --output sarif-ingest.json

See 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.

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsone completed scan directory (scan-manifest.json, findings.json, coverage.json); it is never modified.
Writescodex-security-ingest.json (at --output); stdout (with --json, the same document)
--output namesone file
Networkoffline — This command has no network-capable path.
Exit codes0 ok · 2 a missing or incomplete scan directory
Machine outputhas-json — imports a sealed local Codex Security scan as external AI-assisted observations; one versioned JSON document on stdout, every record needs_review

Options

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
scan_dirscan_dirnoneanyyesA completed scan directory holding scan-manifest.json, findings.json and coverage.json (read-only; never modified).
--outputOUTPUTnoneanynoWrite codex-security-ingest.json here (file).
--release-revisionRELEASE_REVISIONnoneanynoBind to a stored release only if this recorded revision matches the scan's target. A mismatch stays unbound, never a guess.
--release-idRELEASE_IDnoneanynoThe stored release id to record on a successful binding.
--json(flag)false—noPrint JSON to stdout instead.
--as-ofAS_OFnoneanynoPinned timestamp recorded in the output.

Examples

Import a completed scan as external AI-assisted observations.

sh
sbomflow ingest-codex-security codex-scan

Write the import to a file, at a pinned time.

sh
sbomflow ingest-codex-security codex-scan --output codex-security-ingest.json --as-of 2026-07-01T00:00:00Z

Print it as JSON; a revision that does not match the scan stays unbound.

sh
sbomflow ingest-codex-security codex-scan --release-revision abc123 --release-id example-gateway-2.4.1 --json

See 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).

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilityexperimental
Regimeany
Readsone 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.
Writesbuild-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 namesa directory
Networkoffline — This command has no network-capable path.
Exit codes0 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 outputartifact-suffices — writes build-cve-report-ingest.json into --output; that file is the machine surface

Options

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
REPORTREPORTnoneanyyesThe build tool's JSON report (read-only; never modified).
--formatFORMATnoneyocto-cve-json, buildroot-pkg-statsyesWhich report this is: yocto-cve-json or buildroot-pkg-stats. Never guessed.
--producer-releaseTEXTnoneanyyesThe release of the tool that wrote the report (for example a Yocto or Buildroot release), as you state it.
--passTEXTnoneanynoThe pass that produced or rewrote the report, when it is not the build tool's own class.
--outputOUTPUT_DIRnoneanyyesWhere 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.

sh
sbomflow ingest-build-cve-report cve-summary.json --format yocto-cve-json --producer-release 'scarthgap 5.0.4' --output out

Record a Buildroot pkg-stats report; the list each CVE sits in is its status, by name.

sh
sbomflow ingest-build-cve-report pkg-stats.json --format buildroot-pkg-stats --producer-release 2024.02.6 --output br-claims

Refuse a report that is not the declared format; nothing is written. Exits 2.

sh
sbomflow ingest-build-cve-report pkg-stats.json --format yocto-cve-json --producer-release 2024.02.6 --output wrong

See 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.

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilitystable
Regimeany
Readsthe packaged SSVC decision model, or the model file named.
Writesstdout (the validation result)
Networkoffline — This command has no network-capable path.
Exit codes0 the model is valid · 4 the model is missing or invalid
Machine outputhuman-only-by-design — packaged-model self-check; the machine contract is the exit code (0 pass, non-zero fail)

Options

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
[model_path][model_path]noneanynoOptional SSVC model JSON file. Defaults to packaged model.

Examples

Validate the packaged SSVC decision model.

sh
sbomflow validate-ssvc-model

A file that is not an SSVC model fails and exits 4. Exits 4.

sh
sbomflow validate-ssvc-model exports/trivy.json

See 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).

text
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.
FactValue
Groupvulnerabilities — Vulnerabilities, VEX & exploitation context
Stabilityexperimental
Regimeany
Readsone 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.
Writescyclonedx-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 namesa directory
Networkoffline — This command has no network-capable path.
Exit codes0 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 outputartifact-suffices — writes cyclonedx-vdr-ingest.json into --output; that file is the machine surface

Options

OptionValueDefaultAllowedRequiredHelp
-h, --help(flag)none—noshow this help message and exit
FILEFILEnoneanyyesThe tool's CycloneDX JSON VDR/VEX export (read-only; never modified).
--tool-nameTEXTnoneanyyesThe tool that wrote the export, as you state it.
--tool-versionTEXTnoneanyyesThat tool's version or release, as you state it.
--outputOUTPUT_DIRnoneanyyesWhere 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.

sh
sbomflow ingest-cyclonedx-vdr vdr.json --tool-name synthetic-binary-analyzer --tool-version 0.0.0-synthetic --output out

Record an SCA tool's CycloneDX 1.5 VEX; an affects ref that names another document is kept and counted.

sh
sbomflow ingest-cyclonedx-vdr sca-vex.json --tool-name synthetic-sca-exporter --tool-version 0.0.0-synthetic --output sca-claims

Refuse a file that is not a CycloneDX VDR/VEX; nothing is written. Exits 2.

sh
sbomflow ingest-cyclonedx-vdr pkg-stats.json --tool-name synthetic-sca-exporter --tool-version 0.0.0-synthetic --output wrong

See also: sbomflow ingest-build-cve-report, sbomflow ingest-grype, sbomflow ingest-trivy, sbomflow migrate-in.