Skip to main content

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>

Composition-only manifests

Repository scanners can bind the artifacts they know before a model or runtime session exists. Set profile="composition-only" and explicitly name every artifact not bound by the document in unbound_artifacts. The verifier returns INCOMPLETE, not VALID, so this narrower document cannot be mistaken for a Level 0 agent manifest. Both fields are signature-covered.

manifest = Manifest(
    # identity, validity, issuer, and crypto fields omitted here for brevity
    profile="composition-only",
    unbound_artifacts=[
        "tool_manifest", "model_identity", "rag_corpus", "memory_baseline",
        "decision_trace", "delegation_chain", "supply_chain", "hitl_record",
    ],
    artifacts=ArtifactBindings(
        system_prompt=system_prompt_binding,
        policy_bundle=policy_bundle_binding,
    ),
)

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-log baseline Audit-chain root at manifest issuance; runtime decisions remain separate linked evidence
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: SEV-SNP → TDX → TPM → software  (OPAQUE is explicit opt-in via OPAQUE_ATTESTATION_URL)
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" | "software"
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 --public-key keys/public.hex
manifest revoke <manifest-id> --reason "key compromise" --revoked-by security@example.com

Without --public-key the verifier has no trusted issuer key, so a signed manifest fails closed as UNVERIFIABLE and the command exits 1.

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.2 is at spec/agent-manifest-spec-v0.2.md.

Proposed for contribution to CoSAI Working Stream 4, an OASIS Open Project.

License

Apache 2.0

Download files

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

Source Distribution

agent_manifest-0.11.2.tar.gz (282.6 kB view details)

Uploaded Source

Built Distribution

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

agent_manifest-0.11.2-py3-none-any.whl (143.1 kB view details)

Uploaded Python 3

File details

Details for the file agent_manifest-0.11.2.tar.gz.

File metadata

  • Download URL: agent_manifest-0.11.2.tar.gz
  • Upload date:
  • Size: 282.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for agent_manifest-0.11.2.tar.gz
Algorithm Hash digest
SHA256 af623d53633d1f459292a1e98236b46dda6c021e55b302c55c9bac2c1bb6d32d
MD5 9a68e4afb7d71f468baa83962c966afb
BLAKE2b-256 76df6f8c99dea27b84679c7cd2d2e87463234985e3ed07de4a9b2d3ac657570f

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_manifest-0.11.2.tar.gz:

Publisher: publish.yml on agentrust-io/agent-manifest

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

File details

Details for the file agent_manifest-0.11.2-py3-none-any.whl.

File metadata

  • Download URL: agent_manifest-0.11.2-py3-none-any.whl
  • Upload date:
  • Size: 143.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for agent_manifest-0.11.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0c135d3e21d34b971b18f3708b01bcb2c812ad1bd8a8ef3de64beb9ba3eb74cb
MD5 39e2c7a3ff61da7ecaa50990065fb5d3
BLAKE2b-256 1f4f57a264be942900e1c9a6ffe5190692c7e05665a79f2d3fad16b1cbead297

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_manifest-0.11.2-py3-none-any.whl:

Publisher: publish.yml on agentrust-io/agent-manifest

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

Release history Release notifications | RSS feed

0.12.0

2 files

This release

0.11.2 This release

2 files

0.11.1

2 files

0.11.0

2 files

0.10.1

2 files

0.10.0

2 files

0.9.0

2 files

0.8.0

2 files

0.7.0

2 files

0.6.1

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page