Skip to content

Integrations

Agent-manifest is framework-agnostic - it is a signing and verification layer, not an agent runtime. These guides show how to attach it to the most common Python agent frameworks.

Integration What it covers
LangChain Manifest for a LangChain agent; tool wrapper that verifies caller manifests
OpenAI Agents SDK Manifest per agent; manifest handoff verification during agent handoffs
AutoGen and CrewAI Per-agent manifests in AutoGen conversations and CrewAI crews
AGT (Agent Governance Toolkit) Using agent-manifest as the identity layer feeding AGT policy and trust scores
NVIDIA OpenShell Binding the approved OpenShell, ACS, workload, and tool configuration to runtime TRACE evidence
Agent Credentials Joining a credential decision to the exact manifest and signed runtime evidence
Standards landscape How Agent Manifest connects to Agent Card, registration, credentials, BOM, provenance, attestation, and runtime evidence

Common pattern

Issue a manifest, attach its identifier or complete signed envelope, and verify it before allowing the protected operation. An identifier in a header, callback, or trace is correlation metadata; the recipient still needs the actual signed object, independently approved keys and runtime inputs, and current revocation state.

Run a local verification gate

Complete the first-manifest example, append this block to first_manifest.py, and run it again. It tests a framework-independent boundary with synthetic inputs; it does not call a model or install a framework adapter.

from agent_manifest import OverallResult

def require_manifest(received, approved_context, revocations):
    result = verify_manifest(received, approved_context, revocations)
    if result.result != OverallResult.VALID:
        raise PermissionError(f"Manifest rejected: {result.result.value}")
    return result

require_manifest(record, context, RevocationStore())
print("PASS: approved manifest accepted by the gate")
for rejected_context in (
    context.model_copy(update={"trusted_keys": {}}),
    context.model_copy(update={"system_prompt_hash": "sha256:" + "0" * 64}),
):
    try:
        require_manifest(record, rejected_context, RevocationStore())
    except PermissionError:
        pass
    else:
        raise RuntimeError("Gate accepted missing trust or changed runtime input")
print("PASS: missing trust and changed runtime input blocked")

Obtain approved_context and revocation state through the recipient's own configuration and evidence collection. Never let a caller submit its own expected hashes or trusted-key map as authorization. A VALID result applies to the declared bindings and supplied checks; the application separately authorizes the requested operation and delegation scope.

Place this gate before tool, handoff, or service side effects. Recheck when the relevant state changes; attaching a manifest once at startup does not enforce later drift, revocation, or caller permissions. The framework pages identify where to connect this boundary and link to current framework APIs.