Catalog PyPI
Back to packageRELEASE DETAILS

0.2.0

PyPI

aibom-inspector

Security and risk analysis tool for AI projects (AI-BOM).

aibomrisksecuritysupply-chain
Published15 Aug 2026
Direct dependencies13
Transitive dependenciesNot calculated

README

Version 0.2.0 documentation

AI-BOM Inspector

AI-BOM Inspector CI

What is it?

AI-BOM Inspector is an offline-first, deterministic risk engine for AI supply chains. Feed it an AI project (SBOM + model artifacts) and it returns a policy decision, an evidence-backed report, and CI-friendly outputs designed for automated enforcement.

Killer workflow (one command demo)

Give AI-BOM Inspector an AI project's SBOM and model artifacts → it determines supply-chain risk → explains why → maps affected systems → produces evidence → enforces policy.

AI project ↓ SBOM + model artifacts ↓ AI-BOM Inspector ├── Dependency analysis ├── Model analysis ├── Vulnerability intelligence ├── Provenance └── License analysis ↓ Deterministic risk engine (single source of truth) ↓ Policy decision ↓ Evidence + report + CI result

Architecture (data flow)

graph LR
  Input["SBOM / Models / Metadata / Threat Intel"] --> Engine["Deterministic Risk Engine"]
  Engine --> Policy["Policy Decision (block/allow/flag)"]
  Engine --> Graph["Evidence Graph Context (impact & explain)"]
  Policy --> Output["Report / CI / Enforcement / Annotations"]

One-command golden demo

  1. Demo project is included at demo/golden-vulnerable-ai.
  2. The demo now includes an application->owner mapping at demo/golden-vulnerable-ai/applications.json; the runner merges it into the generated report so impact analysis can map models → apps → owners.
  3. Run the demo (offline, reproducible):
PYTHONPATH=src bash demo/golden-vulnerable-ai/run_demo.sh

Quick impact example (after the run):

# Show merged applications in the report
jq '.applications' demo/golden-vulnerable-ai/report.json

# Run a blast-radius check for a CVE using the built-in graph impact helper
python -c "from aibom_inspector.graph import impact; exit(impact('demo/golden-vulnerable-ai/report.json','CVE-2024-XXXX'))"

What changed in this branch (enterprise upgrades)

  • Standards: CycloneDX 1.7 exporter and SPDX 3.0 tag-value output so reports plug into enterprise SBOM pipelines.
  • Hardened dynamic inspection: prototype Pickle VM emulator, Docker sandbox runner, and baseline seccomp/AppArmor profiles under .github/security for safer runtime tracing.
  • Policy & CI: block_legacy_pickles policy, scripts/check_for_pickles.py, and GitHub Actions to run validators and demo tests; CI emits policy_action and policy_failures in report JSON for easy automation.
  • Attestation groundwork: sigstore-friendly attestation helper with deterministic SHA256 fallback (requires ops provisioning for full sigstore use).
  • Compatibility: pydantic v1/v2 normalization helpers across parsers and inspectors to keep CLI runnable from source.

Why this matters (differentiators)

  • Single, explainable deterministic risk engine (graph provides context, not score).
  • Standards-first outputs (CycloneDX/SPDX) for enterprise pipelines and procurement.
  • Sandbox-first model inspection with CI enforcement to prevent risky artifacts from merging.
  • Reproducible golden demo and tests that turn product claims into verifiable proofs.

Quick show-me

Run the demo, open demo/golden-vulnerable-ai/report.json, and run pytest tests/test_golden_demo.py to see the claim→proof assertion.

Full feature list and deeper docs follow below.

Repository layout

ai-bom-inspector/
  crates/
    core/                       # parsing, normalization, scoring (Rust extension)
    licenses/                   # license rules, SPDX mapping
    advisories/                 # CVE ingestion adapters (OSV/NVD/etc)
    report/                     # JSON/MD/SARIF outputs + diff support
  src/                          # Python package (aibom_inspector)
  policies/
    examples/
      default.yml
      strict.yml
      oss-friendly.yml
  schemas/
    policy.schema.json
    report.schema.json
  integrations/
    github-action/              # composite action wrapper for CI
    pre-commit/                 # reusable hook definition
  docs/
    QUICKSTART.md
    POLICY.md
    SCORING.md
    FAQ.md
  .github/
    workflows/
      ci.yml
      scan-pr.yml               # runs on PR and posts summary
  tests/
  README.md

