Evidence over claims.

Adapter Guides

14 built-in adapters with versioned capability declarations, explicit lossiness, and signed proof of what is effective for this agent now.

The key insight An adapter name is not a compatibility claim. AMC separates declared support, current signed configuration, detected runtime/version, effective events and controls, and known blind spots in one portable receipt.

How Adapters Work

1

Lease minted

A short-lived, scoped lease token is automatically created for the session.

2

Env vars injected

Compatibility environment variables are set (base URL + lease token) so your agent routes through AMC.

3

Traffic proxied

All model traffic flows through the AMC gateway, which signs and logs every interaction.

4

Evidence captured

The base path records process start, redacted stdout/stderr, and exit. Model events require verified gateway routing. Provider-native action events and decisions require a verified hook mode.

5

Tokens redacted

Lease tokens are automatically redacted from logs — no credential leakage.

Quick Setup

# Initialize adapter configuration
amc adapters init

# See available adapters
amc adapters list

# Detect which adapter runtimes are installed
amc adapters detect

# Prove what is declared and effective for one agent
amc adapters capabilities --agent my-agent --adapter generic-cli --json

Signed Capability Receipts

amc.adapter-capability-receipt.v1 binds the authoritative registry declaration to the adapter definition version, runtime/version probe, signed per-agent adapter selection, provider-hook state, effective event/control projection, known lossiness, verification result, SHA-256 receipt hash, and auditor signature.

amc adapters capabilities \
  --agent my-agent \
  --adapter claude-cli \
  --out adapter-capabilities.json \
  --json
Honest by construction verified means AMC-owned declaration evidence and the inspected proof inputs are valid for this subject. partial records a host/shell-only version probe or an absent/observe-only optional hook. fail_closed records missing runtime/version, invalid signed config, unverified or publisher-only plugin metadata, or hook drift. Plugins cannot self-certify; partner certification remains a separate lane. A valid partial receipt is proof of a limitation, not a green badge.

The receipt never includes prompts, tool arguments, model/tool output, stdout/stderr content, cwd, transcript paths, raw session identifiers, lease tokens, or secrets. The same contract is available from POST /api/v1/adapters/capability-receipts.


LangChain

Python / Node.js   Adapters: langchain-python, langchain-node

Install

pip install langchain langchain-openai

Configure & Run

# Set your agent's adapter
amc adapters configure --agent my-langchain --adapter langchain-python --route /openai --model gpt-4o --mode SUPERVISE

# Run with evidence capture
amc adapters run --agent my-langchain --adapter langchain-python -- python my_chain.py

AMC injects OPENAI_API_BASE to route LangChain's OpenAI calls through the gateway. Works with any LangChain chain, agent, or tool.

LangGraph

Python   Adapter: langgraph-python

Install

pip install langgraph langchain-openai

Configure & Run

amc adapters configure --agent my-graph --adapter langgraph-python --route /openai --model gpt-4o --mode SUPERVISE
amc adapters run --agent my-graph --adapter langgraph-python -- python my_graph.py

Captures state transitions, node executions, and tool calls across the graph. Same routing mechanism as LangChain — all OpenAI-compatible calls go through AMC.

CrewAI

Python   Adapter: crewai-cli

Install

pip install crewai

Configure & Run

amc adapters configure --agent my-crew --adapter crewai-cli --route /openai --model gpt-4o --mode SUPERVISE
amc adapters run --agent my-crew --adapter crewai-cli -- python my_crew.py

Captures multi-agent crew interactions, task delegation patterns, and tool usage across all crew members.

AutoGen

Python   Adapter: autogen-cli

Install

pip install pyautogen

Configure & Run

amc adapters configure --agent my-autogen --adapter autogen-cli --route /openai --model gpt-4o --mode SUPERVISE
amc adapters run --agent my-autogen --adapter autogen-cli -- python my_autogen.py

Works with AutoGen's multi-agent conversations, code execution, and group chat patterns.

OpenAI Agents SDK

Node.js sample   Adapter: openai-agents-sdk

Install

pip install openai-agents  # Python
npm install openai         # Node.js

Configure & Run

amc adapters configure --agent my-oai --adapter openai-agents-sdk --route /openai --model gpt-4o --mode SUPERVISE
amc adapters run --agent my-oai --adapter openai-agents-sdk -- node my_agent.mjs

Routes OpenAI Agents SDK calls through the AMC gateway. Captures function calling, tool outputs, and structured responses.

LlamaIndex

Python   Adapter: llamaindex-python

Install

pip install llama-index

Configure & Run

