Environment variables

InvarLock keeps environment configuration narrow. Comparison intent belongs in request.yaml. Environment variables are alternatives for command options that supply secrets, independent verification anchors, OCI launch choices, and caller-owned provider resources.

Reference

  • Surface: Public CLI, OCI launcher, provider-resource, and security environment variables
  • Stability: Documented variables are public operator inputs; repository-test and add-in-internal variables are excluded
  • Use this page when: Supplying key paths, independent verifier anchors, runtime-image identity, device selection, or caller-owned provider support

An explicit command option wins over its environment alternative. Empty values do not satisfy required paths, digests, fingerprints, or identities.

Diagram
Explicit command options override environment alternatives, while request YAML retains comparison intent and cannot set signing keys, independent trust anchors, or caller-owned host controls.
Explicit command options override environment alternatives, while request YAML retains comparison intent and cannot set signing keys, independent trust anchors, or caller-owned host controls.Explicit command options override environment alternatives, while request YAML retains comparison intent and cannot set signing keys, independent trust anchors, or caller-owned host controls.
Explicit command options override environment alternatives, while request YAML retains comparison intent and cannot set signing keys, independent trust anchors, or caller-owned host controls.Explicit command options override environment alternatives, while request YAML retains comparison intent and cannot set signing keys, independent trust anchors, or caller-owned host controls.

Transaction inputs

VariableCommandMeaning
INVARLOCK_SIGNING_KEYevaluateEd25519 evidence-signing private-key path
INVARLOCK_POLICYverifyIndependently sourced policy file
INVARLOCK_EXPECTED_BASELINE_ARTIFACTverifyApproved baseline artifact-identity sha256:... digest
INVARLOCK_EXPECTED_SUBJECT_ARTIFACTverifyApproved subject artifact-identity sha256:... digest
INVARLOCK_EXPECTED_SCHEDULEverifyApproved canonical schedule sha256:... digest
INVARLOCK_EXPECTED_BASELINE_RUNTIMEverifyExpected baseline sha256:... runtime-image digest
INVARLOCK_EXPECTED_SUBJECT_RUNTIMEverifyExpected subject sha256:... runtime-image digest
INVARLOCK_EXPECTED_SIGNERverifyExpected Ed25519 evidence-signer fingerprint
INVARLOCK_VERIFIER_SIGNING_KEYverifyEd25519 verifier private-key path
INVARLOCK_VERIFIER_IDENTITYverifyStable verifier identity included in the receipt

The receipt destination intentionally has no environment alternative. It must be an explicit new path outside the immutable evidence pack.

Variables contain key paths, not private-key bytes. Keep the evidence-signing key in a separate, caller-controlled location. Run-mode workers never receive that key: the host validates their side results and performs evidence signing and publication itself.

Host OCI worker launch

When the host CLI receives a valid execution.mode: run request, it automatically launches the transaction in Docker or Podman. These variables mirror the evaluate options:

VariableDefaultMeaning
INVARLOCK_RUNTIME_IMAGENoneLocal OCI reference; use repository@sha256:... or an exact sha256:... image identity
INVARLOCK_RUNTIME_IMAGE_DIGESTEmbedded image digest when presentPinned lowercase sha256:... runtime-image identity
INVARLOCK_BASELINE_RUNTIME_IMAGECommon imageBaseline image override
INVARLOCK_BASELINE_RUNTIME_IMAGE_DIGESTBaseline embedded or common digestBaseline image-digest override
INVARLOCK_SUBJECT_RUNTIME_IMAGECommon imageSubject image override
INVARLOCK_SUBJECT_RUNTIME_IMAGE_DIGESTSubject embedded or common digestSubject image-digest override
INVARLOCK_CONTAINER_ENGINEdockerClosed engine selection: docker or podman
INVARLOCK_RUNTIME_DEVICEcpuShared device: cpu, cuda, or cuda:<index>
INVARLOCK_BASELINE_RUNTIME_DEVICEShared deviceOptional baseline override
INVARLOCK_SUBJECT_RUNTIME_DEVICEShared deviceOptional subject override
INVARLOCK_RUNTIME_ENTRYPOINTautoShared entrypoint profile: auto, python, or nvidia
INVARLOCK_BASELINE_RUNTIME_ENTRYPOINTShared profileOptional baseline entrypoint override
INVARLOCK_SUBJECT_RUNTIME_ENTRYPOINTShared profileOptional subject entrypoint override
INVARLOCK_RUNTIME_CPUS4Positive decimal CPU ceiling applied to each worker; at most three decimal places
INVARLOCK_RUNTIME_MEMORY_MIB65536Integer MiB memory ceiling applied to each worker
INVARLOCK_RUNTIME_USER65532:65532Numeric non-root UID:GID used by each worker

If the image reference contains @sha256:..., it must agree with INVARLOCK_RUNTIME_IMAGE_DIGEST when both are supplied. If the image reference has no embedded digest, the separate digest is required and the launcher forms the immutable reference. Mutable tags without a pinned digest are rejected.

Each side image must already exist locally. The launcher uses --pull=never, disables networking, sets a read-only container root, drops capabilities, enables no-new-privileges, bounds process count, and provides a temporary filesystem. It also applies caller-owned CPU and memory ceilings and a numeric non-root identity. The prepared job and schedule, side artifact, and side support resources are mounted read-only. Each worker receives its own writable output directory and cannot read the other side's artifact. The host validates the closed side results before it computes, signs, or publishes evidence.

The submitted request cannot set these host controls. Its validated provider timeout_seconds and authenticated schedule length determine a finite outer worker deadline, capped at 24 hours. Timeout cleanup addresses the exact engine-issued container ID before terminating the attached engine process.

cuda exposes all available GPUs to the selected side worker. An indexed selection such as cuda:1 exposes that host GPU as cuda inside that worker. CPU/CPU and distinct explicit CUDA indexes may run in parallel. Generic CUDA, the same explicit CUDA index, and CPU/CUDA pairs run sequentially. These rules control worker scheduling; the authenticated schedule and record IDs establish the measurement pairing.

The auto entrypoint selects the NVIDIA entrypoint profile for TensorRT-LLM and the Python profile for the other first-party providers. Image, digest, device, and entrypoint defaults are resolved independently for baseline and subject after applying their per-side overrides.

Image-digest agreement identifies declared image bytes. It is not execution attestation and does not prove which physical host executed them.

Canonical Hugging Face runtime images

The repository has distinct CPU and CUDA image definitions. They are not interchangeable. Both build targets require the authenticated source commit, bundle path, and bundle digest described in the runtime-provider guide:

RuntimeDefinitionBuildSmoke check
CPUruntime/Dockerfilemake runtime-imagemake runtime-smoke
x86_64 CUDA 12.6runtime/Dockerfile.cudamake runtime-image-cudamake runtime-smoke-cuda

--runtime-device cuda and the matching environment variables expose a GPU to the selected worker. They do not install CUDA-enabled PyTorch in an image. Select an image built from runtime/Dockerfile.cuda for CUDA Hugging Face evaluation, and require make runtime-smoke-cuda on the intended NVIDIA host before relying on that image/device combination.

Example run environment

export INVARLOCK_RUNTIME_IMAGE='registry.example/invarlock-runtime-cuda@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
export INVARLOCK_RUNTIME_IMAGE_DIGEST='sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
export INVARLOCK_CONTAINER_ENGINE=docker
export INVARLOCK_RUNTIME_DEVICE=cuda
export INVARLOCK_SIGNING_KEY=keys/evidence-signer.pem

invarlock evaluate release-check/request.yaml

Replace the illustrative digest with the exact local CUDA image identity. Keep the signing-key path in a caller-controlled location; the host reads it only when signing the validated evidence bundle.

Equivalent explicit options are often clearer for one-off runs:

invarlock evaluate release-check/request.yaml \
  --signing-key keys/evidence-signer.pem \
  --runtime-image registry.example/invarlock-runtime-cuda@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \
  --runtime-image-digest sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \
  --container-engine docker \
  --runtime-device cuda

Import requests do not launch OCI workers and do not require these image, engine, device, or entrypoint inputs.

Optional provider resources

The GGUF (llama_cpp) add-in requires all three values together:

VariableMeaning
INVARLOCK_GGUF_RESOURCE_ROOTCaller-owned absolute root containing artifact and support files
INVARLOCK_GGUF_BACKEND_EXECUTABLESafe relative backend_executable resource beneath that root
INVARLOCK_GGUF_BACKEND_SOURCESafe relative backend_source resource beneath that root

The TensorRT-LLM add-in requires both values together:

VariableMeaning
INVARLOCK_TENSORRT_LLM_RESOURCE_ROOTCaller-owned absolute root containing the engine and tokenizer contract
INVARLOCK_TENSORRT_LLM_TOKENIZER_CONTRACTSafe relative tokenizer-contract resource beneath that root

The Hugging Face vision-text add-in requires both values together:

VariableMeaning
INVARLOCK_HF_VISION_TEXT_RESOURCE_ROOTCaller-owned absolute root containing both artifacts and image content
INVARLOCK_HF_VISION_TEXT_CONTENT_STORESafe relative image-content directory beneath that root

Resource roots must be absolute non-symbolic directories. Support values must be portable relative paths beneath the root. Missing members, extra partial configuration, path escape, and symbolic-link transitions fail closed.

The primary artifact path remains in request.yaml. Executable, source, and tokenizer-support resources remain caller-controlled when they are provider inputs. The TensorRT-LLM runner is instead installed in and authenticated from the selected runtime image; a submitted request cannot replace it.

Security switches

These variables are false unless set to 1, true, yes, or on:

VariableEffect outside the strict run path
INVARLOCK_ALLOW_NETWORKRemoves the root CLI outbound-socket guard
INVARLOCK_ALLOW_REMOTE_CODERecords permission for remote code in runtime provenance
INVARLOCK_ALLOW_THIRD_PARTY_PLUGINSPermits discovery of non-first-party runtime entry points
INVARLOCK_ALLOW_INSTALLED_SCORERSEquivalent to --allow-installed-scorers; authorizes host-side loading of the exact scorer bound by a request and policy

The strict run path explicitly disables network, remote code, and third-party runtime discovery inside each side worker. An installed scorer instead runs in the host evaluation or verification process after provider facts are authenticated. Authorize it only after reviewing the exact descriptor and package identity pinned by the request and policy. Independent verification must make its own authorization decision.

Validation and failure behavior

ProblemTransaction behavior
Missing required command option and environment alternativeCommand rejects before completion
Key path is missing, symbolic, or not a regular fileTransaction rejects before key content is loaded
Signing key is missing, symbolic, or not a regular host fileTransaction rejects before signing
Runtime image is mutable, unavailable, or disagrees with its digestOCI launch rejects
Container engine is unavailable or not docker/podmanOCI launch rejects
Invalid or conflicting device selectionOCI launch rejects
Partial GGUF, TensorRT-LLM, or vision-text resource groupRuntime construction rejects
Support path escapes its root or crosses a linkNo-follow resource validation rejects
Provider does not support the request metricRequest loading rejects

Operational guidance

  • Prefer explicit options for one-off invocations and narrowly scoped environment variables in automation.
  • Keep private-key bytes out of environment variables.
  • Keep artifact, schedule, runtime, signer, and policy anchors outside the submitted bundle and source them through a separate trusted path.
  • Keep dataset mapping, policy, built-in metric or scorer binding, and provider settings in the authenticated request, not environment variables.
  • Record the exact image digest and engine/device selection with the comparison record; do not infer them from a mutable shell profile later.

Variables used only by repository tests, image builds, or add-in runner internals are not part of this public inventory. Treat this page and invarlock COMMAND --help as the supported operator surface.