Skip to main content

AI SBOM generator with portable schema

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

Xelo

Xelo is an open-source AI SBOM (Software Bill of Materials) generator for agentic and LLM-powered applications. It scans source code and configuration, produces a structured AI-BOM document, and supports CycloneDX export for security and compliance workflows.

For official documentation, visit https://nuguardai.github.io/xelo.

What Xelo Does

Xelo analyses a repository and produces an AI SBOM — a machine-readable inventory of every AI component it can find:

  • Agents — agentic orchestrators (LangGraph graphs, CrewAI crews, AutoGen agents, OpenAI Agents, …)
  • Models — LLM and embedding model references, including provider and version
  • Tools — function tools and MCP tools wired to agents
  • Prompts — system instructions and prompt templates (full content preserved)
  • Datastores — vector stores, databases, caches; with PII/PHI data-classification from SQL and Python models
  • Guardrails — content filters and safety validators
  • Auth — authentication nodes (OAuth2, API key, Bearer, JWT, MCP auth providers)
  • Privileges — capability grants (db_write, filesystem_write, code_execution, …)
  • Deployment — Docker image references, cloud targets, IaC context

Xelo runs a 3-phase pipeline: AST-aware adapters → regex fallbacks → optional LLM enrichment. The first two phases are fully deterministic and require no API key.

Supported Frameworks

Python: LangChain, LangGraph, OpenAI Agents SDK, CrewAI (code + YAML), AutoGen (code + YAML), Google ADK, LlamaIndex, Agno, AWS BedrockAgentCore, Azure AI Agent Service, Guardrails AI, MCP Server (FastMCP / low-level), Semantic Kernel

TypeScript / JavaScript: LangChain.js, LangGraph.js, OpenAI Agents (TS), Azure AI Agents (TS), Agno (TS), MCP Server (TS)

Installation

pip install xelo

Install for development (all extras):

pip install -e ".[dev]"

Quickstart

Scan a local repository:

xelo scan ./my-repo --output sbom.json

Scan a remote repository:

xelo scan https://github.com/org/repo --ref main --output sbom.json

Add LLM enrichment for richer output (recommended for production use):

export OPENAI_API_KEY=sk-...
xelo scan ./my-repo --llm --llm-model gpt-4o-mini --output sbom.json

Validate a produced SBOM against the bundled schema:

xelo validate sbom.json
# OK — document is valid

Print or save the JSON Schema:

xelo schema                            # print to stdout
xelo schema --output aibom.schema.json # write to file

CLI alias: ai-sbom. Run xelo --help for all flags.

Output Formats

Flag Format
--format json (default) Xelo-native AI SBOM (see schema docs)
--format cyclonedx CycloneDX 1.6 JSON (AI components only)
--format unified CycloneDX merged with standard dependency SBOM

Validate a produced document:

xelo validate sbom.json

Print the JSON schema:

xelo schema

Toolbox Plugins

Xelo ships with built-in analysis plugins invoked via xelo plugin run:

xelo plugin list                                          # list all plugins

xelo plugin run vulnerability sbom.json                   # offline VLA rules
xelo plugin run atlas sbom.json --output atlas.json       # MITRE ATLAS annotation
xelo plugin run sarif sbom.json --output results.sarif    # SARIF 2.1.0
xelo plugin run markdown sbom.json --output report.md     # Markdown report
xelo plugin run cyclonedx sbom.json --output bom.cdx.json # CycloneDX 1.6
Plugin CLI name Network What it does
VulnerabilityScannerPlugin vulnerability No Structural VLA rules — missing guardrails, unprotected models, over-privileged agents
AtlasAnnotatorPlugin atlas No Maps every finding to MITRE ATLAS v2 techniques and mitigations
LicenseCheckerPlugin license No Checks dependency licence compliance
DependencyAnalyzerPlugin dependency No Scores dependency freshness and flags outdated AI packages
SarifExporterPlugin sarif No Exports findings as SARIF 2.1.0 (GitHub Code Scanning / GHAS compatible)
CycloneDxExporter cyclonedx No Exports nodes as CycloneDX 1.6
MarkdownExporterPlugin markdown No Human-readable Markdown report
GhasUploaderPlugin ghas Yes Uploads SARIF to GitHub Advanced Security
AwsSecurityHubPlugin aws-security-hub Yes Pushes findings to AWS Security Hub (requires boto3)
XrayPlugin xray Yes Pushes findings to JFrog Xray

Plugins are also importable as a Python library:

import json
from xelo import AiSbomExtractor, AiSbomConfig
from xelo.toolbox.plugins.vulnerability import VulnerabilityScannerPlugin
from xelo.toolbox.plugins.atlas_annotator import AtlasAnnotatorPlugin
from xelo.toolbox.plugins.sarif_exporter import SarifExporterPlugin
from xelo.toolbox.plugins.markdown_exporter import MarkdownExporterPlugin

doc = AiSbomExtractor().extract_from_path("./my-repo", config=AiSbomConfig())
sbom = doc.model_dump(mode="json")

vuln = VulnerabilityScannerPlugin().run(sbom, {})
print(vuln.status, vuln.message)

atlas = AtlasAnnotatorPlugin().run(sbom, {})
for finding in atlas.details["findings"]:
    print(finding["rule_id"], finding["severity"], finding["atlas"]["techniques"])

sarif = SarifExporterPlugin().run(sbom, {})
open("results.sarif", "w").write(json.dumps(sarif.details, indent=2))

md = MarkdownExporterPlugin().run(sbom, {})
open("report.md", "w").write(md.details["markdown"])

To add custom detection adapters (extending framework coverage), subclass xelo.plugins.PluginAdapter and register under the xelo.plugins entry-point group. Enable at scan time with AiSbomExtractor(load_plugins=True). See the Developer Guide for details.

Configuration

CLI flags take precedence over environment variables.

Variable Purpose Default
XELO_LLM Enable LLM enrichment (true/1) false
XELO_LLM_MODEL LLM model passed to litellm gpt-4o-mini
XELO_LLM_API_KEY API key (or use provider-native env vars)
XELO_LLM_API_BASE Base URL for self-hosted / proxy endpoints
XELO_LLM_BUDGET_TOKENS Max tokens for enrichment 50000

Legacy AISBOM_* names are accepted as fallbacks.

Development

pip install -e ".[dev]"
ruff check src tests   # lint
mypy src               # type-check
pytest                 # all tests
pytest -m "not smoke"  # skip network-dependent tests

Run the benchmark evaluation suite against cached fixtures:

python -m tests.test_toolbox.evaluate --all --mode local --verbose

Documentation

License

Apache-2.0. See LICENSE.

Disclaimer

See XELO-Disclaimer.md.

Project details


Download files

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

Source Distribution

xelo-0.7.0.tar.gz (259.4 kB view details)

Uploaded Source

Built Distribution

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

xelo-0.7.0-py3-none-any.whl (273.4 kB view details)

Uploaded Python 3

File details

Details for the file xelo-0.7.0.tar.gz.

File metadata

  • Download URL: xelo-0.7.0.tar.gz
  • Upload date:
  • Size: 259.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xelo-0.7.0.tar.gz
Algorithm Hash digest
SHA256 fdb73499af6fdcba9bd6d20fb354f2487bc356bfad7ec40763ee624d79f7799e
MD5 10c3fb993099e28cae2f7657780d792f
BLAKE2b-256 444906fc9bfe4c436887101bd832541dfb1a9b40c8862ddb3fe392b0a0e652fd

See more details on using hashes here.

File details

Details for the file xelo-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: xelo-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 273.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xelo-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9b99a901df863541cacef758ae982d9f24acfe85670f4ba979076cc26d850f13
MD5 8ed2d95837d62cfc99d961b375a19557
BLAKE2b-256 c595101f34ee2c5db8706b1de0aa9b2b326434e12b83c8ec9de7931877733195

See more details on using hashes here.

Supported by

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