Agent Manifest SDK — cryptographically anchor all 10 artifacts defining an AI agent at deployment
Project description
agent-manifest
Cryptographically anchor all 10 artifacts defining an AI agent at deployment.
The Agent Manifest SDK implements the Agent Manifest Specification v0.1 — a hardware-attestable document that binds every artifact defining an agent's behavior (system prompt, policy bundle, tool schemas, model identity, RAG corpus, memory state, audit chain, delegation chain, supply chain, and human approvals) into a single tamper-evident identity primitive.
pip install agent-manifest
Why
A signed JWT proves who called an API. An Agent Manifest proves who the agent was, what it was allowed to do, how it was built, what it decided, who approved it, and whether any of that changed between approval and execution.
from agent_manifest import (
Manifest, ArtifactBindings,
SystemPromptBinding, PolicyBundleBinding, ModelIdentityBinding,
CryptoProfile, DeploymentType, EnforcementMode, PolicyLanguage,
generate_ed25519, Ed25519Signer,
)
from agent_manifest._types import HashValue, ManifestId
from datetime import datetime, timedelta, timezone
now = datetime.now(timezone.utc)
manifest = Manifest(
manifest_id=ManifestId("018f4a3b-2c1d-7e5f-a8b9-0d1e2f3a4b5c"),
agent_id="spiffe://trust.example/agent/kyc/prod",
issued_at=now,
expires_at=now + timedelta(days=90),
issuer="spiffe://trust.example/signing-authority",
crypto_profile=CryptoProfile.standard,
artifacts=ArtifactBindings(
system_prompt=SystemPromptBinding(
hash=HashValue("sha256:" + "a" * 64),
bound_at=now,
),
policy_bundle=PolicyBundleBinding(
hash=HashValue("sha256:" + "b" * 64),
policy_language=PolicyLanguage.cedar,
version="1.0.0",
enforcement_mode=EnforcementMode.enforce,
bound_at=now,
),
model_identity=ModelIdentityBinding(
provider="anthropic",
model_id="claude-sonnet-4-6",
version="20251001",
deployment_type=DeploymentType.api,
bound_at=now,
),
),
)
keypair = generate_ed25519()
signer = Ed25519Signer(keypair)
sig_block = signer.sign(manifest.model_dump(mode="json", by_alias=True))
print(sig_block["algorithm"]) # Ed25519
print(sig_block["key_id"]) # sha256:<hex>
The 10 Attested Artifacts
| # | Artifact | What it proves |
|---|---|---|
| 1 | System Prompt | The exact prompt that defines the agent's persona and safety constraints |
| 2 | Policy Bundle | The Cedar/Rego/YAML governance rules that were in force |
| 3 | Tool Manifest | Every tool schema and description the agent was authorized to call |
| 4 | Model Identity | Which model and version ran (binary hash for local, version for API) |
| 5 | RAG Corpus | The knowledge base the agent was grounded on (Merkle root) |
| 6 | Memory Baseline | Approved agent memory state with TTL-based re-approval |
| 7 | Decision Trace | Hardware-signed audit chain root for all agent decisions |
| 8 | A2A Delegation | Signed delegation chain from human principal to current agent |
| 9 | Supply Chain | Container digest, SLSA provenance, SBOM, MCP server supply chain |
| 10 | HITL Approvals | Hardware-signed human oversight records (EU AI Act Art. 14) |
Hardware Attestation
from agent_manifest._auto_provider import select_provider
# auto-selects: OPAQUE → SEV-SNP → TDX → TPM → Software
provider = select_provider(level=1) # Level 1+ requires hardware
provider.extend_manifest_hash(manifest_dict)
report = provider.get_attestation_report()
# report.platform: "amd-sev-snp" | "intel-tdx" | "tpm" | "opaque"
| Provider | Hardware | Level | Install |
|---|---|---|---|
TPMProvider |
TPM 2.0 / AWS Nitro | 1 | apt install tpm2-tools |
SEVSNPProvider |
AMD SEV-SNP | 2 | Needs /dev/sev-guest |
TDXProvider |
Intel TDX | 2 | Needs /dev/tdx-guest |
OPAQUEProvider |
Opaque Runtime | 3 | Set OPAQUE_ATTESTATION_URL |
Verification
from agent_manifest._verify import verify_manifest, VerificationContext, RevocationStore
result = verify_manifest(
manifest_dict,
VerificationContext(
system_prompt_hash="sha256:...",
policy_bundle_hash="sha256:...",
enforce_hitl=True,
),
RevocationStore(),
)
print(result.result) # VALID | MISMATCH | EXPIRED | REVOKED | ...
CLI
pip install "agent-manifest[cli]"
manifest keygen -d ./keys/
manifest create config.json -o draft.json
manifest sign draft.json --key keys/private.hex -o signed.json
manifest attest signed.json --provider auto --level 1 -o attested.json
manifest verify attested.json
manifest revoke <manifest-id> --reason "key compromise" --revoked-by security@example.com
Cryptography
- Standard profile: Ed25519 (RFC 8032), SHA-256, RFC 8785 canonical JSON
- Post-quantum profile: ML-DSA-65 (NIST FIPS 204), SHAKE-256 —
pip install "agent-manifest[pq]" - Hybrid: Both signatures required, identical pre-image
- Transparency: Rekor/Sigstore integration for non-repudiation
Specification
The full Agent Manifest Specification v0.1 is at spec/agent-manifest-spec-v0.1.md.
Being submitted to the Agentic AI Foundation (AAIF) under the Linux Foundation alongside AGT.
License
Apache 2.0
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 agent_manifest-0.1.0a1.tar.gz.
File metadata
- Download URL: agent_manifest-0.1.0a1.tar.gz
- Upload date:
- Size: 51.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
981456f8c97a705bf2e502691a7c6401a5f4779f32a3cd24c4494b8047a49e1b
|
|
| MD5 |
804abfc72e7b77b111a9cd2dbaa95d16
|
|
| BLAKE2b-256 |
fe5502f4323e6d3a87ab0134f2a63434198d8849d8d962155c3a0427513433af
|
Provenance
The following attestation bundles were made for agent_manifest-0.1.0a1.tar.gz:
Publisher:
publish.yml on agentrust-io/agent-manifest
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent_manifest-0.1.0a1.tar.gz -
Subject digest:
981456f8c97a705bf2e502691a7c6401a5f4779f32a3cd24c4494b8047a49e1b - Sigstore transparency entry: 1723088850
- Sigstore integration time:
-
Permalink:
agentrust-io/agent-manifest@e96910b7707fcb3a5625223316d56128da1f827d -
Branch / Tag:
refs/tags/python-v0.1.0a1 - Owner: https://github.com/agentrust-io
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e96910b7707fcb3a5625223316d56128da1f827d -
Trigger Event:
push
-
Statement type:
File details
Details for the file agent_manifest-0.1.0a1-py3-none-any.whl.
File metadata
- Download URL: agent_manifest-0.1.0a1-py3-none-any.whl
- Upload date:
- Size: 40.3 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 |
8c2c10dc3a7588cceeef61d736ea2b7456fd4d49c0d4969005f100355f161881
|
|
| MD5 |
c0b3a19e2ee1acc0eada86d38b37b1b8
|
|
| BLAKE2b-256 |
4d6b40b5d9e6c4605d663520a2e15e2c1b648209f61356851b9de2d4476c9409
|
Provenance
The following attestation bundles were made for agent_manifest-0.1.0a1-py3-none-any.whl:
Publisher:
publish.yml on agentrust-io/agent-manifest
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent_manifest-0.1.0a1-py3-none-any.whl -
Subject digest:
8c2c10dc3a7588cceeef61d736ea2b7456fd4d49c0d4969005f100355f161881 - Sigstore transparency entry: 1723089119
- Sigstore integration time:
-
Permalink:
agentrust-io/agent-manifest@e96910b7707fcb3a5625223316d56128da1f827d -
Branch / Tag:
refs/tags/python-v0.1.0a1 - Owner: https://github.com/agentrust-io
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e96910b7707fcb3a5625223316d56128da1f827d -
Trigger Event:
push
-
Statement type: