1
Install
AIROM is a single static binary. The wheel bundles it, so pip gives you the
CLI without a Go toolchain:
Install
Prefer Go?
go install github.com/airomhq/airom/cmd/airom@latest works
too, but the binary lands in $(go env GOPATH)/bin and the next step
fails with command not found if that directory is not on your PATH.
See Installation for every method and for the PATH fix.2
Verify
Verify
A pip install reports the exact release it came from. A plain
go install
prints dev / none / unknown instead, because the version, commit,
and date are stamped in at build time with ldflags and go install does
not set them. The scanner is fully functional either way.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. The default output is a table on stdout:
scan auto-detects what the target is: an
existing local path, then a git URL, then an image reference.Scan the current directory
The scan exited
0. Findings are not failures: AIROM inventories, it
does not judge. To make CI fail, 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 assigned and combined.5
Emit real documents
The table is for humans. That writes a CycloneDX 1.6 ML-BOM with
-o takes fmt[=path] and is repeatable, so one
scan can produce every artifact you need:CycloneDX + SARIF in one pass
evidence.occurrences[] intact, a
SARIF file for code-review annotations, and still prints the table.Where the evidence lives
The table’sLOCATION column points at the primary sighting and EVIDENCE
counts how many back a component. The structured outputs carry the full
file:line provenance for every occurrence, along with the matched snippet,
the enclosing symbol, the detector that fired, and a per-occurrence confidence.
--wide expands the same detail under each table row.
Inspect the occurrences
The gpt-4.1 component, as emitted
The gpt-4.1 component, as emitted
gpt-4.1 row in the table is not an assertion. It is src/rag.py:8,
columns 9 to 24, matched by rules/openai/model-literal through 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
Next
Installation
pip, Go install, prebuilt binaries, and building from source.
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.