Metadata-Version: 2.4
Name: agent-bom
Version: 0.112.1
Summary: AI supply-chain BOM: every agent, MCP server and AI package, and what each one can reach.
Author-email: Wagdy Saad <andwgdysaad@gmail.com>
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/koda-ai-studio/agent-bom
Project-URL: Repository, https://github.com/koda-ai-studio/agent-bom
Project-URL: Issues, https://github.com/koda-ai-studio/agent-bom/issues
Project-URL: Changelog, https://github.com/koda-ai-studio/agent-bom/releases
Project-URL: Documentation, https://koda-ai-studio.github.io/agent-bom/
Project-URL: Security Policy, https://github.com/koda-ai-studio/agent-bom/blob/main/SECURITY.md
Project-URL: Trust & Permissions, https://github.com/koda-ai-studio/agent-bom/blob/main/PERMISSIONS.md
Keywords: ai-bom,sbom,mcp,mcp-server,security,ai-agents,vulnerability,supply-chain,owasp,mitre-atlas,nist-ai-rmf,blast-radius,cve,llm-security,remediation,mcp-introspection,openclaw,ai-enrichment,credential-exposure,config-security,ai-supply-chain,ai-infrastructure,gpu-security,cuda,pytorch,openssf-scorecard,malicious-package-detection,runtime-monitoring,model-provenance
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Environment :: Console
Classifier: Topic :: Security
Classifier: Topic :: System :: Monitoring
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: click>=8.0
Requires-Dist: rich>=13.0
Requires-Dist: httpx>=0.28.1
Requires-Dist: httpcore<2,>=1.0.9
Requires-Dist: pydantic>=2.0
Requires-Dist: cyclonedx-python-lib>=11.6
Requires-Dist: packageurl-python>=0.17
Requires-Dist: packaging>=24.0
Requires-Dist: pathspec>=1.1
Requires-Dist: regex>=2026.9.10
Requires-Dist: toml>=0.10
Requires-Dist: pyyaml>=6.0
Requires-Dist: defusedxml>=0.7.1
Requires-Dist: jsonschema>=4.0
Requires-Dist: psutil>=5.9
Requires-Dist: mcp<3,>=2.3
Requires-Dist: certifi>=2026.10.19
Requires-Dist: jinja2>=3.1.6
Requires-Dist: requests>=2.33.0
Requires-Dist: urllib3>=2.8.0
Requires-Dist: pyjwt>=2.15.0
Requires-Dist: cryptography>=50.0.0
Requires-Dist: tree-sitter>=0.26.0
Requires-Dist: tree-sitter-javascript>=0.25.0
Requires-Dist: tree-sitter-typescript>=0.23.2
Requires-Dist: cvss<4,>=3.6
Provides-Extra: api
Requires-Dist: werkzeug>=3.1.9; extra == "api"
Requires-Dist: fastapi!=0.136.3,>=0.115; extra == "api"
Requires-Dist: uvicorn[standard]>=0.49.0; extra == "api"
Requires-Dist: sse-starlette>=2.1; extra == "api"
Requires-Dist: starlette<2,>=1.4.1; extra == "api"
Requires-Dist: zstandard>=0.23; extra == "api"
Provides-Extra: otel
Requires-Dist: opentelemetry-api>=1.45.1; extra == "otel"
Requires-Dist: opentelemetry-sdk>=1.45.1; extra == "otel"
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.45.1; extra == "otel"
Requires-Dist: protobuf>=6.33.5; extra == "otel"
Provides-Extra: ui
Requires-Dist: agent-bom[api]; extra == "ui"
Provides-Extra: aws
Requires-Dist: boto3>=1.34; extra == "aws"
Provides-Extra: azure
Requires-Dist: azure-identity>=1.15; extra == "azure"
Requires-Dist: azure-mgmt-resource>=23.0; extra == "azure"
Requires-Dist: azure-mgmt-authorization>=4.0; extra == "azure"
Requires-Dist: azure-mgmt-cognitiveservices>=13.5; extra == "azure"
Requires-Dist: azure-mgmt-web>=7.2; extra == "azure"
Requires-Dist: azure-mgmt-appcontainers>=3.0; extra == "azure"
Requires-Dist: azure-mgmt-containerinstance>=10.1; extra == "azure"
Requires-Dist: azure-mgmt-containerservice>=41.3.0; extra == "azure"
Requires-Dist: azure-mgmt-machinelearningservices>=1.0; extra == "azure"
Requires-Dist: azure-ai-ml>=1.34; extra == "azure"
Requires-Dist: azure-ai-projects>=1.0; extra == "azure"
Requires-Dist: azure-mgmt-compute>=30.0; extra == "azure"
Requires-Dist: azure-mgmt-storage>=21.0; extra == "azure"
Requires-Dist: azure-mgmt-network>=25.0; extra == "azure"
Requires-Dist: azure-mgmt-msi>=7.0; extra == "azure"
Requires-Dist: azure-mgmt-monitor>=6.0; extra == "azure"
Requires-Dist: azure-mgmt-security>=7.0; extra == "azure"
Requires-Dist: azure-mgmt-keyvault>=10.3; extra == "azure"
Requires-Dist: azure-keyvault-keys>=4.8; extra == "azure"
Requires-Dist: azure-keyvault-secrets>=4.7; extra == "azure"
Requires-Dist: azure-mgmt-sql>=3.0; extra == "azure"
Requires-Dist: azure-mgmt-rdbms>=10.1; extra == "azure"
Requires-Dist: azure-mgmt-containerregistry>=15.0.0; extra == "azure"
Requires-Dist: azure-containerregistry>=1.2; extra == "azure"
Requires-Dist: azure-mgmt-cosmosdb>=9.5; extra == "azure"
Requires-Dist: azure-mgmt-managementgroups>=1.0; extra == "azure"
Requires-Dist: azure-mgmt-eventhub>=11.0; extra == "azure"
Requires-Dist: azure-mgmt-servicebus>=8.2; extra == "azure"
Requires-Dist: azure-mgmt-redis>=14.3; extra == "azure"
Requires-Dist: azure-mgmt-frontdoor>=1.1; extra == "azure"
Requires-Dist: azure-mgmt-apimanagement>=4.0; extra == "azure"
Requires-Dist: azure-storage-queue>=12.9; extra == "azure"
Requires-Dist: azure-storage-blob>=12.19; extra == "azure"
Requires-Dist: oauthlib>=4.0.0; extra == "azure"
Requires-Dist: six>=1.17.0; extra == "azure"
Provides-Extra: gcp
Requires-Dist: google-cloud-aiplatform>=1.38; extra == "gcp"
Requires-Dist: google-cloud-asset>=3.30; extra == "gcp"
Requires-Dist: google-cloud-functions>=1.16; extra == "gcp"
Requires-Dist: google-cloud-container>=2.36; extra == "gcp"
Requires-Dist: google-cloud-run>=0.10; extra == "gcp"
Requires-Dist: google-cloud-resource-manager>=1.12; extra == "gcp"
Requires-Dist: google-cloud-compute>=1.14; extra == "gcp"
Requires-Dist: google-cloud-iam>=2.19; extra == "gcp"
Requires-Dist: google-cloud-storage>=2.10; extra == "gcp"
Requires-Dist: google-cloud-logging>=3.5; extra == "gcp"
Requires-Dist: google-cloud-pubsub>=2.18; extra == "gcp"
Requires-Dist: google-api-python-client>=2.100; extra == "gcp"
Requires-Dist: google-cloud-bigquery>=3.14; extra == "gcp"
Requires-Dist: google-cloud-api-gateway>=1.9; extra == "gcp"
Requires-Dist: google-cloud-artifact-registry>=1.11; extra == "gcp"
Requires-Dist: google-cloud-org-policy>=1.11; extra == "gcp"
Provides-Extra: coreweave
Provides-Extra: databricks
Requires-Dist: databricks-sdk>=0.20; extra == "databricks"
Provides-Extra: snowflake
Requires-Dist: snowflake-connector-python>=3.6; extra == "snowflake"
Provides-Extra: nebius
Requires-Dist: requests>=2.33.0; extra == "nebius"
Provides-Extra: huggingface
Requires-Dist: huggingface-hub>=0.20; extra == "huggingface"
Provides-Extra: wandb
Requires-Dist: wandb>=0.16; extra == "wandb"
Provides-Extra: openai
Requires-Dist: openai>=1.12; extra == "openai"
Provides-Extra: ai-enrich
Requires-Dist: litellm!=1.107.0,>=1.96.2; extra == "ai-enrich"
Requires-Dist: python-dotenv>=1.2.2; extra == "ai-enrich"
Requires-Dist: aiohttp>=3.13.4; extra == "ai-enrich"
Requires-Dist: openai>=2.30.0; extra == "ai-enrich"
Provides-Extra: graph
Requires-Dist: networkx>=3.0; extra == "graph"
Requires-Dist: numpy>=1.26; extra == "graph"
Requires-Dist: scipy>=1.13; extra == "graph"
Provides-Extra: pdf
Provides-Extra: postgres
Requires-Dist: psycopg[binary]>=3.1; extra == "postgres"
Requires-Dist: psycopg-pool>=3.1; extra == "postgres"
Requires-Dist: alembic>=1.13; extra == "postgres"
Requires-Dist: sqlalchemy>=2.0; extra == "postgres"
Provides-Extra: watch
Requires-Dist: watchdog>=4.0; extra == "watch"
Provides-Extra: runtime
Requires-Dist: cryptography>=50.0.0; extra == "runtime"
Provides-Extra: visual
Requires-Dist: Pillow>=13.0.0; extra == "visual"
Requires-Dist: pytesseract>=0.3.10; extra == "visual"
Provides-Extra: mcp-server
Provides-Extra: sigstore
Requires-Dist: sigstore<5,>=4.5.1; extra == "sigstore"
Provides-Extra: lake
Requires-Dist: pyarrow>=15.0; extra == "lake"
Requires-Dist: pyiceberg>=0.11.1; extra == "lake"
Provides-Extra: sca-import
Provides-Extra: snyk
Provides-Extra: interactive
Requires-Dist: prompt-toolkit>=3.0; extra == "interactive"
Provides-Extra: oidc
Requires-Dist: PyJWT>=2.15.0; extra == "oidc"
Requires-Dist: cryptography>=50.0.0; extra == "oidc"
Provides-Extra: saml
Requires-Dist: python3-saml>=1.16.0; extra == "saml"
Provides-Extra: cloud
Requires-Dist: agent-bom[aws]; extra == "cloud"
Requires-Dist: agent-bom[azure]; extra == "cloud"
Requires-Dist: agent-bom[gcp]; extra == "cloud"
Requires-Dist: agent-bom[databricks]; extra == "cloud"
Requires-Dist: agent-bom[snowflake]; extra == "cloud"
Requires-Dist: agent-bom[nebius]; extra == "cloud"
Requires-Dist: agent-bom[huggingface]; extra == "cloud"
Requires-Dist: agent-bom[wandb]; extra == "cloud"
Requires-Dist: agent-bom[openai]; extra == "cloud"
Provides-Extra: all
Requires-Dist: agent-bom[ai-enrich]; extra == "all"
Requires-Dist: agent-bom[cloud]; extra == "all"
Requires-Dist: agent-bom[graph]; extra == "all"
Requires-Dist: agent-bom[interactive]; extra == "all"
Requires-Dist: agent-bom[mcp-server]; extra == "all"
Requires-Dist: agent-bom[oidc]; extra == "all"
Requires-Dist: agent-bom[otel]; extra == "all"
Requires-Dist: agent-bom[postgres]; extra == "all"
Requires-Dist: agent-bom[runtime]; extra == "all"
Requires-Dist: agent-bom[saml]; extra == "all"
Requires-Dist: agent-bom[ui]; extra == "all"
Requires-Dist: agent-bom[visual]; extra == "all"
Requires-Dist: agent-bom[watch]; extra == "all"
Provides-Extra: docs
Requires-Dist: mkdocs-material>=9.5; extra == "docs"
Requires-Dist: mkdocstrings[python]>=0.24; extra == "docs"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-asyncio>=1.4.0; extra == "dev"
Requires-Dist: ruff>=0.16.7; extra == "dev"
Requires-Dist: mypy>=1.0; extra == "dev"
Requires-Dist: types-PyYAML>=6.0; extra == "dev"
Requires-Dist: types-requests>=2.31; extra == "dev"
Requires-Dist: types-toml>=0.10.8.20260518; extra == "dev"
Requires-Dist: bandit>=1.9; extra == "dev"
Requires-Dist: pytest-cov>=7.1.0; extra == "dev"
Requires-Dist: pytest-benchmark>=5.2.3; extra == "dev"
Requires-Dist: pytest-xdist>=3.5; extra == "dev"
Requires-Dist: pytest-randomly>=3.15; extra == "dev"
Requires-Dist: agent-bom[api]; extra == "dev"
Provides-Extra: dev-all
Requires-Dist: agent-bom[dev]; extra == "dev-all"
Requires-Dist: agent-bom[ui]; extra == "dev-all"
Requires-Dist: agent-bom[mcp-server]; extra == "dev-all"
Requires-Dist: agent-bom[graph]; extra == "dev-all"
Requires-Dist: agent-bom[postgres]; extra == "dev-all"
Dynamic: license-file

