ABOM — the Agent Bill of Materials. Scan, sign, and verify what your AI agents are made of.
Project description
abom-cli
The reference implementation of ABOM — the Agent Bill of Materials. Scan a repo, emit a signed Composition Manifest, and verify it.
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)
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). |
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. A Notary / key registry
pins trusted key ids in 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
What else is in this package
src/abom/ also contains a prototype control-plane (api.py, db.py,
orchestration.py, the Notary) behind the optional [server] extra — the
beginnings of the commercial layer. It is not required for scan/verify
and is not part of the v0.1 spec. See MVP_SPEC.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file abom_cli-0.1.7.tar.gz.
File metadata
- Download URL: abom_cli-0.1.7.tar.gz
- Upload date:
- Size: 51.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
086b85eec4522d74cea251c12dd0cffd07637a12176afc03c21d13c839063b6b
|
|
| MD5 |
9ae2a44304af7326ef0ae3bbf12de168
|
|
| BLAKE2b-256 |
14cdec0ebabce970482c0ce64fcf75b3c21fbce703ad89ec83a10d6030af506e
|
Provenance
The following attestation bundles were made for abom_cli-0.1.7.tar.gz:
Publisher:
release.yml on josephassiga/abom-dev
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
abom_cli-0.1.7.tar.gz -
Subject digest:
086b85eec4522d74cea251c12dd0cffd07637a12176afc03c21d13c839063b6b - Sigstore transparency entry: 1937851669
- Sigstore integration time:
-
Permalink:
josephassiga/abom-dev@af33a90ae7acacca4fa508755b482a00a9e02b30 -
Branch / Tag:
refs/tags/v0.1.7 - Owner: https://github.com/josephassiga
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@af33a90ae7acacca4fa508755b482a00a9e02b30 -
Trigger Event:
push
-
Statement type:
File details
Details for the file abom_cli-0.1.7-py3-none-any.whl.
File metadata
- Download URL: abom_cli-0.1.7-py3-none-any.whl
- Upload date:
- Size: 44.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df3f9a953090ae5a4571a355699640bcde5de983c2fb0904ae8d3c664cedd3ff
|
|
| MD5 |
df374e3c24f8bbf659cda8bd740580cb
|
|
| BLAKE2b-256 |
7dbd18e0be6f21eb6e8c18dd91f05ceb8d8eef326855dfc67343e9bf9ded2e19
|
Provenance
The following attestation bundles were made for abom_cli-0.1.7-py3-none-any.whl:
Publisher:
release.yml on josephassiga/abom-dev
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
abom_cli-0.1.7-py3-none-any.whl -
Subject digest:
df3f9a953090ae5a4571a355699640bcde5de983c2fb0904ae8d3c664cedd3ff - Sigstore transparency entry: 1937851805
- Sigstore integration time:
-
Permalink:
josephassiga/abom-dev@af33a90ae7acacca4fa508755b482a00a9e02b30 -
Branch / Tag:
refs/tags/v0.1.7 - Owner: https://github.com/josephassiga
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@af33a90ae7acacca4fa508755b482a00a9e02b30 -
Trigger Event:
push
-
Statement type: