Every global flag can also be supplied as an environment variable or a key in .airom.yaml. The three spellings resolve through one layering rule.

Precedence

Highest wins.
Precedence, highest first
1

Flags

An explicitly-set flag always wins. A flag you did not pass does not shadow a lower layer — its default only fills a key nothing else provided.
2

AIROM_* environment variables

Beat the config file. This is the CI layer: set once in the job environment.
3

.airom.yaml

Discovered in the working directory. This is the repo layer: commit it so every developer and every CI run scans the same way.
4

Built-in defaults

The flag defaults documented in the CLI reference.

Environment variables

The rule: AIROM_ + the flag name, upper-snake-cased. Dashes become underscores. List-valued keys are comma-separated:
List-valued environment variables
The list-valued keys are output, rules, and ignore — the three repeatable stringArray flags. Every other key takes a single scalar.

.airom.yaml

Discovered in the working directory. Keys mirror flag names exactly — the flag --min-confidence is the key min-confidence.
.airom.yaml
A bare scalar is accepted where a list is expected, and becomes a one-element list:
Scalar shorthand for a list key

Command-specific keys

The image and k8s flags participate in the same layering, under their flag names:
Command-specific keys
These keys are global in the configuration file — they are not scoped per command. An input: key in .airom.yaml applies to airom image in that directory, and airom image my-ref:latest will then fail, because a reference and --input are mutually exclusive regardless of which layer supplied the input.

Unknown keys fail loudly

An unrecognized key in .airom.yaml, or an unrecognized AIROM_* variable, is a fatal configuration error (exit 2). It is never a silent no-op.
A typo — this is an error, not a no-op
Result
The same applies to AIROM_PARALLELS=8. The reasoning is the one property that matters most for a CI gate: a typo that silently disabled --fail-on would be worse than no gate at all, because you would believe you had one.
Values are strictly typed too. AIROM_EXIT_CODE=one or min-confidence: high fails with a precise error rather than coercing to zero — which would quietly delete your gate.

Cross-key interactions

--format is a single-format alias for -o. Passing both explicitly on the command line is an error. Across layers, the higher layer wins: a format from the environment beats an output list from .airom.yaml. Within one layer, an output list beats the format alias.
-q and -v are mutually exclusive when both are passed on the command line. An explicit -v overrides a quiet from the environment or the file, and an explicit -q overrides a verbose from the environment or the file. If both come from the environment or the file, quiet wins — less noise is the safe default.
exit-code must be in [0,255].

Ignore files

--ignore globs are applied on top of .gitignore and .airomignore, not instead of them. Both ignore files are honored on fs and repo scans, with gitignore syntax and the same nested per-directory semantics.

CLI reference

Every command, argument, and flag.