# agent-bom

<!-- mcp-name: io.github.koda-ai-studio/agent-bom -->

**AI supply-chain BOM: every agent, MCP server and AI package, and what each one can reach.**

For AppSec and platform engineers. Self-host free; local scans need no account.
Credential references are names, not secret values. Recorded relationships do
not prove exploitation or successful data access.

With [uv installed](https://docs.astral.sh/uv/getting-started/installation/), run
from the repository you want to inspect:

```bash
uvx agent-bom scan . --no-discover -f html -o agent-bom-report.html
```

Open `agent-bom-report.html` for inventory, findings, recorded exposure,
evidence coverage and fix guidance. `--no-discover` keeps discovery within the
selected project. No MCP configuration? Package findings remain useful;
agent/tool relationships need discovered configuration or an explicit inventory.
Review coverage warnings beside the verdict; incomplete evidence is not clean.
[What this scan does and does not establish](https://github.com/koda-ai-studio/agent-bom/blob/main/docs/FIRST_RUN.md#what-this-scan-does-and-does-not-establish).
Apply a reviewed fix, update the lockfile, and rerun `uvx agent-bom scan .`
in the same repository. Run `uvx agent-bom doctor` if the first scan cannot start.

For a deterministic sample, use the built-in offline demo. It deliberately
contains blocking findings, so status `1` is the expected security verdict;
the printed report is complete.

```bash
uvx agent-bom scan --demo --offline
```

The demo uses a curated sample for reproducible output within a release; advisory and severity updates can change later releases.

For the installed-command examples below, run `pip install agent-bom` in a
virtual environment. If you want an inspectable sample before scanning your own repo:

```bash
agent-bom samples first-run
agent-bom scan --inventory agent-bom-first-run/inventory.json -p agent-bom-first-run --enrich
```

The bundled first-run stack includes agent inventory, MCP server definitions,
placeholder credential environment variable names, Python/npm manifests, and a
prompt file. See `docs/FIRST_RUN.md` in the repository for the guided flow.

<details>
<summary><b>See the terminal demo</b></summary>

![agent-bom demo](https://raw.githubusercontent.com/koda-ai-studio/agent-bom/main/docs/images/demo-latest.gif)

</details>

## Follow one component

In the self-hosted dashboard, open **Inventory → component → Findings → Compliance**.
The views retain the exact component and scan snapshot, expose recorded relationships
and source evidence, and export loaded evidence with completeness receipts. Control
mappings do not establish evaluated passes or certification.

From a source checkout, [run the connected-BOM example](https://github.com/koda-ai-studio/agent-bom/tree/main/examples/connected-bom).
It retains before/after SQLite snapshots: a changed dependency input removes one
pinned advisory finding while an unrelated synthetic cloud check remains failed.
This bounded example does not change a deployment or qualify a cloud account.

## Recommended starting points

```bash
pip install agent-bom

agent-bom scan .                                 # Repo + MCP + package blast radius
agent-bom quickstart --dry-run --offline          # Sample-data and API/UI next steps
agent-bom samples first-run                      # Inspectable sample AI stack
agent-bom check flask@2.2.0 --ecosystem pypi     # Pre-install package verdict
agent-bom image nginx:latest                     # Container image scan
agent-bom scan . --remediate remediation.md       # Fix-first remediation plan
pip install 'agent-bom[ui]'                      # once, if you want the dashboard
agent-bom serve --persist ~/.agent-bom/control-plane.db  # restart-safe local control plane
```

The base wheel is the scanner/CLI path and includes MCP server mode
(`agent-bom mcp server`). Install optional surfaces explicitly:
`pip install 'agent-bom[ui]'` for the local API/dashboard process. Use
`pip install 'agent-bom[all]'` for supported first-run extras; MLflow remains
separate until its upstream CVE backlog is fixed. If an extra is missing, the
command exits with the matching install hint.

Self-hosted pilot:

```bash
curl -fsSL https://raw.githubusercontent.com/koda-ai-studio/agent-bom/main/deploy/docker-compose.pilot.yml -o docker-compose.pilot.yml
docker compose -f docker-compose.pilot.yml up -d
# Dashboard -> http://localhost:3000
```

For production, configure the database, identity and ingress settings in a
release checkout. Follow the [required secret bootstrap](https://github.com/koda-ai-studio/agent-bom/tree/main/deploy/helm/agent-bom#production-externalsecrets-are-a-separate-stage)
and wait for all four target Secrets before installing the workload:

```bash
helm upgrade --install agent-bom deploy/helm/agent-bom \
  --namespace agent-bom --create-namespace \
  -f deploy/helm/agent-bom/examples/eks-production-values.yaml
```

## Product views

### Dashboard

![agent-bom dashboard overview](https://raw.githubusercontent.com/koda-ai-studio/agent-bom/main/docs/images/dashboard-live.png)

### Follow an agent to its findings

![Sample production environment showing agents, MCP servers, dependencies and findings, with modeled access labeled](https://raw.githubusercontent.com/koda-ai-studio/agent-bom/main/docs/images/graph-environment-dark-live.png)

Follow Document Intake Agent → document-tools MCP → pillow@9.0.0 → CVE-2023-4863. This is a fictional sample estate; dashed access and credential links are modeled, not observed execution.

### Inspect why two records are linked

![Repository pin, image inventory and deployment occurrence resolve to one package, with relationship evidence open](https://raw.githubusercontent.com/koda-ai-studio/agent-bom/main/docs/images/graph-relationship-dark-live.png)

Real parsers, modeled local infrastructure: a repository pin, image SBOM and Kubernetes workload resolve to one package. The image inventory and deployment occurrence stay distinct. Select an arrow to inspect its source and evidence; a graph path does not prove execution or exploitation.

[Explore the reference evidence lab](https://github.com/koda-ai-studio/agent-bom/tree/main/examples/reference-evidence-lab) · [Graph guide](https://github.com/koda-ai-studio/agent-bom/blob/main/docs/GALLERY.md)

## What it scans

- **Agents + MCP** — MCP clients, servers, tools, transports, trust posture
- **Skills + instructions** — `CLAUDE.md`, `AGENTS.md`, `.cursorrules`, `.windsurfrules`, `skills/*`
- **Package risk** — supply-chain scanning across 15 package ecosystems (including `mix.lock` / `pubspec.lock` for Hex and Pub) with OSV/GHSA enrichment and blast radius
- **AI models + datasets** — malicious-model detection via safe pickle-opcode disassembly (no execution), model/dataset cards, and target-scoped PII/PHI dataset-file scanning
- **Container images + IaC** — native OCI parsing plus Dockerfile, Terraform, CloudFormation, Helm, and Kubernetes coverage
- **Cloud estate** — read-only, gated asset inventory across AWS/Azure/GCP plus AI/GPU posture and CIS benchmarks
- **Identity (NHI)** — non-human identity discovery (Okta/Entra), credential-expiry posture, and access-review campaigns
- **LLM cost** — spend forecasting, budget runway, chargeback/allocation, and seasonal-aware spend-anomaly detection
- **Secrets + runtime** — MCP proxy/gateway, inline firewall enforcement, A2A/MCP auth posture, Shield SDK, secrets, and redaction surfaces
- **Compliance + evidence** — mapped governance plus ZIP evidence bundles for auditors

## Supported sources

Discovery and scanning read from these sources today; the last row lists where evidence can be sent. The list is generated from a code-backed manifest (`docs/images/integrations-manifest.json`); a test fails if it names anything without an implementation.

<!-- integrations:begin (generated by scripts/render_social_preview_svg.py; do not edit) -->
| Area | Integrations |
|---|---|
| AI clients + IDEs | Claude, Codex, Cursor, GitHub Copilot, Windsurf, Cortex Code, Gemini CLI, JetBrains AI, Junie, Amazon Q, Cline, Roo Code, Continue, Zed, Goose, Snowflake CLI, Docker MCP Toolkit, Tabnine, Sourcegraph Cody, Aider, Void, Aide, Trae, Pieces, OpenClaw, mcp-cli |
| AI platforms + model hubs | OpenAI, Hugging Face, Ollama, MLflow, W&B, Langfuse, LangSmith |
| GPU + neo clouds | CoreWeave, Nebius, Lambda, RunPod, Vast.ai, Crusoe, GPU containers + K8s GPU nodes |
| Hyperscalers + Kubernetes | AWS, Azure, GCP, Kubernetes |
| Data + vector stores | Snowflake, Databricks, Supabase, Pinecone, Qdrant, Weaviate, Chroma, Milvus |
| Identity + SaaS + dev | Okta, GitHub Actions, Vercel, Microsoft Entra ID, Jira, ServiceNow, Slack, Jamf |
| Evidence out | ClickHouse, BigQuery, S3, GCS, Azure Blob, Jira tickets, Slack alerts, Vanta, Drata, OCSF syslog |

Product names and logos are trademarks of their owners, used only to identify supported evidence sources. Their use does not imply endorsement or partnership.
<!-- integrations:end -->

## Key features

- **Blast radius + attack-path fusion** — multi-hop exposure paths over one `UnifiedGraph`, from package → finding → MCP server → credentials → connected agents
- **CWE-aware impact** — RCE shows credential exposure, DoS does not; symbol-level CVE reachability joins CWE/CVE/CPE advisory context when OSV/GHSA carry affected symbols (Python, npm, Go)
- **Portable outputs** — SARIF, CycloneDX, SPDX, OCSF, HTML, graph, JSON, ZIP evidence bundles, and more
- **MCP server mode** — start with 8 scan-profile tools; use `agent-bom mcp server --profile full` for the complete catalog of 99 MCP tools, 7 resources, and 8 workflow prompts in Claude, Cursor, Windsurf, and Cortex CoCo / Cortex Code
- **Skill bundle identity** — stable bundle hashes for skill and instruction file review
- **Dependency confusion detection** — flags internal naming patterns
- **VEX generation** — auto-triage with CWE/CVE/CPE-aware reachability (package + function-level when advisory symbols exist)

Discovery and static/cloud scanning are read-only by default. Explicit disk
side-scans create temporary cloud resources and need additional permissions.
Proxy, gateway, Shield, and control-plane write tools are separate, explicit
runtime or authenticated operations. See the [permission and network boundaries](https://github.com/koda-ai-studio/agent-bom/blob/main/docs/PERMISSIONS.md)
before enabling cloud scans or outbound integrations.

## How the data moves

![How agent-bom works](https://raw.githubusercontent.com/koda-ai-studio/agent-bom/main/docs/images/scan-pipeline-light.svg)

## Blast radius

![Blast radius](https://raw.githubusercontent.com/koda-ai-studio/agent-bom/main/docs/images/blast-radius-light.svg)

## Links

- [GitHub](https://github.com/koda-ai-studio/agent-bom)
- [Docker Hub](https://hub.docker.com/r/agentbom/agent-bom)
- [Documentation](https://github.com/koda-ai-studio/agent-bom#readme)
- [Product brief](https://github.com/koda-ai-studio/agent-bom/blob/main/docs/ARCHITECTURE.md)
- [Verified metrics](https://github.com/koda-ai-studio/agent-bom/blob/main/docs/PRODUCT_METRICS.md)
- [Enterprise controls map](https://github.com/koda-ai-studio/agent-bom/blob/main/docs/TRUST.md)
- [Discord](https://discord.gg/3YmYPqKZh5)
