Extension Entry Points¶
agent-bom supports opt-in Python entry points for external inventory parsers,
cloud providers, and SaaS connectors. This lets teams ship ecosystem-specific
integrations as separate packages without modifying src/agent_bom.
Entry point loading is disabled by default. Enable it only in trusted environments:
Entry Point Groups¶
| Group | Purpose | Registration type |
|---|---|---|
agent_bom.inventory_parsers |
Package or manifest parsers | InventoryParserRegistration |
agent_bom.cloud_providers |
Cloud inventory discovery | CloudProviderRegistration |
agent_bom.connectors |
SaaS connector discovery | ConnectorRegistration |
Built-in registrations use the same registry path, so list_registered_*
returns built-ins plus trusted entry-point extensions when enabled.
Inventory Parser Example¶
[project.entry-points."agent_bom.inventory_parsers"]
acme_lock = "agent_bom_parser_acme:registration"
from pathlib import Path
from agent_bom.extensions import ExtensionCapabilities
from agent_bom.models import MCPServer, Package
from agent_bom.parsers.base import InventoryParserRegistration
def parse_acme_lock(root: Path, server: MCPServer | None = None) -> list[Package]:
lockfile = root / "acme.lock"
if not lockfile.exists():
return []
return [Package(name="example", version="1.0.0", ecosystem="acme")]
def registration() -> InventoryParserRegistration:
return InventoryParserRegistration(
name="acme-lock",
module="agent_bom_parser_acme",
parse_attr="parse_acme_lock",
manifest_names=("acme.lock",),
capabilities=ExtensionCapabilities(
scan_modes=("inventory",),
required_scopes=("local_project_read",),
outbound_destinations=(),
data_boundary="local_manifest_read_only",
writes=False,
network_access=False,
guarantees=("read_only", "no_secret_collection"),
),
source="entry_point",
)
Capability Contract¶
Every extension should declare its operational boundary through
ExtensionCapabilities:
scan_modes: inventory, cloud read-only, SaaS read-only, runtime probe, etc.required_scopes: local permissions, API scopes, IAM permissions, or roles.permissions_used: concrete read permissions used during discovery.outbound_destinations: API hosts or registries the extension contacts.data_boundary: what data is read and whether it leaves the local machine.writes: must beFalsefor read-only discovery integrations.network_access:Trueonly when the extension opens network connections.guarantees: read-only, redacted, no secret collection, bounded output, etc.
These fields are exposed through the provider/parser registries and are intended to become part of scan evidence and control-plane discovery envelopes.
Safety Rules¶
- Keep parser extensions read-only.
- Do not collect raw secret values; return names, references, and redacted evidence instead.
- Keep warnings user-safe. Registry load failures are sanitized before display.
- Avoid running subprocesses from parsers unless the extension documentation declares the command and its arguments.
- Prefer structured parser APIs over ad hoc shell commands.