sciath-cli
Command-line interface for Sciath — CRA compliance automation for embedded Linux.
See CHANGELOG.md for release notes.
Install
Requires Python 3.11 or newer. Scanning and reports require a Sciath account and access to the Sciath API.
pip install sciath-cli
For development (from this repo):
pip install -e ".[dev]"
Maintainers: see the release guide for PyPI setup and publishing. This release provides a Python package; standalone executables are not included.
Quickstart
1. Log in
sciath login
Follow the device-code prompt in your browser. Your API key is saved to
~/.sciath/config.json.
2. Select a project
sciath project list
sciath project select "IoT Gateway v3"
3. Run a scan
# Auto-detect: finds sbom.json, .config, *.dts in current directory
sciath scan
# Or specify everything explicitly
sciath scan run firmware.cdx.json \
--kconfig .config \
--dtb device.dts \
--version v3.2.0
# Auto-discover from a Yocto build directory (finds all artifacts automatically)
sciath scan run --auto-discover --build-dir /home/build/poky/build
# With build system hint
sciath scan run --auto-discover --build-dir /home/build/poky/build --build-system yocto
4. Review results
# Table summary with suppression waterfall (default)
sciath scan run firmware.cdx.json
# With filter reasoning (why each CVE was suppressed/flagged)
sciath scan run firmware.cdx.json --explain
# CRA readiness check
sciath scan run firmware.cdx.json --cra-check
# JSON for scripting / LLM agents
sciath scan run firmware.cdx.json --format json | jq '.summary'
5. CI pipeline gating
# Exit 1 if any critical CVE is open
sciath scan run firmware.cdx.json \
--severity-threshold critical \
--format quiet
# Exit 1 if any CISA KEV entry is open
sciath scan run firmware.cdx.json \
--fail-on-kev \
--format quiet
# Exit 1 if not CRA-shippable
sciath scan cra-check <scan-id>
6. Export reports
# Article 13 Technical File (PDF)
sciath report <scan-id> --format pdf --output report.pdf
# CycloneDX VEX (JSON)
sciath vex <scan-id> --format vex_cdx --output vex.json
# SARIF 2.1.0 (GitHub Code Scanning compatible)
sciath vex <scan-id> --format sarif --output findings.sarif.json
# CSAF VEX (JSON)
sciath vex <scan-id> --format vex_csaf --output csaf.json
Command Reference
Authentication
| Command | Description |
|---|---|
sciath login |
Authenticate via device-code flow |
sciath logout |
Clear stored credentials |
sciath whoami |
Show current user, customer, active project |
Projects
| Command | Description |
|---|---|
sciath project list |
List projects for your customer |
sciath project create <name> |
Create a new product/project |
sciath project select <name> |
Set the active project |
sciath project info |
Show active project details |
Scanning
| Command | Description |
|---|---|
sciath scan |
Auto-detect SBOM and scan (zero-config) |
sciath scan run <sbom> |
Upload SBOM and trigger analysis |
sciath scan run --auto-discover |
Discover all artifacts from build directory |
sciath scan status <id> |
Check scan analysis status |
sciath scan list |
List recent scans |
sciath scan reanalyse <id> |
Re-run analysis on existing scan |
sciath scan cra-check <id> |
CRA readiness verdict (exits 1 if not shippable) |
Scan Options
| Flag | Description |
|---|---|
--kconfig, -k <path> |
Kernel .config for hardware-aware filtering |
--dtb, -d <path> |
Device Tree Blob for hardware filtering |
--depgraph <path> |
Bitbake dependency graph (dot format) |
--custom-filter, -cf <path> |
Custom filter rules (JSON) |
--version, -v <label> |
Version label (default: timestamp) |
--project, -p <id> |
Override active project |
--format, -f <fmt> |
Output: table (default), json, quiet |
--explain, -e |
Show filter reasoning per CVE |
--severity-threshold <level> |
Exit 1 if findings >= level (critical/high/medium/low) |
--fail-on-kev |
Exit 1 if any open CISA KEV finding |
--cra-check |
Show CRA readiness verdict after scan |
--policy <name> |
Apply a named filter policy to the scan |
--no-cache |
Skip local cache, force fresh upload |
--auto-discover |
Auto-discover artifacts from build directory |
--build-dir <path> |
Build directory for --auto-discover (default: cwd) |
--build-system <name> |
Build system hint: yocto, buildroot, debian, openwrt |
Build Setup
| Command | Description |
|---|---|
sciath init yocto <build-dir> |
Scaffold Sciath integration into a Yocto build |
Assessments
| Command | Description |
|---|---|
sciath assess list <scan-id> |
List vulnerability assessments |
sciath assess approve <id> |
Approve an assessment |
sciath assess reject <id> |
Reject / dispute an assessment |
Policies
| Command | Description |
|---|---|
sciath policy list |
List filter policies |
sciath policy show <id> |
Show policy details and rules |
sciath policy create <name> |
Create a new filter policy |
sciath policy delete <id> |
Delete a policy |
sciath policy history <id> |
View policy change history |
sciath policy import-vex <file> |
Import rules from a VEX document |
Reports & Export
| Command | Description |
|---|---|
sciath report <scan-id> |
Generate and download a compliance report |
sciath vex <scan-id> |
Direct export (no report record) — faster for CI |
Export Formats
| Format | Flag | Use Case |
|---|---|---|
| Article 13 PDF | --format pdf |
Regulatory submission |
| CRA Evidence Pack | --format evidence-pack |
Full audit ZIP (SBOM + VEX + PDF + CSV) |
| CycloneDX VEX | --format vex_cdx |
Supply chain tooling |
| CSAF VEX | --format vex_csaf |
CSIRT notification |
| SPDX 2.3 | --format spdx |
SPDX ecosystem tooling |
| SARIF 2.1.0 | --format sarif |
GitHub Code Scanning, VS Code |
| CycloneDX SBOM | --format sbom_cdx |
SBOM-only export |
| Combined SBOM+VEX | --format sbom_vex_cdx |
Full disclosure |
MCP Server (Editor Integration)
sciath mcp
Starts an MCP server with stdio transport for integration with Claude Code, Cursor, Windsurf, and other MCP-aware editors.
Available tools:
scan_sbom— Upload and analyse an SBOMget_scan_status— Check scan statuslist_findings— List CVE findings with filter reasoningget_compliance_status— CRA readiness summary
Claude Code configuration (~/.claude/settings.json):
{
"mcpServers": {
"sciath": {
"command": "sciath",
"args": ["mcp"]
}
}
}
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success (or findings below threshold) |
| 1 | Findings above threshold, KEV found, or error |
| 2 | Tool error (reserved) |
Auto-Detection
When you run sciath scan without specifying files, the CLI searches
the current directory for:
SBOM files (first match used):
sbom.json,bom.json,sbom.xml,bom.xmlsbom.cdx.json,sbom.spdx.jsonbuild/tmp/deploy/*/sbom-*.json(Yocto builds)
Kconfig (auto-detected if present):
.config,build/.config
Device Tree (auto-detected if present):
*.dts,*.dtbin current directory
Build Directory Discovery (--auto-discover)
For Yocto and other build systems, --auto-discover walks the entire
build tree and extracts all available artifacts automatically:
- SBOM from
tmp/deploy/spdx/,tmp/deploy/cve/, or CycloneDX output - Kernel .config from staging or work directories
- DTBs from
tmp/deploy/images/(capped at 20 by default) - Busybox .config from busybox work directory
- PACKAGECONFIG flags per recipe (with CVE suppression mapping)
- BSP patches from vendor layers (static analysis, no BitBake required)
PACKAGECONFIG suppressions are serialized into custom filter rules and submitted alongside the scan. This enables the suppression waterfall to show exactly which CVEs are eliminated by build configuration.
CRA Compliance
Evidence Pack
Download everything an auditor needs in one command:
sciath report <scan-id> --format evidence-pack
The ZIP contains: SBOM, VEX document, Article 13 PDF, suppression rationale CSV, CRA readiness verdict, and scan metadata.
Readiness Check
sciath scan cra-check <scan-id>
Returns SHIPPABLE or NOT READY with article-mapped checklist, compliance percentage, and blockers. Exits 1 if not shippable (useful for CI gating).
Input Caching
The CLI caches scan results locally at ~/.sciath/cache/. If you run
the same scan with identical inputs (same SBOM + kconfig + DTB content),
the CLI returns the cached result without re-uploading.
- Cache TTL: 1 hour
- Force fresh:
--no-cache - Cache key: SHA-256 of project ID + file contents
Configuration
Credentials stored at ~/.sciath/config.json (mode 0600).
Environment variable overrides:
| Variable | Description |
|---|---|
SCIATH_API_URL |
Override API URL (highest precedence) |
Network & Proxy Configuration
The CLI needs outbound HTTPS access to the Sciath API. If your environment uses a corporate proxy or firewall allowlisting, see below.
Firewall allowlist
Allow outbound HTTPS (port 443) to:
| Domain | Purpose |
|---|---|
api.sciath.io |
API requests |
sciath.io |
Device-code login flow |
Note: Sciath is hosted behind a load balancer without static IPs. Use domain-based (FQDN) rules, not IP-based rules.
HTTP/HTTPS proxy
The CLI uses httpx which respects standard proxy environment variables:
export HTTPS_PROXY=http://proxy.corp.example:8080
# With authentication
export HTTPS_PROXY=http://user:password@proxy.corp.example:8080
Custom TLS certificates
If your proxy performs TLS inspection (MITM), you need to trust its CA certificate:
export SSL_CERT_FILE=/path/to/corporate-ca-bundle.crt
REQUESTS_CA_BUNDLE and CURL_CA_BUNDLE are also supported.
Private / on-prem API endpoint
If you run a self-hosted Sciath instance, point the CLI at it:
# Persistent (saved to ~/.sciath/config.json)
sciath config set api_url https://sciath.internal.example.com
# Or per-session via environment variable
export SCIATH_API_URL=https://sciath.internal.example.com
Sample SBOM
Save as sbom.json and run sciath scan:
{
"bomFormat": "CycloneDX",
"specVersion": "1.5",
"version": 1,
"metadata": {
"component": {
"type": "firmware",
"name": "imx8m-gateway",
"version": "v3.2.0"
}
},
"components": [
{
"type": "library",
"name": "linux-kernel",
"version": "5.15.32",
"cpe": "cpe:2.3:o:linux:linux_kernel:5.15.32:*:*:*:*:*:*:*"
},
{
"type": "library",
"name": "openssl",
"version": "3.0.7",
"cpe": "cpe:2.3:a:openssl:openssl:3.0.7:*:*:*:*:*:*:*"
},
{
"type": "application",
"name": "busybox",
"version": "1.35.0",
"cpe": "cpe:2.3:a:busybox:busybox:1.35.0:*:*:*:*:*:*:*"
}
]
}
Metadata
Release files for sciath-cli 0.3.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 | |
|---|---|---|---|
| sciath_cli-0.3.0.tar.gz | 59.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sciath_cli-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 139.5 kB
Release files / sciath_cli-0.3.0.tar.gz
| Download URL | sciath_cli-0.3.0.tar.gz |
|---|---|
| Size | 59.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8057d31147a4622c3c796e21e168c93cdcc431579eb93c876c9f04cd4d593b9c
|
|
BLAKE2b-256 checksum How to use checksums |
f571282e997e32c1a34cc76dd8e228ee1af7ced63cd4994e08c68aa09b34aef5
|
| 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 Sep 29, 2026.
Transparency logRelease files / sciath_cli-0.3.0-py3-none-any.whl
| Download URL | sciath_cli-0.3.0-py3-none-any.whl |
|---|---|
| Size | 80.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7aff83dd32fb86567953a5a9a3ef3bae575c1ad3791cc4e001804c9c14ff39ea
|
|
BLAKE2b-256 checksum How to use checksums |
9f5931a2fabef1c851a21e8b8950df13298981c65323690484c1ff4c69bd8086
|
| 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 Sep 29, 2026.
Transparency log