Documentation

SDK parity matrix

Honest capability map across the six SDK languages. Python and TypeScript are the deep integrations; Go, Rust, Java and .NET ship the core tracing client and inherit everything server-side (governance, XAI, control plane) through it. All SDKs build from packages/ in the repo — registry publishing (PyPI/npm/crates/Maven/NuGet) is tracked for launch.

CapabilityPythonTypeScriptGoRustJava.NET
HTTP span ingest client (batch + flush)
Span/context helper (WithSpan / traceable())
LangGraph one-call helper (run_langgraph)
LangChain callback handler✅ (embedded)¹
OpenAI client wrapper—²wrapOpenAIOpenAIHTTPClient³wrap_openai_chat
Anthropic client wrapper—²wrapAnthropicAnthropicHTTPClient³wrap_anthropic
Pause / resume hookspause_checkpointpausePausepause
Pause-guard library (budget/latency/constitutional/approval)pause_guards
Local runner daemon (audittrail daemon …)
Agent scaffold (scaffold())
Gateway secrets CLI (audittrail secrets …)

¹ The Python LangChain handler is part of the in-process tracer — it flushes to the AuditTrail database directly, so it's for agents co-hosted with a self-hosted server. Remote Python LangChain apps use run_langgraph or the OTel path. Details: LangChain integration.

² Python OpenAI/Anthropic tracing goes through the gateway proxy (base-URL swap, zero code change) rather than a client wrapper.

³ The Go wrappers are http.RoundTrippers you install on the provider SDK's HTTP client — openai.NewClient(option.WithHTTPClient(audittrail.OpenAIHTTPClient(audit))). The span parents automatically off the trace context on the outgoing request, so nesting the call inside WithSpan needs no extra plumbing. See OpenAI / Anthropic.

⁴ The Rust wrappers are generic over any Serialize request/response pair (the SDK carries no provider-crate dependency), so they work with async-openai's create_byot or any typed client: client.wrap_openai_chat(&request, || async { /* call */ }).await.

⁵ The pause-guard library composes budget, latency, constitutional and human-approval guards over the pause API. Budget / latency read caller-supplied measurements (the SDK keeps no cost/token tally) and the constitutional guard takes a user predicate (there is no SDK-local governor) — honest by design. Python-only for now.

What "core client" gets you

Every language's client covers the full span contract — which means the whole server-side product works regardless of language:

  • register traces, start/end spans (streaming status updates included)
  • automatic batching with periodic flush + explicit Flush/Shutdown
  • trace-context propagation helpers for nesting spans correctly
  • constitutional rule evaluation, cost accounting, live dashboard, alerts, compliance and the XAI pipeline all happen server-side on the ingested spans — no client feature required

The language-free alternatives

Two integrations need no SDK at all, in any language:

Closing the gaps

Go and Rust gained OpenAI/Anthropic wrappers + pause hooks in v3.34.0. The Python pause-guard library (budget / latency / constitutional / human-approval guards over the pause API) landed in v3.35.0 — Python-only for now. Java and .NET remain core-client-only; those wrapper/pause gaps are tracked roadmap items — the matrix updates as they ship rather than in advance.