CRA Evidence CLI
Command-line tools for CRA Evidence workflows and local software supply-chain checks.
The CLI has two modes:
- Local commands that run without a CRA Evidence account or API key.
- Account commands that upload evidence or read release state from CRA Evidence.
This page covers the public command basics. The full reference lives in docs/. Registered CRA Evidence users can also sign in to view the command documentation at https://docs.craevidence.com/cli-reference.
The local checks are review aids and CI gates. They are not an audit, and exit 0 does not prove compliance.
Install
pip install craevidence
pipx install craevidence
pipx is a good fit for command-line tools because it installs the package in
an isolated environment.
The installed command is:
craevidence --help
Python 3.12 or newer is required. Docker images and other install options are covered in the installation guide.
Documentation
| Page | Contents |
|---|---|
| Local commands | check, eol-check, egress-check, secrets-check, config-check, code-check, draft, assessment, db, and the offline template scaffold. |
| Account commands | Version creation, uploads, scan, status, risk assessment status, release lifecycle, distributor, profiles, validation, and verification. |
| CI/CD integration | GitHub Action, GitLab Component, Docker, Jenkins, OpenSSF Scorecard, and complyctl. |
| Installation | PyPI, Docker, container registries, and from source. |
| Troubleshooting | Common errors and fixes. |
| Releasing | Maintainer reference: channels, verification, tags, support policy. |
Local Check
craevidence check scans a directory, container image, or existing SBOM and
reports known vulnerability signals that can block CI when a threshold is met.
It does not require an account and does not upload your project to CRA Evidence.
craevidence check .
craevidence check --image ghcr.io/acme/app:1.4.2
craevidence check --sbom sbom.cdx.json
craevidence check . --fail-on known-exploited
By default, check uses network data sources. It uses Grype when installed
and working, falls back to OSV.dev when Grype is absent or fails, and consults
CISA KEV plus FIRST EPSS for enrichment. For a network-restricted run, provide
an SBOM with --sbom and run where Grype has a local database; CISA KEV and
FIRST EPSS enrichment are reported as unavailable if they cannot be reached.
Verbose output includes a section named What this local snapshot cannot tell you. The JSON output keeps the same review context in machine-readable form.
Free Commands
These commands do not need CRA_EVIDENCE_API_KEY:
| Command | Purpose |
|---|---|
check |
Scan a directory, image, or SBOM and gate CI with --fail-on. |
eol-check |
Flag end-of-life and support status from local SBOM components. |
egress-check |
Inventory external interfaces and data-egress indicators. |
secrets-check |
Scan the working tree for candidate hard-coded secrets. |
config-check |
Audit Dockerfile, Terraform, and Kubernetes files for insecure defaults. |
code-check |
On supported platforms, scan source code offline with the bundled, verified Opengrep engine and explicit CRA Evidence rules. |
draft |
Scaffold VEX, security.txt, advisory, risk-assessment, and threat-model drafts for review. |
compliance-as-code template --offline |
Create starter YAML from local input without an API key. |
assessment |
Scaffold an Annex I applicability matrix and gate CI on structured gaps. |
db update / db status |
Manage and inspect the local Grype vulnerability database cache. |
CI Examples
GitHub Actions:
jobs:
cra-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pipx install craevidence
- run: craevidence check . --fail-on known-exploited
GitLab CI:
cra-check:
image: python:3.12-slim
script:
- pip install craevidence
- craevidence check . --fail-on known-exploited
Account Commands
Commands that upload evidence or read CRA Evidence release state need an API key:
export CRA_EVIDENCE_API_KEY=...
craevidence create-version --product my-product --version 1.0.0
craevidence upload-sbom --product my-product --version 1.0.0 --file sbom.cdx.json
craevidence status --product my-product --version 1.0.0
create-version creates a draft under an existing product without uploading
new evidence. CRA Evidence automatically links reusable product-level
documents and templates to the version. This is useful when source-code
findings need a version before an SBOM is available:
craevidence create-version --product my-product --version 1.0.0
craevidence code-check . --product my-product --version 1.0.0 --upload
code-check runs locally and uploads sanitized SARIF finding metadata, not
source code. The bundled pack has 104 rules: 54 run by default and 50 broader
rules require --include-experimental; the command reports exact per-language
rule counts. Default coverage by language:
- Python: 42 focused rules.
- Go: direct
crypto/tlsdial calls that disable verification without a custom callback. - Java: compiler-attested JDK weak-digest calls.
- PHP: fully qualified global
\unserializecalls fed from a reviewed HTTP superglobal source. - C#: the framework accept-any certificate-validator assignment, attested
through Roslyn against the signed
HttpClientHandlertype. - Rust: literal TLS verification disablement, bound to the exact crates.io reqwest package.
- C and C++: three compiler-attested rules each, covering fixed-array
out-of-bounds literal writes, a system
printfwhose format argument ismain's ownargvparameter, and direct system-shell commands, through pinned libclang C17 and C++17 profiles. - JavaScript and TypeScript: assigned odd integer literals above the exact binary64 safe-integer boundary.
The C, C++, C#, Java, and Rust defaults consume a versioned
--semantic-evidence envelope produced by code-evidence. Missing,
ambiguous, stale, or invalid evidence reports degraded coverage instead of a
clean result. Broader rules remain opt-in where corpus precision, parser
coverage, type resolution, namespace binding, or intrafile dataflow is
insufficient for default use. No group is general SAST coverage for its
language. Neither command proves compliance. Exact rule scopes, evidence
requirements, and toolchain profiles are documented in
Local commands
and the
rule pack reference.
The default API URL is:
https://api.craevidence.com
You can override it with:
export CRA_EVIDENCE_URL=https://api.craevidence.com
Environment Variables
| Variable | Purpose |
|---|---|
CRA_EVIDENCE_API_KEY |
API key for account commands. |
CRA_EVIDENCE_URL |
CRA Evidence API URL. Defaults to https://api.craevidence.com. |
CRA_EVIDENCE_ORG |
Default organization slug. |
CRA_EVIDENCE_PRODUCT |
Default product slug for upload commands. |
CRA_EVIDENCE_VERSION |
Default product version for upload commands. |
CRA_EVIDENCE_COMPONENT |
Default component slug for component-aware uploads. |
CRA_EVIDENCE_COMPONENT_VERSION |
Default component release version. |
CRA_EVIDENCE_TIMEOUT |
HTTP request timeout in seconds for account commands. Defaults to 60. |
CRA_NO_WARN |
Set to any value to suppress API URL configuration warnings. |
Credentials can also be stored in ~/.cra-evidence/config.yaml. Keep that file
private, for example with chmod 600 ~/.cra-evidence/config.yaml.
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success. For local gates, no configured blocking finding was present in this local snapshot. |
| 1 | General error. |
| 2 | Authentication error. |
| 3 | API error. |
| 4 | Validation error. |
| 5 | File not found. |
| 6 | Configuration error. |
| 7 | security.txt validation failed. |
| 10 | Critical vulnerabilities found. |
| 11 | High vulnerabilities found. |
| 12 | Medium vulnerabilities found. |
| 13 | Low vulnerabilities found. |
| 14 | SBOM quality score below the configured threshold. |
| 15 | Local scan engine unavailable. |
| 16 | License policy threshold exceeded. |
| 17 | Known-exploited vulnerabilities found. |
| 18 | Candidate secrets found. |
| 19 | Insecure-default config findings found. |
| 20 | CRA status is not ready when a status gate is enabled. |
| 21 | Structured evidence mapping was required but was not populated. |
| 22 | SBOM signature trust was required but verification was not trusted. |
| 23 | SBOM signing failed or no Sigstore OIDC identity was available. |
| 24 | CRA legal floor is met but the configured release policy is not. |
| 25 | Mandatory Annex I requirement is not addressed. |
| 26 | Annex I Part I(2) requirement is marked not-applicable without a justification. |
| 27 | Code-check findings at or above the configured --fail-on level. |
| 28 | Risk assessment review is still pending for the version (ra status --fail-on unreviewed, or ra review --non-interactive with unresolved review items). |
| 29 | Code-check parser coverage is degraded while an explicit --fail-on gate is enabled. This takes precedence over exit 27 because the result is incomplete. |
Exit 0 != compliance. Local output is a snapshot for review and CI policy, not a legal conclusion.
Data Sources
| Source | Use |
|---|---|
| FIRST EPSS | Exploit-probability enrichment. |
| CISA KEV | Known-exploited vulnerability enrichment. |
| OSV.dev | Open source vulnerability data when the OSV path is used. |
| CRA Evidence Grype engine | Local vulnerability matching and SBOM generation. The engine embeds Anchore Syft for package cataloguing. Stock Grype and a standalone Syft executable are not product engines. |
| endoflife.date | End-of-life and support-cycle data for eol-check. |
Support
- Website: https://craevidence.com
- Email: support@craevidence.com
License
MIT License. See the package license file for details.
Metadata
Release files for craevidence 4.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| craevidence-4.2.0.tar.gz | 515.7 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| craevidence-4.2.0-py3-none-musllinux_1_2_x86_64.whl | Python 3 | none | Linux musl 1.2+ x86-64 | Details |
| craevidence-4.2.0-py3-none-musllinux_1_2_aarch64.whl | Python 3 | none | Linux musl 1.2+ ARM64 | Details |
| craevidence-4.2.0-py3-none-manylinux_2_17_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| craevidence-4.2.0-py3-none-manylinux_2_17_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| craevidence-4.2.0-py3-none-macosx_12_0_x86_64.whl | Python 3 | none | macOS 12.0+ x86-64 | Details |
| craevidence-4.2.0-py3-none-macosx_12_0_arm64.whl | Python 3 | none | macOS 12.0+ ARM64 | Details |
Total release size: 436.5 MB
Release files / craevidence-4.2.0.tar.gz
| Download URL | craevidence-4.2.0.tar.gz |
|---|---|
| Size | 515.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d90482e62b455e9f979a3c9d631830eccd3f2ef855823d6040ed81c7579718f5
|
|
BLAKE2b-256 checksum How to use checksums |
58cfc1a0857a37d32b50ae78cf9e6b37e20426f0bed1d53d0ce1f49bd710a7ce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.
Transparency logRelease files / craevidence-4.2.0-py3-none-musllinux_1_2_x86_64.whl
| Download URL | craevidence-4.2.0-py3-none-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 74.0 MB |
| Tags | Linux musl 1.2+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
15a62075d69e3aa09f6a093417462545e899238f1ea029841845531f8a676f89
|
|
BLAKE2b-256 checksum How to use checksums |
221a1aeda6861e7703d6f63806628b98442b6e2e48d1f890a40c47526562ac25
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.
Transparency logRelease files / craevidence-4.2.0-py3-none-musllinux_1_2_aarch64.whl
| Download URL | craevidence-4.2.0-py3-none-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 72.9 MB |
| Tags | Linux musl 1.2+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
efb87a25e1307bbaec9a34cb6cbe4515a5495c8c0423dcebda59b8c551c2f242
|
|
BLAKE2b-256 checksum How to use checksums |
3cde5e1ae9f80ace4ed2d9e61c675355b1509f52f3e2852138965bed999da3b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.
Transparency logRelease files / craevidence-4.2.0-py3-none-manylinux_2_17_x86_64.whl
| Download URL | craevidence-4.2.0-py3-none-manylinux_2_17_x86_64.whl |
|---|---|
| Size | 71.8 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
856d93f589990c9bb297e06d47a3ae6d454e61de50b9f75f0b709593e363778a
|
|
BLAKE2b-256 checksum How to use checksums |
e8d0a8b2cf83624ed89b9ddc045135f95796eac4a8b6c83aea3c0fedc7b553dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.
Transparency logRelease files / craevidence-4.2.0-py3-none-manylinux_2_17_aarch64.whl
| Download URL | craevidence-4.2.0-py3-none-manylinux_2_17_aarch64.whl |
|---|---|
| Size | 70.5 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
8e2c3e0885b6a4dd5680d31a49c761046df5910247fe4212e7b68a91dc6f345c
|
|
BLAKE2b-256 checksum How to use checksums |
5ed7037d2dc754b3004ff6cb051aea89c3137534638bf1c739bf056bd1bb2165
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.
Transparency logRelease files / craevidence-4.2.0-py3-none-macosx_12_0_x86_64.whl
| Download URL | craevidence-4.2.0-py3-none-macosx_12_0_x86_64.whl |
|---|---|
| Size | 74.7 MB |
| Tags | Python 3 macOS 12.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
02363492e571cf3eae49431867c15538458dd0c3719fa597cf1b8a52597a3baf
|
|
BLAKE2b-256 checksum How to use checksums |
269f1caa08ee17670a4f8f5a6a1bc3956818c01621e2f5359ba774324cca9794
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.
Transparency logRelease files / craevidence-4.2.0-py3-none-macosx_12_0_arm64.whl
| Download URL | craevidence-4.2.0-py3-none-macosx_12_0_arm64.whl |
|---|---|
| Size | 72.0 MB |
| Tags | Python 3 macOS 12.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a70baea26347bbf025a460378c5483f75923966f4b6254765c0563d005b257ef
|
|
BLAKE2b-256 checksum How to use checksums |
bb1e13ad79e86a3f9d79cd624f18fad0a9ef5ffb58d283e3c5dc3c3aa6ddadd6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.
Transparency log