Skip to content

CLI reference

The manifest command is installed with the cli extra.

pip install "agent-manifest[cli]"

Every command is invoked directly: manifest verify signed.json. Releases up to 0.5.0 nested them under a second manifest group; that spelling still works and prints a deprecation warning.

Commands

manifest create

Create a draft manifest from a JSON config file.

Usage: manifest create [OPTIONS] CONFIG

  Create a draft manifest from a JSON config file.

  CONFIG must be a JSON file with at minimum: agent_id, issuer, issued_at, expires_at,
  and an artifacts block.

  Example:
    manifest create config.json -o draft.json

Options:
  -o, --output TEXT  Write output to file (default: stdout)
  --help             Show this message and exit.

manifest sign

Sign a draft manifest with Ed25519.

Usage: manifest sign [OPTIONS] MANIFEST_FILE

  Sign a draft manifest with Ed25519.

  KEY must be a file containing the 64-hex-character (32-byte) Ed25519 private key seed.

  Example:
    manifest sign draft.json --key private.hex -o signed.json

Options:
  -k, --key TEXT     Path to raw 32-byte Ed25519 private key (hex file)  [required]
  -o, --output TEXT  Write output to file (default: stdout)
  --help             Show this message and exit.

manifest keygen

Generate a new Ed25519 key pair for manifest signing.

Usage: manifest keygen [OPTIONS]

  Generate a new Ed25519 key pair for manifest signing.

  Writes:
    private.hex - 64-hex private key seed (keep secret, mode 0600)
    public.hex  - 64-hex public key bytes

  Refuses to overwrite an existing private.hex -- delete it first if you really want to
  replace it.

  Example:
    manifest keygen -d ./keys/

Options:
  -d, --output-dir TEXT  Directory to write key files
  --help                 Show this message and exit.

manifest attest

Extend the manifest hash into hardware and append the attestation block.

Usage: manifest attest [OPTIONS] MANIFEST_FILE

  Extend the manifest hash into hardware and append the attestation block.

  For TPM: requires tpm2-tools (apt-get install tpm2-tools). For swtpm in CI: set
  TPM2TOOLS_TCTI=swtpm: before running.

  Example:
    manifest attest signed.json --provider tpm --level 1 -o attested.json

Options:
  -p, --provider [auto|azure-cvm|tpm|sev-snp|tdx|opaque|software]
                                  Attestation provider (default: auto)
  --level INTEGER                 Minimum conformance level (0-3)
  -o, --output TEXT               Write output to file (default: stdout)
  --help                          Show this message and exit.

manifest verify

Verify a manifest against the local verification engine.

Usage: manifest verify [OPTIONS] MANIFEST_FILE

  Verify a manifest against the local verification engine.

  Prints the VerificationResult as JSON. Exits with code 0 on VALID, 1 on any other
  result.

  Use --crl-path to load a revocation list and check for revoked manifests. Pass --crl-
  trusted-key with it to authenticate each record present in the CRL against the
  revoking authority's public key (spec Section 3.7 / REVOC-003): a record with a
  missing, malformed, or invalid signature causes verification to fail closed with an
  error, rather than being silently treated as "not revoked".

  --crl-trusted-key does NOT prove the CRL file is complete. Per-record signatures
  authenticate the records that are present but cannot detect that a line — or the
  entire file — was deleted. A party who can write or intercept the CRL file can still
  suppress a real revocation by removing its record entirely; only a signed, versioned
  CRL snapshot (not yet implemented) can close that gap. Without --crl-trusted-key at
  all, every line in the CRL file is additionally trusted unauthenticated: a party who
  can write or intercept that file can also fabricate a revocation for a legitimate
  manifest.

  HITL approvals attach outside the manifest signature, so supply the
  approver keys you trust with --approver-key. Without them an approval is
  UNVERIFIABLE and the manifest can never verify.

  Example:
    manifest verify attested.json --crl-path revocations.jsonl
    manifest verify signed.json --public-key pub.hex --enforce-hitl
      --approver-key mailto:[email protected]=alice.hex

Options:
  --enforce-hitl                  Fail unless a required HITL approval is present and
                                  unexpired
  --enforce-attestation           Fail unless the attestation report matches the
                                  manifest hash
  --crl-path TEXT                 Path to a FileCRL JSON-Lines file for revocation
                                  checks
  --crl-trusted-key TEXT          Path to the CRL-signing authority's raw Ed25519 public
                                  key hex file. Required to cryptographically verify
                                  --crl-path records (REVOC-003); without it every
                                  record in the file is trusted unauthenticated. See the
                                  command description above for the completeness caveat.
  --public-key TEXT               Path to a trusted raw Ed25519 public key hex file
  --approver-key APPROVER_ID=PATH
                                  Trusted HITL approver key as approver_id=path to a raw
                                  Ed25519 public key hex file (repeatable)
  --require-transparency          Fail unless transparency evidence was independently
                                  verified
  --verified-transparency-entry-id TEXT
                                  Legacy entry UUID independently verified for this
                                  manifest (repeatable)
  --verified-transparency-receipt-hash TEXT
                                  SHA-256 hex of a raw COSE receipt independently
                                  verified for this manifest (repeatable)
  --transparency-evidence-manifest-id TEXT
                                  Manifest ID to which the independent transparency
                                  appraisal was bound
  --signature-only                Authenticate only the manifest signature; explicitly
                                  allow bound runtime artifacts to remain unchecked
  -o, --output TEXT               Write output to file (default: stdout)
  --help                          Show this message and exit.

manifest revoke

Generate a revocation record for a manifest ID.

Usage: manifest revoke [OPTIONS] MANIFEST_ID

  Generate a revocation record for a manifest ID.

  The record JSON can be submitted to your revocation registry or passed to a
  RevocationStore instance in the verification endpoint.

  Example:
    manifest revoke 018f4a3b-... --reason "key compromise" --revoked-by [email protected]

Options:
  -r, --reason TEXT  Reason for revocation  [required]
  --revoked-by TEXT  Identity of revoking authority (DID or email)  [required]
  -o, --output TEXT  Write output to file (default: stdout)
  --help             Show this message and exit.

manifest from-plugin

Read an Agent Plugins 1.0.0 bundle and report what it can bind.

Usage: manifest from-plugin [OPTIONS] BUNDLE_DIR

  Read an Agent Plugins 1.0.0 bundle and report what it can bind.

  Emits the whole-bundle digest, the skills found, and the MCP servers the bundle
  declares. It does not emit a tool manifest: mcp.json declares which servers to start
  and never enumerates their tools, so the per-tool schema and description hashes a tool
  manifest binds are not in a bundle to be read. Resolving those means starting the
  servers and asking them.

  Example:   manifest from-plugin ./my-plugin

Options:
  -o, --output TEXT  Write output to file (default: stdout)
  --help             Show this message and exit.

Source

cli

Agent Manifest CLI — issue #15.

Commands

manifest create Build a draft manifest from a config file manifest sign Sign a draft manifest with Ed25519 (or hybrid) manifest attest Extend manifest hash into hardware + append attestation block manifest verify Call the verification endpoint and print the result manifest revoke Publish a revocation record

All commands write JSON to stdout and accept --output/-o to write to a file.

cli

cli() -> None

Agent Manifest SDK CLI.

create

create(config: str, output: Optional[str]) -> None

Create a draft manifest from a JSON config file.

CONFIG must be a JSON file with at minimum: agent_id, issuer, issued_at, expires_at, and an artifacts block.

 Example: manifest create config.json -o draft.json

sign

sign(manifest_file: str, key: str, output: Optional[str]) -> None

Sign a draft manifest with Ed25519.

KEY must be a file containing the 64-hex-character (32-byte) Ed25519 private key seed.

 Example: manifest sign draft.json --key private.hex -o signed.json

keygen

keygen(output_dir: str) -> None

Generate a new Ed25519 key pair for manifest signing.

 Writes: private.hex - 64-hex private key seed (keep secret, mode 0600) public.hex - 64-hex public key bytes

Refuses to overwrite an existing private.hex -- delete it first if you really want to replace it.

 Example: manifest keygen -d ./keys/

attest

attest(manifest_file: str, provider: str, level: int, output: Optional[str]) -> None

Extend the manifest hash into hardware and append the attestation block.

For TPM: requires tpm2-tools (apt-get install tpm2-tools). For swtpm in CI: set TPM2TOOLS_TCTI=swtpm: before running.

 Example: manifest attest signed.json --provider tpm --level 1 -o attested.json

verify

verify(manifest_file: str, enforce_hitl: bool, enforce_attestation: bool, crl_path: Optional[str], crl_trusted_key: Optional[str], public_key: Optional[str], approver_key: tuple[str, ...], require_transparency: bool, verified_transparency_entry_id: tuple[str, ...], verified_transparency_receipt_hash: tuple[str, ...], transparency_evidence_manifest_id: Optional[str], signature_only: bool, output: Optional[str]) -> None

Verify a manifest against the local verification engine.

Prints the VerificationResult as JSON. Exits with code 0 on VALID, 1 on any other result.

Use --crl-path to load a revocation list and check for revoked manifests. Pass --crl-trusted-key with it to authenticate each record present in the CRL against the revoking authority's public key (spec Section 3.7 / REVOC-003): a record with a missing, malformed, or invalid signature causes verification to fail closed with an error, rather than being silently treated as "not revoked".

--crl-trusted-key does NOT prove the CRL file is complete. Per-record signatures authenticate the records that are present but cannot detect that a line — or the entire file — was deleted. A party who can write or intercept the CRL file can still suppress a real revocation by removing its record entirely; only a signed, versioned CRL snapshot (not yet implemented) can close that gap. Without --crl-trusted-key at all, every line in the CRL file is additionally trusted unauthenticated: a party who can write or intercept that file can also fabricate a revocation for a legitimate manifest.

 HITL approvals attach outside the manifest signature, so supply the approver keys you trust with --approver-key. Without them an approval is UNVERIFIABLE and the manifest can never verify.

 Example: manifest verify attested.json --crl-path revocations.jsonl manifest verify signed.json --public-key pub.hex --enforce-hitl --approver-key mailto:[email protected]=alice.hex

revoke

revoke(manifest_id: str, reason: str, revoked_by: str, output: Optional[str]) -> None

Generate a revocation record for a manifest ID.

The record JSON can be submitted to your revocation registry or passed to a RevocationStore instance in the verification endpoint.

 Example: manifest revoke 018f4a3b-... --reason "key compromise" --revoked-by [email protected]

from_plugin

from_plugin(bundle_dir: str, output: Optional[str]) -> None

Read an Agent Plugins 1.0.0 bundle and report what it can bind.

Emits the whole-bundle digest, the skills found, and the MCP servers the bundle declares. It does not emit a tool manifest: mcp.json declares which servers to start and never enumerates their tools, so the per-tool schema and description hashes a tool manifest binds are not in a bundle to be read. Resolving those means starting the servers and asking them.

Example

manifest from-plugin ./my-plugin

manifest_alias

manifest_alias() -> None

Deprecated: every command is available at the top level.

Releases up to 0.5.0 nested the commands under a redundant manifest group, so the real invocation was manifest manifest verify while every document said manifest verify. The documented form is now the real one. This alias keeps the old spelling working for existing scripts.