What it does

  • Parse dependency manifests across Python (requirements.txt, pyproject.toml), JavaScript (package.json / package-lock.json), Go (go.mod), and Java (pom.xml)
  • Ingest existing SBOMs (--sbom-file) and export CycloneDX or SPDX alongside AI-BOM extensions
  • Gather AI model metadata from JSON or explicit Hugging Face IDs and auto-discover model references (OpenAI/Anthropic calls, from_pretrained loads, pipeline configs) directly from your repo
  • Apply heuristics for pins, stale models, license posture (permissive vs copyleft vs proprietary vs unknown), and optional CVE lookups via OSV
  • Surface AI model lineage, training data provenance, license ambiguity, and model risk profiles so AI-BOM metadata is front-and-center for governance reviews
  • Inspect model artifacts (safetensors/pickle checkpoints) for poisoned weights or unsafe globals and compute hashes for reputation checks
  • Cross-check models against local vulnerability/advisory feeds, training source fingerprints, and map findings to STRIDE + MITRE ATLAS categories
  • Emit JSON, Markdown, HTML, CycloneDX, or SPDX reports with risk breakdowns driven by explainable heuristics plus a deterministic, offline AI summary (optionally replaceable by your own LLM if desired)
  • Optionally pull firmware research context from Shadow-UEFI-Intel when --online --enable-shadow-uefi-intel is used
  • Maintain evidence chain-of-custody with attestations, audit logs, and integrity checks so governance teams can trace decisions end-to-end
  • Provide score explainability artifacts (policy version, intel versions, weight breakdowns, temporal multipliers) to make risk outcomes audit-ready
  • Require org context (asset criticality, data sensitivity, environment) so scores cannot be generated without enterprise context

The default reports only use deterministic heuristics; the "AI summary" field is generated offline from the scan findings so teams get an executive-ready summary without hosted inference.

Network behavior

  • Global posture: --offline is the default and hard-blocks every remote call. Expect [OFFLINE_MODE] / [CVE_LOOKUP_SKIPPED] annotations in reports when enrichment is skipped.
  • Opt-in enrichment: add --online to allow outbound calls, then enable specific feeds (e.g., --with-cves, --model-id, --enable-shadow-uefi-intel) to choose what actually dials out.
  • Local-only hardening: pass --local-only (or keep --safe-mode enabled) to enforce zero outbound fetches even if --online is set.
  • Endpoints and payloads:
EndpointWhen it firesData sentHow to disable
https://api.osv.dev/v1/query (or OSV_API_URL)--online and --with-cvesJSON body containing package.name, package.ecosystem, and version for each dependencyDefault offline; omit --with-cves; keep --offline; or point OSV_API_URL to an internal mirror
https://huggingface.co/api/models/<id> (or huggingface_hub SDK)--online with --model-id or models whose source is huggingfaceModel identifier only; response cached locallyDefault offline; avoid --online; or provide a fully populated models.json
GitHub API for Shadow-UEFI-Intel--online and --enable-shadow-uefi-intelRepository metadata fetch; no project data sentDefault is disabled; leave --enable-shadow-uefi-intel off or keep --offline enabled
Local model advisory/hash databases (model_vulnerability_db.json, model_hash_reputation.json)Always local unless you point to a custom URLNone (local JSON only)Use defaults or pass --model-advisory-db / --model-hash-db
Future feedsAny new integrations (documented as added)Varies by feedDefault offline; disable the specific feature flag; or run with --offline

Timeouts can be tuned via --osv-timeout, --shadow-uefi-timeout, or the OSV_API_TIMEOUT / SHADOW_UEFI_INTEL_TIMEOUT environment variables.

Installation

  • Pinned release from GitHub:
    pip install "aibom-inspector @ git+https://github.com/aibom-inspector/AI-BOM-Inspector.git@v.2.0"
    
  • Editable dev install:
    pip install -e .[dev]
    
  • Wheels: the Rust extension ships as a wheel when you build from source—python -m build will produce a .whl under dist/ for airgapped installs.
  • PyPI readiness: packaging metadata and wheels are production-ready for internal or public registries; use GitHub release pins above for stable CI installs or build a wheel locally for airgapped environments.

