1

Install

AIROM is a single static binary. Install it with the Go toolchain (Go 1.25+):
Install
The binary lands in $(go env GOPATH)/bin. If that directory is not on your PATH, the next step fails with command not found. See Installation for the fix and for building from source.
2

Verify

Verify
dev / none / unknown is expected here. The version, commit, and date are stamped in at build time via ldflags; a plain go install does not set them. Building from source produces a stamped binary.
This is the same ToolInfo that gets embedded in every AIBOM AIROM writes, so a document can always be traced back to the build that produced it.
3

Scan

Point it at your project. scan auto-detects what the target is: an existing local path, then a git URL, then an image reference.
Scan the current directory
The default output is a table on stdout:
The scan exited 0. Findings are not failures — AIROM inventories, it does not judge. To make CI fail, you opt in with --fail-on.
4

Cut the noise

Extension-only dataset detection and keyword-only ai-config matching emit low-confidence rows (the 0.5 ai-config entries above). Filter them at the presentation layer:
Only high-confidence components
0.8 is the practical threshold on a general-purpose directory. See Confidence for how the scores are calibrated.
5

Emit real documents

The table is for humans. -o takes fmt[=path] and is repeatable, so one scan can produce every artifact you need:
CycloneDX + SARIF in one pass
That writes a CycloneDX 1.6 ML-BOM with evidence.occurrences[] intact, a SARIF file for code-review annotations, and still prints the table.
Need CycloneDX 1.7? --cdx-version 1.7. The default is 1.6.

Where the evidence lives

The table’s LOCATION column points at the primary sighting and EVIDENCE counts how many back a component. The full file:line provenance for every occurrence — plus the matched snippet, the enclosing symbol, the detector that fired, and a per-occurrence confidence — is carried in the structured outputs (and --wide expands them under each row).
Inspect the occurrences
That is the whole point: the gpt-4.1 row in the table is not an assertion, it is src/rag.py:8, column 9–24, matched by rules/openai/model-literal via source-code analysis, with the literal text that triggered it.

Wire it into CI

Use a --fail-on policy expression. & (AND) binds tighter than | (OR), and all terms in a clause must hold for a single component.
Fail the build on high-confidence hosted models
Want to report matches without failing? --exit-code 0 alongside your --fail-on policy.

Next

Installation

PATH setup, building from source, and the pre-release caveats.

CLI reference

Every command, flag, and exit code.

Evidence model

Occurrences, detection methods, and identity claims.

Scan a container image

Tarballs and OCI layouts, offline.