Skip to main content

abom-cli

The reference implementation of ABOM — the Agent Bill of Materials. Scan a repo, emit a signed Composition Manifest, verify it, and enforce it at the tool boundary — inline or through the MCP broker.

pip install abom-cli        # (until published: pip install -e .)
abom scan .                 # → abom.json (signed with ed25519)
abom verify abom.json       # check signature
abom verify abom.json --policy policy.json   # + enforce a policy (exit 1 on violations)
abom gate abom.json --tool wire_transfer     # ALLOW/DENY one action (deny-by-default)
abom broker abom.json --upstream https://mcp.internal/rpc  # mediate an agent's tool calls

Commands

Command What it does
abom scan [PATH] Detect agent components (models, prompts, tools, MCP servers, frameworks, vector stores, guardrails) and emit a signed Composition Manifest. -o - writes to stdout.
abom verify [FILE] Verify the ed25519 signature; with --policy, enforce model allowlist / residency / egress / approval rules. Non-zero exit on findings (CI-friendly). --trusted-key pins the authorized signer.
abom gate FILE --tool T Decide ALLOW/DENY for one action against the signed manifest, deny-by-default, notarized. --trusted-key refuses a manifest it can't authenticate. Exit 1 = DENY.
abom broker FILE --upstream URL Run the MCP broker: mediate every tools/call against the signed manifest before forwarding to an upstream MCP server. Denied calls return a notarized JSON-RPC error and never reach upstream. --log for a durable decision log.
abom keygen Show (or create) the local ed25519 signing key (~/.abom/signing_key.pem, override with ABOM_KEY).
abom version Print the tool and spec versions.

All commands accept -v (info) / -vv (debug) / -q (errors only) / --json-logs (NDJSON for CI) — logs go to stderr, so the ABOM on stdout stays clean.

Example

$ abom scan .
  ABOM · my-agent @ 1.2.0
  models                  3  gpt-4o-mini, claude-3-5-sonnet, OpenAI (SDK)
  frameworks              2  LangChain, LangGraph
  MCP servers             2  filesystem, github
  tools                   1  lookup_customer
  prompts                 1  prompts/system.txt
  signed: ed25519 · key 5846eabc738b3542
  → wrote abom.json

How detection works

abom scan is a static scanner (pure stdlib + cryptography):

  • Dependencies (requirements*.txt, pyproject.toml, package.json) → frameworks, model SDKs, vector stores, guardrails.
  • Source → concrete model names (gpt-4o, claude-*, …) and @tool-decorated functions.
  • Prompt files (*.prompt, prompts/*.txt|md) → hashed.
  • MCP configs (mcp.json, claude_desktop_config.json, …) → MCP servers.

Each component records detected_from so the manifest is auditable. The output validates against spec/abom-0.1.schema.json.

Signing

abom scan signs with ed25519 (cryptography). The key lives at ~/.abom/signing_key.pem (override with ABOM_KEY); the public key + a short key_id are embedded so abom verify is self-contained. Pin the trusted signer with --trusted-key <key_id> on verify / gate / broker: a manifest re-signed by any other key is then refused, so "signed" authenticates who — not just integrity. LocalSigner is dev/CI; a KMSSigner seam keeps the private key in a KMS/HSM for production.

Dev

make install          # pip install -e ".[dev]"
make test             # pytest (audit chain, scanner, signing)
make scan && make verify
make build            # wheel + sdist + twine check
python demo/demo.py   # generate → verify → tamper-evidence walkthrough

The MCP broker

abom broker moves enforcement out of the agent's process. The agent points its MCP client at the broker instead of the MCP server; the broker checks every tools/call against the signed manifest and only forwards allowed ones. A denied call is answered with a notarized JSON-RPC error and never reaches the upstream server — deny-by-default becomes structural for brokered tools rather than cooperative. It does not stop out-of-band calls (raw HTTP / subprocess) the agent makes without transiting the broker; pair it with network egress containment for that.

The optional [mcp] extra (pip install 'abom-cli[mcp]') pulls in httpx for the broker's upstream transport and for abom scan --mcp.

Download files

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

Source Distribution

abom_cli-0.1.15.tar.gz (88.0 kB view details)

Uploaded Source

Built Distribution

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

abom_cli-0.1.15-py3-none-any.whl (61.6 kB view details)

Uploaded Python 3

File details

Details for the file abom_cli-0.1.15.tar.gz.

File metadata

  • Download URL: abom_cli-0.1.15.tar.gz
  • Upload date:
  • Size: 88.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for abom_cli-0.1.15.tar.gz
Algorithm Hash digest
SHA256 c5e0bd84fd6ca82d8f407c4189dba7379a53a1e197a85dc5a5202150acf0a835
MD5 9638d4c597fb0f9fcb071d648d58c546
BLAKE2b-256 1df59f7c7b364ee0604c17a4f5273eda3895b884eecb36a30ed7c2b2d6e1c757

See more details on using hashes here.

Provenance

The following attestation bundles were made for abom_cli-0.1.15.tar.gz:

Publisher: release.yml on josephassiga/abom-dev

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file abom_cli-0.1.15-py3-none-any.whl.

File metadata

  • Download URL: abom_cli-0.1.15-py3-none-any.whl
  • Upload date:
  • Size: 61.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for abom_cli-0.1.15-py3-none-any.whl
Algorithm Hash digest
SHA256 4bd3ed02b4ad6d35a50416ddfc45e7fb8cddcf230edcdd54a8833ecaed5044e5
MD5 744b086c06fd4331eaa52cd60ff534f1
BLAKE2b-256 5a3533b167f7d570d58b93d78d44a3ee525afc9f2e930502f148c1f3dde4d3d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for abom_cli-0.1.15-py3-none-any.whl:

Publisher: release.yml on josephassiga/abom-dev

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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