amc adapters configure --agent my-llama --adapter llamaindex-python --route /openai --model gpt-4o --mode SUPERVISE
amc adapters run --agent my-llama --adapter llamaindex-python -- python my_index.py

Captures query engine interactions, retrieval calls, and response synthesis from LlamaIndex agents and query pipelines.

Semantic Kernel

Node.js sample   Adapter: semantic-kernel

Install

dotnet add package Microsoft.SemanticKernel  # C#
pip install semantic-kernel                    # Python

Configure & Run

amc adapters configure --agent my-sk --adapter semantic-kernel --route /openai --model gpt-4o --mode SUPERVISE
amc adapters run --agent my-sk --adapter semantic-kernel -- node my-agent.mjs

Routes Semantic Kernel's OpenAI/Azure OpenAI calls through the gateway. Works with plugins, planners, and memory.

Claude Code

CLI   Adapter: claude-cli

Install

npm install -g @anthropic-ai/claude-code

Configure & Run

amc adapters configure --agent my-claude --adapter claude-cli --route /anthropic --model claude-sonnet-4-6

# Run with evidence capture
amc adapters run --agent my-claude --adapter claude-cli -- claude --model claude-sonnet-4-6

Gateway model events are conditional on the signed route. Provider-native tool requests and allow/deny/ask/corrective-steer outcomes require a verified control hook. Steer blocks the current call, returns bounded correction, performs no input rewrite, and requires a new fully governed action for retry. Check the signed capability receipt instead of inferring coverage.

Or use the quick wrap command:

amc wrap claude -- claude "analyze this codebase"

Gemini

CLI   Adapter: gemini-cli

Install

npm install -g @google/gemini-cli

Configure & Run

amc adapters configure --agent my-gemini --adapter gemini-cli --route /gemini --model gemini-flash --mode SUPERVISE
amc adapters run --agent my-gemini --adapter gemini-cli -- gemini --model gemini-flash

Gateway model events are conditional on the signed route. Provider-native pre-tool observation and allow/deny require a verified hook. Gemini has no verified native ask or corrective-steer result in the pinned contract, so AMC records the loss, denies either request, and never reports effective steer. Or wrap directly:

amc wrap gemini -- gemini chat

OpenClaw

CLI   Adapter: openclaw-cli

Configure & Run

amc adapters run --agent my-openclaw --adapter openclaw-cli -- openclaw run

Or configure OpenClaw to route all sessions through the AMC gateway permanently for continuous evidence capture.

OpenHands

CLI   Adapter: openhands-cli

Configure & Run

amc adapters configure --agent my-openhands --adapter openhands-cli --route /openai --model gpt-4o --mode SUPERVISE
amc adapters run --agent my-openhands --adapter openhands-cli -- openhands

The base adapter path records process evidence and conditionally routed model traffic. It does not claim provider-native file/tool lifecycle coverage.

Python AMC SDK

Python   Adapter: python-amc-sdk

Install

pip install agent-maturity-compass

Programmatic Integration

from amc import wrap_fetch, log_trace

# Option 1: Wrap fetch for automatic capture
fetch = wrap_fetch(original_fetch, {
    "agent_id": "my-agent",
    "gateway_base_url": "http://localhost:3210/openai",
})

# Option 2: Manual trace logging
log_trace({
    "agent_id": "my-agent",
    "type": "tool_call",
    "data": {"tool": "read_file"}
})

Generic CLI Agent

Any Language   Adapter: generic-cli

Works with any command-line agent in any language:

# Node.js agent
amc adapters run --agent my-bot --adapter generic-cli -- node my-agent.js

# Python agent
amc adapters run --agent my-bot --adapter generic-cli -- python bot.py

# Custom binary
amc adapters run --agent my-bot --adapter generic-cli -- ./my-custom-agent

# Or use wrap for quick capture
amc wrap any -- python bot.py

OpenAI-Compatible API

Any   Adapter: generic-cli routed through /openai

For any agent that talks to an OpenAI-compatible API endpoint (vLLM, Ollama, Azure OpenAI, Together AI, etc.):

amc adapters configure --agent my-agent --adapter generic-cli --route /openai --model local-model --mode SUPERVISE
amc adapters run --agent my-agent --adapter generic-cli -- python my_agent.py

AMC injects the appropriate base URL environment variable so your agent's API calls route through the gateway.


Provider-Neutral Action Hooks

For Claude Code or Gemini CLI, install a project-local observer without hand-editing provider configuration:

# Preview exact files, then install
amc connect hooks install --provider claude-code --agent my-agent --dry-run
amc connect hooks install --provider claude-code --agent my-agent

# Verify or remove it
amc connect hooks status --provider claude-code
amc connect hooks health --provider claude-code
amc connect hooks lifecycle --agent my-agent --action <action-id>
amc connect hooks remove --provider claude-code

