Skip to main content

Ladex

A bill of lading for AI.

version 0.2.0 CI status GitHub stars license MIT python 3.12+ tests 178 passing CycloneDX ML-BOM EU AI Act Art. 50


You already require a bill of lading for physical cargo and an SBOM for software. Ladex is the one for AI — it records what AI is aboard your codebase, from whom, and under what terms, captured at the moment the code is written rather than discovered after the fact.

Ladex is a shift-left AI governance tool for developers. When you write an AI-relevant line of code — importing an agent framework, loading a Hugging Face model, calling an inference API, provisioning a GPU node pool in Terraform — Ladex detects it and answers three questions:

  1. What is this?  model / dataset / agent framework / vector store / inference API
  2. What does it obligate?  EU AI Act Art. 50 disclosure, Annex III high-risk triggers
  3. What's auto-verifiable vs. what needs a human?  CVEs and licenses resolve automatically. Training-data provenance and consent basis can't be derived by any scanner — they're flagged UNDOCUMENTED and require a signed human attestation, never a fake green checkmark.

The output is a CycloneDX ML-BOM committed to your repo, diffable in PRs, with signed attestations for the fields no tool can derive.

Ladex records what's aboard; it does not block attacks.

What it does

detect (Python + Terraform + Kubernetes)
  → enrich    PyPI licenses · OSV CVEs · Hugging Face model cards   (cached, offline-capable)
  → obligate  EU AI Act (Art. 5 bans · Annex III/Art. 8-15 high-risk · Art. 50 · Art. 53 GPAI)
  → BOM       deterministic CycloneDX ML-BOM that diffs cleanly in PRs
  → attest    in-toto/DSSE signature fills an UNDOCUMENTED gap with a verifiable declaration

surfaces:  CLI   +   VS Code (LSP)   +   GitHub PR check   — one shared engine

Install — which one do you need?

Ladex has three surfaces. Install only the one(s) you'll use — they're independent, and none requires another.

I want to… Install this How
Editor squiggles as I type VS Code extension Search "Ladex" in the Extensions panel. The engine is bundled — no pip needed.
Run scan / write-bom / attest / verify / ci in a terminal the ladex CLI uv tool install ladex (or pipx install ladex)
Gate pull requests for my team GitHub Action Add the workflow (see On your pull requests) — nobody installs anything locally.

The extension only shows AI inline (read-only). Producing the BOM, signing attestations, and running the gate are CLI actions — so if you want those, install the CLI.

Installing the CLI

uv tool install ladex      # isolated + on your PATH (recommended)
ladex --version            # -> ladex 0.1.4

Tip: install it as a tool (uv tool / pipx), not with a plain global pip installpip can drop the command in a Scripts/ dir that isn't on your PATH (a common Windows "command not found"), and it clutters your global environment. Tools are isolated and on PATH. pipx install ladex works too; use a project virtualenv only if you specifically want it pinned per-project.

Quickstart

# See every AI component in a repo (silent on non-AI code)
ladex scan path/to/repo

# Add real facts: licenses, CVEs, model cards (cached; --offline works from cache)
ladex scan path/to/repo --enrich

# Declare your EU AI Act classification once (high-risk? GPAI provider? prohibited uses?)
ladex policy init path/to/repo        # writes .ladex/project.yaml to fill in & commit

# What does it obligate under the EU AI Act? (reads .ladex/project.yaml; flags override)
ladex policy check path/to/repo --user-facing

# Produce the committable, deterministic ML-BOM
ladex scan path/to/repo --write-bom aibom.cdx.json

# Sign a human answer for a gap no scanner can fill, then verify it
ladex attest "sentence-transformers/all-MiniLM-L6-v2" \
    --claim provenance --value "Curated public corpora, reviewed 2026-08"
ladex verify

# Gate it (exit non-zero on undocumented provenance / open obligations)
ladex ci path/to/repo --fail-on gaps

Example

app.py
   7:10  inference_api    openai.client       openai.OpenAI (OpenAI)
  12:9   model            openai.model-id     gpt-4o (OpenAI)

infra/main.tf
  20:1   vector_store     iac.tf.vector-store-unencrypted   HIGH   aws_opensearch_domain.vectors
                                                                   - Vector store is not encrypted at rest

Summary: 3 detection(s) across 2 of 2 file(s) scanned.

Commands

