agent-bom keeps its dependency and release trust posture explicit:
- small required runtime footprint
- optional extras for heavier surfaces
- locked dependency resolution
- per-PR dependency review
- signed and attested release artifacts
- published self-SBOMs
- self-scan and fuzz coverage in CI
This page is the operator-facing map of those controls.
There are three layers to understand:
- Core runtime dependencies in pyproject.toml
- Fully resolved Python dependencies in uv.lock
- Fully resolved UI dependencies in ui/package-lock.json
The core runtime stays intentionally small. Heavier surfaces are behind extras such as:
apimcp-servergraphclouddashboardpostgresoidc
That keeps the default install lean while still allowing fuller deployments to turn on additional capability explicitly.
Some extras also carry platform markers where an upstream provider package is not yet compatible with the full supported Python/platform matrix. Those constraints are intentional and documented rather than hidden.
agent-bom uses bounded runtime version ranges in pyproject.toml and locked
resolution in uv.lock.
That gives two protections:
- maintainers and CI get exact, reproducible transitive resolution
- users installing without the lockfile still stay inside known-compatible major ranges instead of drifting arbitrarily
Transitive security pins that close specific advisories are annotated inline
with GHSA/CVE context in pyproject.toml.
The root dependency graph is not the only surface that matters. Optional extras pull in additional transitive dependencies, so they need independent visibility.
The extras audit workflow is:
- workflow: extras-audit.yml
- trigger: pull requests touching dependency surfaces, weekly schedule, or manual dispatch
- output: per-surface dependency trees and
pip-auditJSON artifacts
Current audit groups:
api-runtimemcp-surfaceanalytics-uicloud-surface
Those groups are intentionally broader than a single extra so the artifacts map to real deployment surfaces rather than individual package toggles.
Dependency and supply-chain controls are enforced through multiple workflows:
dependency-review.ymlfor per-PR dependency diffsdependency-submission.ymlfor GitHub dependency graph visibilitydependency-pin-check.ymlfor transitive security pin disciplinecve-freshness.ymlfor daily dependency vulnerability checkscontainer-rescan.ymlfor image rescanscflite-pr.ymlfor parser and ingestion fuzzingpost-merge-self-scan.ymlfor dogfooding scans againstagent-bomitselfrelease.ymlandpublish-mcp.ymlfor signed, attested release output
This is additive by design. No single workflow is treated as the entire trust story.
High-risk ingestion surfaces are fuzzed because they process untrusted external data:
fuzz/fuzz_policy.pyfuzz/fuzz_sbom.pyfuzz/fuzz_skill_parser.pyfuzz/fuzz_external_scanners.py
The external scanner fuzz target covers:
- CVE-scanner JSON ingestion (common industry formats)
- container-SBOM JSON ingestion (common industry formats)
- format auto-detection via
detect_and_parse()
That keeps the import path for third-party scanner results under the same hardening discipline as SBOM and policy ingest.
Tagged releases publish:
- Python distributions
- Sigstore bundles (
*.sigstore.json) - SLSA provenance bundles (
*.intoto.jsonl) - CycloneDX self-SBOM (
agent-bom-sbom.cdx.json)
Use the release verification guide:
That document includes:
cosign verify-blobexamples- provenance inspection
- self-SBOM inspection and rescanning
This is the public verification path. Release trust is not hidden inside CI.
- Security Policy
- Security Architecture
- Image Security
- Threat Model
- Release Verification
- Permissions and Trust
- Air-Gapped Image Bundle
For maintainers:
- keep runtime dependency ranges bounded
- refresh
uv.lockwhenever dependency policy changes - review extras audit artifacts, not just the default environment
- treat parser fuzz coverage as part of release trust, not optional polish
For operators:
- verify release assets before internal distribution
- archive the published self-SBOM with the release artifact set
- use the same release verification process for both PyPI and GitHub release consumption