Build + SBOM generation

  • Build a wheel for offline installs:
    python -m build
    
  • Generate a CycloneDX SBOM for this tool:
    pip install cyclonedx-bom
    cyclonedx-py -o aibom-inspector-sbom.json
    

Getting started

  1. Create a models.json file if you want to include model metadata (auto-discovery will still pull model IDs out of your code/configs when this is omitted). A ready-to-use sample lives in examples/models.sample.json:

    [
      {"id": "gpt2", "source": "huggingface", "license": "mit", "last_updated": "2024-01-01"},
      {"id": "custom-embedder", "source": "private"}
    ]
    
  2. Run the scanner (auto-detects dependency files when present):

    aibom scan --models-file models.json --format html --output report.html
    

    Run aibom scan --help for the full list of options and supported formats.

    Network calls are off by default; add --online (plus flags like --with-cves or --model-id) if you want remote enrichment.

Who is this for?

  • AppSec and security engineers who want CI/CD-friendly AI-BOMs without shipping code to a third party
  • MLOps/platform teams who need model metadata (license, freshness, advisories) next to dependencies
  • Builders who want tweakable, explainable rules instead of black-box scanners

Why this vs. Snyk & friends?

  • Small, OSS, local-first: zero data leaves your laptop or CI box.
  • AI-stack aware: treats models as first-class assets instead of opaque blobs.
  • Customizable rules: heuristics are readable Python, not black-box policies.
  • Offline gates + allowlists + model-as-asset scoring: enforce allowlisted model sources, run fully offline by default, and score models/dependencies together—capabilities that hosted scanners often treat as optional add-ons.

Examples

  • End-to-end demo (examples/demo/): tiny app with requirements.txt, pyproject.toml, package-lock.json, go.mod, models.json, and generated aibom-report.json/md/html.

    • HTML report snapshot: open examples/demo/aibom-report.html
    • Markdown rendering snapshot: see examples/demo/aibom-report.md
    • Before/after hygiene comparison: docs/screenshots/before-after.html

    Small JSON excerpt (full file in examples/demo/aibom-report.json):

    {
      "stack_risk_score": 30,
      "risk_breakdown": {"unpinned_deps": 3, "unverified_sources": 0, "unknown_licenses": 1, "stale_models": 1},
      "dependencies": [{"name": "urllib3", "issues": ["[KNOWN_VULN] CVE-2019-11324: CRLF injection when retrieving HTTP headers"]}],
      "models": [{"id": "gpt2", "issues": ["[STALE_MODEL] Model metadata is stale", "[MODEL_VULNERABILITY] Advisory feed match (model_vulnerability_db.json)"]}]
    }
    
  • Screenshots:

    • HTML report: open examples/demo/aibom-report.html
    • Markdown rendering: view examples/demo/aibom-report.md
    • Before vs. after: open docs/screenshots/before-after.html
  • Sample models file: examples/models.sample.json

  • Sample Markdown report: examples/report.sample.md

  • Example commands:

    • Only dependency scan with autodetection: aibom scan --format json
  • Include models from a file: aibom scan --models-file examples/models.sample.json --format markdown --output report.md

  • Specify models inline: aibom scan --online --model-id gpt2 --model-id meta-llama/Llama-3-8B --format html

  • Enrich CVEs during the scan: aibom scan --online --with-cves --format json

  • Use local model advisory and hash feeds: aibom scan --models-file models.json --model-advisory-db feeds/model_vulnerability_db.json --model-hash-db feeds/model_hash_reputation.json

  • Apply training source fingerprints: aibom scan --models-file models.json --training-source-db feeds/training_source_fingerprints.json

  • Include non-Python manifests: aibom scan --manifest package-lock.json --manifest go.mod --format json

  • Import an SBOM: aibom scan --sbom-file path/to/cyclonedx.json --format html --output merged-report.html

  • Run fully offline (no OSV/HF calls): aibom scan --format markdown

  • Require inputs or fail fast: aibom scan --require-input

  • Export CycloneDX: aibom scan --format cyclonedx --sbom-output aibom-cyclonedx.json

  • Fail CI if health score < 70: aibom scan --fail-on-score 70 --format html

  • Inspect model weights directly (detect NaNs/LSB steganography): aibom weights my_model.safetensors --json

    • Quick comparison of two runs: aibom diff aibom-report-old.json aibom-report-new.json