Command What it does
ladex --version Print the installed version.
ladex scan [PATH] Detect AI components across a tree (Python + Terraform + Kubernetes). Silent on non-AI code.
ladex scan PATH --enrich Add licenses (PyPI), CVEs (OSV), and model cards (HF). --offline uses the cache.
ladex scan PATH --write-bom [FILE] Write the deterministic CycloneDX ML-BOM (default aibom.cdx.json).
ladex scan PATH --json Machine-readable scan output.
ladex detect FILE.py Detect AI in a single file.
ladex policy init [PATH] Scaffold .ladex/project.yaml (declare your EU AI Act classification).
ladex policy check [PATH] Show applicable EU AI Act obligations and open gaps (--json for machine output).
ladex policy list List the loaded policy bundles and rules.
ladex ci [PATH] Gate for CI/PRs: exit non-zero on open gaps. --fail-on none|gaps|strict, --format text|markdown|json|github.
ladex attest SUBJECT --claim CLAIM --value TEXT Sign a human declaration — a model's provenance/consent_basis, or an obligation rule id with --claim satisfied. --attester WHO.
ladex verify [PATH] Verify every stored attestation's signature.
ladex taxonomy list · ladex taxonomy validate [PACK…] Inspect / validate the detection rules.
ladex serve Run the LSP server over stdio (the VS Code extension launches this).

Project-fact flags for policy check / ci override .ladex/project.yaml: --user-facing/--not-user-facing, --synthetic-content/--no-synthetic-content.

On your pull requests

The GitHub Action runs the same engine as a merge gate: it detects AI added in a PR, records its EU AI Act obligations, and fails the check on undocumented provenance — with a sticky comment showing exactly which ladex attest command closes each gap.

# .github/workflows/ladex.yml
on: pull_request
permissions: { contents: read, pull-requests: write }
jobs:
  ladex:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: aibhuyan/ladex/apps/github@v0.2.0
        with: { fail-on: gaps }

See apps/github/README.md for all inputs. Locally, the same gate is ladex ci [PATH] --fail-on gaps (exit non-zero on open gaps).

In your editor

The VS Code extension gives inline diagnostics as you type, nothing on non-AI code — and the platform builds bundle the engine, so it's a single install with no separate pip install:

  • From the Marketplace — search "Ladex" in the Extensions panel (or open the listing). VS Code automatically installs the build for your OS/CPU.
  • From a .vsix — download the one matching your platform from the Releases page (ladex-<version>-{win32-x64,darwin-arm64,linux-x64}.vsix) → Extensions panel → Install from VSIX….

Then open any Python file that uses an AI library. See extensions/vscode/README.md for configuration and development.

Design principles

  • One engine, three surfaces. The IDE, CLI, and GitHub PR check all call the same Python engine — the editor can never disagree with the gate.
  • Ruthless silence. If a line isn't AI-relevant, Ladex says nothing.
  • Honest gaps. UNDOCUMENTED is a valid, valuable output. A green checkmark only appears when something was actually verified — or signed by a named human.
  • Policy as versioned data. Taxonomy and EU AI Act rules are updatable bundles, not code.

Scope

Python + Terraform + Kubernetes detection. EU AI Act. Three surfaces — CLI, VS Code, and a GitHub PR check. The Postgres-backed evidence graph is the remaining v2 item.

Development

From source (requires uv and Python 3.12):

git clone https://github.com/aibhuyan/ladex
cd ladex
uv sync
uv run ladex --version      # from a checkout, run via `uv run ladex …`

uv run ruff check .
uv run mypy
uv run pytest

Pre-commit (ruff + mypy) runs on every commit; run uv run pre-commit install once. See RELEASING.md for how releases are cut and published.

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ladex-0.2.0.tar.gz (81.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ladex-0.2.0-py3-none-any.whl (76.1 kB view details)

Uploaded Python 3

File details

Details for the file ladex-0.2.0.tar.gz.

File metadata

  • Download URL: ladex-0.2.0.tar.gz
  • Upload date:
  • Size: 81.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ladex-0.2.0.tar.gz
Algorithm Hash digest
SHA256 95f8f8bdea61c52ccac81c4214bee2909f846cc6254b05879321841d2fdf839a
MD5 5d811d676aac3f7d88ef7500078a4a7f
BLAKE2b-256 0c48a47c7fb746ed27f5d3d0917b4c63c9c6be1f2f262f356d6abfa038586c06

See more details on using hashes here.

Provenance

The following attestation bundles were made for ladex-0.2.0.tar.gz:

Publisher: release.yml on aibhuyan/ladex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ladex-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: ladex-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 76.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ladex-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aa22b63cc95f355dfb1d5bb59b00b29874af8b5e394a803734073aa276323219
MD5 7b5044487301276c2b47bf3a22f7af68
BLAKE2b-256 14f8a562d2cad8cfd44b074f15e6db2e659d44135186824fe2e3fc0bf799d318

See more details on using hashes here.

Provenance

The following attestation bundles were made for ladex-0.2.0-py3-none-any.whl:

Publisher: release.yml on aibhuyan/ladex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page