$ xelo scan https://github.com/NuGuardAI/openai-cs-agents-demo \ --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.
Five structural XELO rules fire purely on the AI SBOM with no manual attestation and no LLM call. They focus on regulated data exposure, missing output validation, insecure secret handling, root containers, and AI workloads without resource limits.
Flags PII or PHI flowing to external LLM providers outside your trust boundary.
Detects LLM models with no connected guardrail or output-validation step in the graph.
Finds secrets in environment variables or deployments with no dedicated secret store.
Reports deployment or container image nodes that run as root.
Highlights AI workloads that do not declare CPU or memory resource limits.
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.