$ xelo scan https://github.com/NuGuardAI/openai-cs-agents-demo \ --format unified --output sbom.json \ --plugin markdown --plugin-output report.md 29 nodes · 28 deps · 36 edges → sbom.json ok: Markdown report generated (29 node(s)) → report.md $ code report.md # Opening Markdown Preview...
| Field | Value |
|---|---|
| AI nodes | 29 |
| Dependencies | 28 |
| Data classification | PII |
| Classified tables | AirlineAgentContext, GuardrailCheck |
| Use case | This application implements an agentic AI workflow with 5 agent(s), 6 tool integration(s), and 2 guardrail control(s). Detected use cases include FAQ question answering, request triage and routing. |
| Frameworks | openai_agents |
| Modalities | TEXT |
| Name | Type | Confidence | Details |
|---|---|---|---|
| Cancellation Agent | AGENT | 92% | openai_agents |
| FAQ Agent | AGENT | 92% | openai_agents |
| Triage Agent | AGENT | 92% | openai_agents |
| Deploy to Azure | DEPLOYMENT | 95% | github-actions |
| Jailbreak Guardrail | GUARDRAIL | 92% | openai_agents |
| Relevance Guardrail | GUARDRAIL | 92% | openai_agents |
| gpt-4.1-mini | MODEL | 90% | openai |
| Triage Agent Instructions | PROMPT | 92% | "You are a helpful triaging agent…" · role=system |
Software Bill of Materials tools were designed for packages and libraries.
AI applications are different — they have agents, models, prompts, tools,
and datastores that package managers cannot see.
Xelo fills that gap. It analyses your source code and configs to produce an AI SBOM complete with evidence, confidence scores, and relationship edges.
Export the AI SBOM output to your own tooling. Answer questions that security teams actually need to ask: Which AI agents touch PHI? Which datastores are connected with the AI agents and with what privileges?
Language-specific parsers for Python (ast)
and TypeScript (tree-sitter) extract framework-specific components with high
precision — no generic string matching.
Model names, auth keywords, secret patterns, datastores, and IaC signals are caught across all file types — SQL, YAML, Dockerfiles, Nginx configs, prompt files.
Verifies uncertain detections, enriches node descriptions, generates a use-case summary, and produces a security briefing of all IaC findings. Token budget controlled.
Agentic orchestrators — LangGraph, CrewAI, AutoGen, OpenAI Agents SDK, Google ADK, AWS BedrockAgentCore, Azure Semantic Kernel, and more.
LLM and embedding model references with provider, version, and whether they are external services. Flags PHI/PII flowing to third-party APIs.
Function tools, MCP tools, and decorated callables wired to agents. Includes privilege scope — db_write, code_execution, …
System instructions and prompt templates — full content preserved, template variables identified.
Vector stores, databases, and caches with PII/PHI classification from SQL schema and Python ORM analysis. Datastore type and transport captured.
Content filters and safety validators. Used by the vulnerability scanner to identify AI components operating without any output protection.
Authentication nodes (OAuth2, API key, Bearer, JWT, MCP providers) and capability grants. Surfaces API surface with insufficient auth coverage.
Kubernetes manifests, Terraform, CloudFormation, GitHub Actions, Dockerfiles, Nginx configs. Cloud region, HA mode, secret stores, IAM roles.
21 structural XELO rules fire purely on the AI SBOM — no manual attestation, no LLM call. Rules are derived from OWASP AI Top 10, NIST AI RMF, and data protection frameworks, adapted for the AI application layer.
Missing guardrails, PHI to external LLMs, voice + PHI exposure, prompt injection risk, auth coverage gaps.
PHI workloads without encryption at rest, secrets in env vars, missing secret management service.
Overly permissive IAM with PHI, roles without permission boundary, GitHub Actions w/o strong authentication.
Single-AZ deployment with PHI, AI workloads without health checks, containers without resource limits.
Containers running as root — detected from Dockerfile USER instructions and K8s pod security context.
Xelo is for anyone who needs to answer "what is the AI behavior on our systems and data?" from a security, risk or governance perspective.
Xelo's first two phases are fully deterministic and require no LLM key. Xelo can be used in fully offline environments — no external API calls, no data leaves your network.
JSON output can be validated with the bundled schema, exported as CycloneDX 1.6, or analysed with any built-in toolbox plugin.
Full guide → Live example: OpenAI CS Agents →# Install $ pip install xelo # Scan a local repository $ xelo scan ./my-ai-app --output sbom.json 14 nodes, 18 edges → sbom.json # Scan a remote repository $ xelo scan https://github.com/org/repo --ref main # Validate the output $ xelo validate sbom.json OK — document is valid # Run structural security rules $ xelo plugin run vulnerability sbom.json # Export to CycloneDX 1.6 $ xelo scan ./my-ai-app --format cyclonedx --output bom.cdx.json
from pathlib import Path
from xelo import AiSbomConfig, AiSbomExtractor, AiSbomSerializer
from xelo.toolbox.plugins.vulnerability import VulnerabilityScannerPlugin
# Extract
config = AiSbomConfig()
doc = AiSbomExtractor().extract_from_path(
path=Path("./my-ai-app"),
config=config,
)
print(f"nodes={len(doc.nodes)}, edges={len(doc.edges)}")
# Serialize
json_str = AiSbomSerializer.to_json(doc)
# Vulnerability scan
sbom = doc.model_dump(mode="json")
result = VulnerabilityScannerPlugin().run(sbom, {})
print(result.status, result.message)
# .github/workflows/sbom.yml
name: AI SBOM scan
on: [push, pull_request]
jobs:
xelo:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install xelo
run: pip install xelo
- name: Scan
run: xelo scan . --output sbom.json
- name: Security check
run: |
xelo plugin run vulnerability sbom.json \
--output findings.json
python3 -c "
import json, sys
d = json.load(open('findings.json'))
s = d['details']['summary']
sys.exit(1 if s['critical']+s['high'] > 0 else 0)
"
- name: Upload SARIF
run: |
xelo plugin run sarif sbom.json --output results.sarif
xelo plugin run ghas sbom.json \
--config token=${{ secrets.GITHUB_TOKEN }} \
--config github_repo=${{ github.repository }}
Run any plugin with xelo plugin run <name> sbom.json.
All offline plugins work with no network access and no API key.
Install Xelo, run your first scan, and get a machine-readable picture of every AI component in your codebase — in under two minutes.