Highest-impact capabilities

See docs/HIGHEST_IMPACT_NEXT_MOVES.md for the capabilities that enable the end-to-end discover → enforce loop, policy-as-code UX, and GitHub-native SARIF outputs.

Enterprise trust baseline

See docs/ENTERPRISE_TRUST_BASELINE.md for the deal-maker controls around provenance/signing, artifact integrity, and dependency trust enforcement that enterprises expect in CI/CD rollouts.

Enterprise control plane

30-second sample report (before vs. after)

  • Input SBOM: lightweight CycloneDX with a few Python and npm components plus a Hugging Face model ID.
  • Before (messy state):
    • Command: aibom scan --sbom-file examples/demo/aibom-report.json --format markdown --output before.md --fail-on-score 70
    • Top findings: MISSING_PIN for multiple deps, UNKNOWN_LICENSE on the model, STALE_MODEL, demo KNOWN_VULN entry, and UNVERIFIED_SOURCE.
    • Outcome: stack_risk_score ≈ 50 and exit code 1 because it failed the --fail-on-score 70 gate.
  • After (hardened state):
    • Command: aibom scan --sbom-file examples/demo/aibom-report.json --models-file examples/models.sample.json --format markdown --output after.md --fail-on-score 70 --online --with-cves
    • Top findings: CVE hits (if any) plus minor governance nits; pins and licenses quiet down once manifests and model metadata are cleaned up.
    • Outcome: stack_risk_score in the high 80s and exit code 0, making it CI-safe.

AI-BOM extensions

CycloneDX and SPDX exports include AI-BOM extension data (e.g., aibom:source, license category, risk score, and issues) alongside the standard SBOM fields. See docs/ai-bom-extensions.md for the JSON schema and how each extension maps into CycloneDX properties and SPDX summaries.

Standards alignment

  • AI-BOM schema mapping: schemas/report.schema.json tracks the AI-BOM JSON conventions and is structured to align with the TAIBOM-style trust/attestation fields emerging in the community (e.g., explicit model source, license, provenance, and risk signals).
  • CycloneDX/SPDX bridges: the CycloneDX/SPDX exporters project aibom:* properties into vendor-neutral fields so the output can slot into existing SBOM pipelines without custom parsers.
  • Reference-first posture: schema updates aim to follow the AI-BOM working drafts; additions are scoped so teams can diff their SBOMs against the schema and treat this project as a reference implementation rather than a one-off tool.
  • Credibility pack: docs/credibility-pack/ ships SBOM slices, a repo list, and a scoreboard you can rerun to validate detection heuristics and false-positive rates.

Output formats at a glance

See docs/OUTPUTS.md for a side-by-side JSON, SARIF, and CycloneDX example plus guidance on when to use each.

