Adapter model · framework-neutral

Convert agent traces into signed evidence.

Three frameworks, one evidence bundle. Adapters are pure deterministic functions that translate a framework-specific run trace into the same signed evidence bundle format the Agentic Choir ingest endpoint already accepts. They do not call models, do not talk to the network, and do not change Choir Receipt semantics. An adapter is a translator, not an authority.

Available adapters

Available adapters

openai.responses.v1

OpenAI Responses adapter

Maps an OpenAI Responses output array conservatively. Function, tool, file_search, web_search, computer and code_interpreter calls become tool_call events. Refusal content becomes a warning. file_citation and url_citation annotations become evidence_cited. Reasoning items are ignored by design. output_text without citations is not an event — a message body alone is not an incident.

langgraph.stream.v1

LangGraph adapter

A pure deterministic mapper over JSON-shaped LangGraph stream/update output. No runtime dependency on langchain or langgraph. Tool-call-like node outputs become tool_call. Safety/guardrail nodes with flagged or blocked output become warning. Retrieval/evidence nodes with documents, citations or sources become one evidence_cited per item (capped). Explicit escalation/handoff/interrupt nodes become escalation. Reviewer/critic nodes with disagree, objection or rejected become dissent. Plain message text alone is not an incident.

crewai.kickoff.v1

CrewAI adapter

A pure deterministic mapper over JSON-shaped CrewAI kickoff results, task outputs, event-listener events, and tracing records. No runtime dependency on crewai. Tool-call records become tool_call. Delegation, handoff and manager-allocation records — including the "Delegate work to coworker" tool — become escalation, not tool_call. Task outputs carrying citations/sources/knowledge/references become one evidence_cited per item. Safety/guardrail/refusal/blocked/unsafe/policy records become warning. Critic/reviewer records with objection, disagreement or rejection become dissent; an approved reviewer is not dissent. A plain final-answer string is never an incident. Ambiguous shapes become adapter_warnings, never fabricated events.

openai.assistants.legacy (deprecated)

Legacy Assistants run-steps mapper

Included as an isolated migration helper only. New integrations should use the Responses adapter. The legacy mapper produces the same bundle format but is labelled deprecated in code and docs because the underlying Assistants run-steps surface is itself deprecated upstream.

Pipeline

Conversion → signing → verified receipt

  1. 01   Run your agent system and capture the trace JSON.
  2. 02   Call the matching adapter to produce an ObservedEvidenceBundle.
  3. 03   Optionally mergeBundles(...) across nodes or run segments.
  4. 04   Canonicalise, then HMAC-SHA256 with the Score's signing secret.
  5. 05   POST to /api/public/evidence/$ingest with the three Agentic Choir headers.
  6. 06   The next Choir Receipt that includes the bundle is labelled Verified Observed Choir Receipt.
What adapters infer

What adapters infer

Concrete trace structure: a tool was called, a guardrail node fired with a refusal flag, a retrieval node returned N documents, an escalation/handoff node ran, a reviewer node recorded an objection. Anything an adapter cannot confidently map becomes an adapter_warning the caller can review — nothing is silently dropped, nothing is invented.

What adapters refuse to infer

What adapters refuse to infer

The following findings are not inferred from trace prose. They remain engine findings, derived structurally from the Score or from explicit events the caller already attests to:

What signed evidence proves. A valid signature proves payload integrity at submission time and possession of the Score's signing secret. It does not independently prove that the underlying agent run occurred exactly as described, that the agents are safe, or anything about the model weights. Signed evidence is a verified-payload-integrity layer — not independent ground truth.