# Gemini CLI uses the same lifecycle
amc connect hooks install --provider gemini-cli --agent my-agent
Reversible and privacy-minimal AMC preserves unrelated provider settings, signs the exact requested, completed, and failed handler set, keeps its dedicated hook:observe lease out of provider config with mode 0600, and removes only its own handlers and ignore block. Hook health separates an intact installation awaiting its first event from the latest receipt-verified event and fail-closed drift, expiry, malformed metadata, tamper, or unavailable encrypted evidence. A locked Vault requires amc vault unlock or AMC_VAULT_PASSPHRASE in non-interactive use. Last-observed time is historical context, not a current-liveness claim. The lifecycle view verifies immutable receipts under one stable action ID; missing, ambiguous, conflicting, cross-agent, out-of-order, or tampered evidence must fail closed. Raw tool input, output, error messages, cwd, transcript paths, and session IDs are not retained. Observation does not allow, deny, or steer actions. In control mode, supported shell calls receive a compound-command blast-radius review across every bounded segment. Existing signed controls decide each step and the most restrictive outcome wins. Unsupported expansion, malformed syntax, or untrusted authority fails closed without partial policy output. The signed review records bounded canonical names, action classes, outcomes, reason codes, and counts; the raw command and argument values are not retained.

Opt-in signed control

With the local Studio/Bridge running, switch the same reversible installation to explicit control mode:

amc up
amc connect hooks install --provider claude-code --mode control --agent my-agent
Existing policy, exact receipt Control stays on the loopback interface, evaluates raw tool input in memory without retaining it, reuses signed ToolHub, Action Policy, Approval Policy, budget, freeze, maturity, and assurance gates, and binds the exact provider response to a signed receipt. Claude Code supports native allow, deny, and ask. Gemini CLI does not support ask, so AMC denies that outcome explicitly. Multi-user AMC quorum is never weakened to one provider-local prompt.

For a custom runtime that already emits a canonical action envelope, call the Bridge ingress directly:

# Mint a least-privilege observation lease
LEASE="$(amc lease issue --agent hook-agent --ttl 30m \
  --scopes hook:observe --routes /hooks --models '*' --rpm 60)"
EVENT_TIME="$(date -u +%Y-%m-%dT%H:%M:%SZ)"

curl -sS http://127.0.0.1:3212/bridge/hooks/aep/0.1/events \
  -H "authorization: Bearer $LEASE" \
  -H "content-type: application/json" \
  --data "{\"aep_version\":\"0.1\",\"id\":\"evt-amc-001\",\"type\":\"action.requested\",\"time\":\"${EVENT_TIME}\",\"agent\":{\"slug\":\"example-agent\"},\"action\":{\"type\":\"tool_call\",\"id\":\"action-amc-001\"},\"tool\":{\"type\":\"native\",\"name\":\"Shell\"}}"
Observed, not conformant AMC accepts four action events from an AMC-owned AEP 0.1 subset pinned to 2583cff9380f8f0a459d52c7112b6105c46496ed. Observation remains separate from the opt-in AMC-owned control route; neither is an AEP conformance claim. Codex, Cursor, OpenCode, and other providers are not advertised until their per-tool hook contracts are pinned and fixture-tested. Raw observation bodies are hashed and discarded; encrypted redacted projections and signed receipts appear in Watch.

SDK Integration (Node.js)

For programmatic control in Node.js, use wrapFetch:

import { wrapFetch } from "agent-maturity-compass";

const fetchWithAmc = wrapFetch(globalThis.fetch, {
  agentId: "my-openai-agent",
  gatewayBaseUrl: "http://localhost:3210/openai",
  forceBaseUrl: true,
});

// All OpenAI calls now flow through AMC
const response = await fetchWithAmc("https://api.openai.com/v1/chat/completions", {
  method: "POST",
  body: JSON.stringify({
    model: "gpt-4o",
    messages: [{ role: "user", content: "hello" }],
  }),
});

Evidence Types Captured

Evidence EventDescriptionTrust Tier
agent_process_startedAgent session initiated with adapter configOBSERVED
llm_requestFull LLM API request (model, tokens, messages)OBSERVED
llm_responseLLM response with token counts and latencyOBSERVED
tool_callTool/function call with argumentsOBSERVED
tool_resultTool execution resultOBSERVED
stdoutAgent standard outputOBSERVED
stderrAgent standard errorOBSERVED
agent_process_exitedAgent session ended with exit codeOBSERVED
Import existing evaluations Already have evaluation data? Import it: amc score evidence-ingest --format openai-evals