Adoption defaults

  • Gates to start with: fail CI on --fail-on-score 70, require allowlisted model sources (--require-input plus allowlist rules in policies/examples/*), and keep --offline as the default posture.
  • CI vs. local: run aibom scan --format json --output aibom-report.json --fail-on-score 70 in CI, then publish CycloneDX/SPDX via --format cyclonedx or --format spdx for downstream compliance jobs. Locally, add --format html or --format markdown for readability and iterate with --diff against previous runs.
  • Policy cookbook: see docs/POLICY_COOKBOOK.md for OSS-friendly, enterprise-strict, and regulated defaults that can be copied into your own policy file (HIPAA, SOC 2, ISO/IEC 42001 packs are in policies/examples/).

Configuration tips:

  • OSV enrichment uses the public API by default; override with --osv-url or OSV_API_URL and adjust the HTTP timeout via --osv-timeout or OSV_API_TIMEOUT.
  • Model risk databases can be swapped via --model-advisory-db, --model-hash-db, --license-risk-db, and --training-source-db when you want to point at internal mirrors or curated feeds.

Heuristics & Risk Signals

AI-BOM Inspector ships with lightweight, explainable checks that map to common AI supply-chain issues:

CodeWhat it meansSeverity
MISSING_PINDependency version not pinned with ==/~=High
LOOSE_PINDependency uses a range (>=, <=, etc.)Medium
UNSTABLE_VERSIONPre-1.0 releases that may churnMedium
KNOWN_VULN / CVEKnown vulnerable versions (built-in heuristics + optional OSV lookup; recommends safer versions when known)High
LICENSE_RISKCopyleft / reciprocal terms detected for a modelMedium
MODEL_LICENSE_RESTRICTEDRestricted or custom model license detected (OpenRAIL, research-only, etc.)Medium
PROPRIETARY_AI_RISKProprietary model license may limit auditability or reuseMedium
UNKNOWN_LICENSEModel or SBOM component lacks license metadataHigh
STALE_MODELModel metadata older than ~9 monthsMedium
UNVERIFIED_SOURCENon-standard model source valueMedium
MODEL_VULNERABILITYModel flagged by a vulnerability/advisory feedHigh
MODEL_HASH_MALICIOUSModel hash matches a malicious fingerprintHigh
MODEL_WEIGHT_ANOMALYSafetensors inspection detected poisoned/steganographic weightsHigh
PICKLE_DANGEROUS_GLOBALSPickle checkpoint references dangerous globalsHigh
MODEL_LINEAGE_RISKBase model lineage contains license or vulnerability riskMedium
MODEL_LINEAGE_UNKNOWNBase model lineage not present in scan contextMedium
FINE_TUNE_INHERITANCE_RISKFine-tune inherits high-risk findings from base modelHigh
DATASET_CONTAMINATION_RISKTraining sources suggest contamination or policy exposureHigh
TRAINING_SOURCE_RISKTraining source requires additional governance reviewMedium
SUPPLY_CHAIN_ANOMALYModel hash mismatch or artifact integrity anomaly detectedHigh
MODEL_HASH_INVALIDDeclared model hash is not a valid SHA256 fingerprintMedium
MODEL_HASH_MISSINGModel artifacts present without declared hashesMedium
OFFLINE_MODE / CVE_LOOKUP_SKIPPEDScan ran offline or without network dependencies; no remote enrichment performedLow
METADATA_UNAVAILABLEModel registry/API could not be reached; metadata reused from cache with a warningLow
INVALID_SBOMSBOM could not be parsed; flagged as an issue instead of crashing the scanMedium

The report shows a stack_risk_score (0–100, higher is healthier) and a risk_breakdown capturing unpinned deps, unverified sources, unknown licenses, stale models, and CVE hits. Tune the scoring with --risk-max-score, per-severity --risk-penalty-* flags, and governance/CVE penalties so teams can calibrate what “red” means for them. Conceptually, this is a health score: penalties are subtracted from the maximum, so --fail-on-score 70 means “fail if health drops below 70/100.”

How the risk score is computed

  • Start from risk_settings.max_score (default 100) and subtract penalties instead of adding danger points.
  • Every dependency/model issue subtracts risk_settings.penalty_for(severity) (default high=8, medium=4, low=2).
  • Governance penalties subtract an extra governance_penalty for each unpinned dependency and unverified model source; CVE hits subtract cve_penalty to emphasize known exploit paths.
  • Active exploitation flags override baseline scoring with active_exploitation_penalty, ensuring live exploitation signals dominate baseline severity math.
  • The resulting value is clamped between 0–max_score, giving you a “health score” you can fail CI on via --fail-on-score.
  • Start conservative: gate on --fail-on-score 70 while teams pilot the tool; after triage, ratchet up to 80 once noisy signals are addressed.
  • Respond by signal type:
    • MISSING_PIN / LOOSE_PIN: add explicit == pins (or ~= if you must) and commit lockfiles.
    • UNKNOWN_LICENSE / LICENSE_RISK: annotate licenses in models.json and prefer permissive alternatives when available.
    • STALE_MODEL: update to a fresher model release or document a waiver in models.json.
    • KNOWN_VULN / CVE: upgrade to the suggested safe version; if blocked, add a comment in your SBOM or pin to a patched fork.
    • UNVERIFIED_SOURCE: source models from trusted registries (Hugging Face, internal artifactory) and record provenance.
    • OFFLINE_MODE / CVE_LOOKUP_SKIPPED: rerun with network access before shipping to ensure enrichment isn’t missing critical advisories.

Assumptions and known limitations

  • Offline mode trades fidelity for privacy: metadata/CVE lookups are skipped; issues are marked with OFFLINE_MODE / CVE_LOOKUP_SKIPPED so reviewers know enrichment was suppressed.
  • SBOM trust but verify: malformed SBOMs are surfaced as INVALID_SBOM issues and ignored otherwise; well-formed CycloneDX/SPDX inputs are merged into the dependency set.
  • Model metadata freshness depends on registries: network failures are tolerated and recorded as METADATA_UNAVAILABLE, but license/freshness signals may be stale until the registry is reachable again.
  • Weight inspection is heuristic: the safetensors scanner samples bits and looks for NaNs/Inf/LSB bias; unusual dtypes or truncated files raise clear errors instead of silently passing.

Threat taxonomy + MITRE ATLAS mapping

AI-BOM Inspector attaches explicit AI threat categories and STRIDE classifications to model findings. Mappings are surfaced in the report framework section and can be tailored via a local taxonomy file:

  • Default taxonomy: src/aibom_inspector/data/ai_threat_taxonomy.json
  • Override: aibom scan --threat-taxonomy-db path/to/ai_threat_taxonomy.json
  • MITRE ATLAS controls appear alongside NIST AI RMF, ISO/IEC 42001, OWASP LLM Top 10, SOC 2, and EU AI Act mappings. See docs/THREAT_TAXONOMY.md for the default taxonomy and extension guidance.

Model risk databases

Model risk intelligence is local-first. You can ship curated JSON feeds in-repo or pull them from internal mirrors:

  • Model vulnerability DB: model_vulnerability_db.json (use --model-advisory-db to override)
  • Model hash reputation DB: model_hash_reputation.json (use --model-hash-db to override)
  • License risk DB: license_risk_db.json (use --license-risk-db to override)
  • Training source fingerprints: training_source_fingerprints.json (use --training-source-db to override)

Before vs. after hardening

ScenarioRisk scoreSignals
Messy AI stack48/100Unpinned package-lock.json, unknown model license, stale model metadata
Hardened AI stack88/100All deps pinned, permissive licenses, fresh model metadata, no advisories

Example: scanning a real project

aibom scan --requirements requirements.txt --models-file models.json --with-cves --format html --output report.html \
  --risk-penalty-high 10 --risk-penalty-medium 5 --risk-penalty-low 2

Pair it with aibom diff report-old.json report-new.json to highlight PR drift, or run in CI with --fail-on-score 70.

Performance & scale signals

Baseline timings below were captured on the included demo project to give teams a starting point. Re-run in your own CI to capture local baselines:

ScenarioCommandResult
Demo project scanPYTHONPATH=src python -m aibom_inspector.cli scan --requirements examples/demo/requirements.txt --pyproject examples/demo/pyproject.toml --manifest examples/demo/package-lock.json --manifest examples/demo/go.mod --models-file examples/demo/models.json --format json --output /tmp/aibom-report.json2.16s real (container, Python 3.10.19)

Use /usr/bin/time -p or your CI timing metrics to capture project-specific numbers (dependency count, model count, and total runtime).

Testing and CI

  • Run unit tests: pytest
  • GitHub Action: .github/workflows/scan-pr.yml uses the bundled composite action to scan PRs and post a risk comment.
  • One-command SARIF + Markdown upload (offline by default; pair with --online --with-cves when you want CVEs):
    name: AI-BOM Inspector
    on: [pull_request]
    jobs:
      scan:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - name: Install AI-BOM Inspector
            run: pip install aibom-inspector
          - name: Scan AI stack and emit SARIF + Markdown
            run: >-
              aibom scan --format sarif --output aibom-report.sarif --markdown-output aibom-report.md
              --fail-on-score 75 --require-input
          - name: Upload SARIF to GitHub Security
            uses: github/codeql-action/upload-sarif@v3
            with:
              sarif_file: aibom-report.sarif
          - name: Upload Markdown artifact
            uses: actions/upload-artifact@v4
            with:
              name: aibom-report
              path: aibom-report.md
    
  • CI guardrails: keep --offline unless you need enrichments; when allowed, add --online --with-cves to the scan step and adjust allowlists accordingly.

Releases and distribution

  • Tagged releases: we cut signed Git tags for CLI milestones; package metadata lives in pyproject.toml and tracks the changelog.
  • PyPI: publishing is planned under the aibom-inspector name; until then, install from source (pip install -e .[dev]) or lock to a tag tarball.
  • Versioning: semantic-ish—patch releases for heuristics/docs, minor bumps when report schemas or exit codes change.

Security, governance, and contributions

  • See SECURITY.md for how to report vulnerabilities.
  • See CODE_OF_CONDUCT.md for community standards.
  • See CONTRIBUTING.md for development conventions and how to propose changes.
  • CHANGELOG.md tracks notable updates.

Recent enterprise upgrades

The following capabilities were recently added to support enterprise-grade AI supply-chain workflows. Quick enablement notes are included where relevant.

  • CycloneDX 1.7 & SPDX 3.0 exporters: canonical JSON exporters and a CycloneDX 1.7 schema validator. Use --format cyclonedx or --format spdx and see schemas/cyclonedx-1.7.schema.json for validation rules.

  • Policy enforcement to block legacy Pickle formats (.pkl/.pt): enable with a policy that sets block_legacy_pickles: true or run the CI check (scripts/check_for_pickles.py) which fails PRs and posts remediation guidance.

  • Read-only Pickle VM & containerized sandbox: a pickle opcode emulator (src/aibom_inspector/pickle_vm.py) and a Docker-based sandbox runner (scripts/pickle_sandbox_runner.py) produce guarded traces (no deserialization). For hardened runs, the runner accepts --seccomp and --apparmor options; self-hosted runners are recommended.

  • Dynamic findings integration: sandbox traces are parsed and converted into integrity findings and fed into the policy/risk engine (see src/aibom_inspector/dynamic_analysis.py and src/aibom_inspector/pickle_sandbox.py). Dynamic findings affect stack_risk_score and policy evaluations.

  • Attestation helpers (sigstore-friendly): attestation payload builders and a sigstore-friendly signing fallback (src/aibom_inspector/attestation_sigstore.py) so CI can emit provenance artifacts. Enable full Sigstore signing by provisioning signing keys / OIDC in CI.

  • CI automation: .github/workflows/export-validate.yml runs exporter tests, policy checks, posts remediation PR comments, creates Checks API annotations, and (on self-hosted runners) runs the sandbox and uploads traces.

See the linked docs for detailed configuration and operational guidance (Enterprise Control Plane, Enterprise Trust Baseline, and POLICY_COOKBOOK).

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 13

Native requirements
13 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
click
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
click>=8.1.0runtime
jinja2
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
jinja2>=3.1.0runtime
pydantic
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
pydantic>=2.6.0runtime
requests
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
requests>=2.31.0runtime
packaging
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
packaging>=23.0runtime
PyYAML
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
PyYAML>=6.0.0runtime
tomli
Environment
{
  "extras": "",
  "marker": "python_version < \"3.11\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
tomli>=2.0.1; python_version < "3.11"runtime
huggingface_hub
Environment
{
  "extras": "",
  "marker": "extra == \"huggingface\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
huggingface_hub>=0.26.0; extra == "huggingface"runtime
build
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
build>=1.2.1; extra == "dev"runtime
pytest
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
pytest>=8.0.0; extra == "dev"runtime
ruff
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
ruff>=0.6.0; extra == "dev"runtime
mypy
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
mypy>=1.10.0; extra == "dev"runtime
types-requests
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
types-requests>=2.32.0.20240622; extra == "dev"runtime

Distribution files

2 collected
aibom_inspector-0.2.0-py3-none-any.whl

bdist_wheel · 109.53 KB · Python py3

Source file
aibom_inspector-0.2.0.tar.gz

sdist · 115.59 KB · Python source

Source file

Repository

PENDING
aibom-inspector/ai-bom-inspector

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 21 Oct, 10:02 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:fac61d3b3d5d491d4cff100ec84c05d3f2dc04cf83e9d1ab614331e5d8faf4e2

Other collected versions

View all collected versions →