Universal Telemetry Adapters

Bring your own telemetry. Zero code rewrites.

No proprietary SDK wrappers or runtime monkey-patching. Built-in adapters ingest raw JSON traces from LangGraph, CrewAI, OpenAI Agents, OpenTelemetry, Langfuse, and LangSmith in under 2ms.

Zero SDK Lock-InAutomatic Schema FingerprintingSub-2ms Ingestion Latency
LangGraphCheckpointsOpenAI AgentsRun TreesCrewAICrewOutputOpenTelemetryOTel SpansLangfuse / SmithTracesPARALLEL NORMALIZERSub-2ms IngestionAuto-detects 5+ schemasDrops ephemeral UUIDsSorts dictionary keysLive Synchronous StreamCANONICAL DAG OUTPUTAgentTrace (v1.0)Unified Causal Graph Standard→ Deterministic Diff EngineTDI · Cycles · WEI · RSR · Blame
Architecture Guarantees

Zero ingestion friction. 100% deterministic parity.

AgentDiff eliminates telemetry lock-in. Regardless of how your agents execute or which framework you swap to next quarter, your CI quality gates remain rock-solid.

01 · Zero Rewrites

Keep Your Existing Telemetry Stack

No proprietary SDK wrappers, monkey-patching, or invasive decorators. Feed your existing raw telemetry dumps directly into CI without changing a single line of agent code.

Zero runtime latency overhead
02 · Schema Discovery

Automatic Format Sniffing

AgentDiff inspects incoming JSON structures, identifies unique telemetry fingerprint keys, and auto-selects the appropriate parser with sub-2ms execution latency.

Sub-2ms automatic schema resolution
03 · Parity Guarantee

Mathematical Metric Parity

Every trace resolves into the exact same canonical DAG contract. Trajectory Divergence (TDI), Wasted Effort, Loop Detection, and Recovery Ratios calculate with 100% mathematical parity.

Zero floating point or platform drift
Supported Ecosystems

Battle-tested on production trace formats.

Each built-in adapter is continuously verified with regression test suites against live framework dumps, ensuring schema fidelity across new framework releases.

Custom Runtime
~50 LOC Plugin Protocol
Build
LangGraph

LangGraph

Ingestion format: LangGraph State Snapshots
Direct State Ingestion
Zero OTel exporter overhead

Ingests native LangGraph checkpoint state dumps and node graphs. Automatically maps branch checkpoints and tool node executions into a linear causal DAG.

CLI Diff Command
agentdiff baseline.json cand.json --adapter langgraph
Python SDK Usage
from agentdiff import load_trace
trace = load_trace("checkpoint.json", adapter="langgraph")
Sub-2ms Execution Latency100% Deterministic DAG Parity
Developer Protocol & Extensibility

Build a custom adapter in ~50 lines of Python.

Running an in-house agent framework or proprietary telemetry pipeline? AgentDiff's modular plugin architecture lets you normalize custom execution schemas into canonical DAGs with a single Python class.

Stage 1 · Mapping

Subclass BaseAdapter

Implement the mandatory from_dict() classmethod to map proprietary telemetry keys into standardized TraceStep nodes.

Single mandatory abstractmethod
Stage 2 · Sniffing

Declare Format Sniffer

Add an optional detect(data) -> bool fingerprint to let the CLI and SDK automatically resolve your format without explicit flags.

Zero-config format discovery
Stage 3 · Discovery

Zero-Fork Registration

Register your package under the agentdiff.adapters entry-point. Discovered lazily by CLI runners with no core fork required.

Published as standalone PyPI packages
Production Plugin Blueprint

Clean separation between raw traces and graph comparison.

The comparison engine never needs to know whether an event originated from an HTTP span, JSON log, or database dump. Your adapter handles schema normalization once, and all 5 regression metrics run automatically.

Entry-Point Declaration in pyproject.toml:
[project.entry-points."agentdiff.adapters"]
acme_agent = "acme.telemetry:AcmeAdapter"
Sub-2ms Ingestion TimeZero Memory Copies
custom_adapter.py
from agentdiff.adapters.base import BaseAdapter from agentdiff.models.trace import AgentTrace, TraceStep class AcmeAgentAdapter(BaseAdapter): """Normalizes Acme internal agent execution telemetry into canonical DAGs.""" @classmethod def detect(cls, data: dict) -> bool: """Auto-sniffs Acme JSON dumps by signature keys.""" return "acme_run_id" in data and "execution_spans" in data @classmethod def from_dict(cls, data: dict) -> AgentTrace: """Transforms arbitrary internal spans into immutable TraceSteps.""" steps = [] for idx, span in enumerate(data.get("execution_spans", [])): steps.append( TraceStep( step_id=span["span_id"], parent_id=span.get("parent_span_id"), step_index=idx, step_type=span.get("type", "tool"), name=span["operation_name"], input_payload=span.get("inputs", {}), output_payload=span.get("outputs", {}), latency_ms=span.get("duration_ms", 0.0), ) ) return AgentTrace(steps=steps)
Start In Minutes

Ready to diff your telemetry with zero rewrites?

Pass existing LangGraph, CrewAI, OpenAI, or OTel traces directly into CI. Block regressions before merge.