Works with what you already run.
Two settings with OpenTelemetry, or a few lines of SDK for the most detail. Switch Runback off below and see what you'd lose.
# Any framework that emits OpenTelemetry GenAI spans: Python, Go, Java, Node
export OTEL_ EXPORTER_ OTLP_ TRACES_ ENDPOINT= "https: / / runback. dev/ api/ otel/ v1/ traces"
export OTEL_ EXPORTER_ OTLP_ TRACES_ HEADERS= "authorization= Bearer <RUNBACK_API_KEY>"
opentelemetry-instrument python your_agent.py
- tool
- send_email
- status
- error
Illustrative run. On this path a model step can be re-issued, not replayed.
What OpenTelemetry records, and what it can't do
- Code changesNoneYour framework's own instrumentation sends the spans; no Runback package.
- ContextWhat's exportedMessages, system prompt and tool definitions when the instrumentor exports them (GenAI, OpenLLMetry, OpenInference).
- RedactionOn arrivalRedacted by Runback when the spans arrive, not inside your process.
- Block before it runsNoSpans arrive after the call ran, so nothing can stop it.
- ReplayRe-issue onlyA model step can be re-sent to a live model. The whole run can't be re-run with the same tool results: they aren't kept.
- ArrivesAbout a minuteA run is written once its trace goes quiet, about a minute after the root span.
- Signed recordYesEach run is hash-chained and can be exported as a signed record.
Point OpenTelemetry at it.
Two environment variables, then your framework's own instrumentation. No Runback package.
- OpenAI
- Anthropic
- Gemini
- Llama
- Mistral AI
- Vercel AI SDK
- LangChain
- CrewAI
- Ollama
- Open
Telemetry - Python
- TypeScript
Protobuf or JSON, default settings. An OTel run's steps can be re-issued, not replayed exactly.1
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="https://runback.dev/api/otel/v1/traces"
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="authorization=Bearer <RUNBACK_API_KEY>"CrewAI
OpenTelemetry · tested recipe
OpenInference's CrewAI and OpenAI instrumentors together; crewai 1.10.1 or later, below which the instrumentor silently records nothing. Model steps arrive with messages, system prompt, tool definitions, response text, tool calls and tokens, and tool steps in full.
pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
tp = TracerProvider()
tp.add_span_processor(BatchSpanProcessor(OTLPSpanExporter())) # protobuf, the default
CrewAIInstrumentor().instrument(tracer_provider=tp)
OpenAIInstrumentor().instrument(tracer_provider=tp)LlamaIndex
OpenTelemetry · tested recipe
OpenInference's LlamaIndex instrumentor. Pass include_usage in stream_options to the OpenAI LLM or tokens are zero. Each model call currently arrives as two model steps: one complete, with tokens and tool calls, and a duplicate with no tokens whose response text is the instrumentor's repr of the messages.
pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
tp = TracerProvider()
tp.add_span_processor(BatchSpanProcessor(OTLPSpanExporter())) # protobuf, the default
LlamaIndexInstrumentor().instrument(tracer_provider=tp)
llm = OpenAI(model=..., additional_kwargs={"stream_options": {"include_usage": True}})Pydantic AI
OpenTelemetry · tested recipe
Pydantic AI's own instrumentation. Model steps arrive with messages, system prompt, tool definitions, response text, tool calls and tokens, and tool steps in full.
pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
tp = TracerProvider()
tp.add_span_processor(BatchSpanProcessor(OTLPSpanExporter())) # protobuf, the default
Agent.instrument_all(InstrumentationSettings(tracer_provider=tp))Google ADK
OpenTelemetry · tested recipe
OpenInference's ADK instrumentor; google-adk 2.10 or later. Without it, ADK's native spans make tool calls show up as model calls. Model steps carry their tool calls; the provider shows as gcp.vertex.agent, not the model's vendor.
pip install opentelemetry-sdk opentelemetry-exporter-otlp-proto-http
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
tp = TracerProvider()
tp.add_span_processor(BatchSpanProcessor(OTLPSpanExporter())) # protobuf, the default
GoogleADKInstrumentor().instrument(tracer_provider=tp)Anything else (raw OpenTelemetry)
OpenTelemetry · any language
If it exports GenAI spans over OTLP/HTTP, protobuf or JSON, Runback reads it. Set the two environment variables; the exporter's defaults are fine.
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="https://runback.dev/api/otel/v1/traces"
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="authorization=Bearer <RUNBACK_API_KEY>"If it exports OpenTelemetry GenAI spans over OTLP/HTTP, it works. Tell us what you use and we'll confirm the mapping — read the guide or open a sample run.
Or add a few lines of SDK.
Full context capture and in-process redaction. In TypeScript, policy blocks a tool call before it runs and the whole run can be replayed (Enterprise).
Pick your SDK in the setup above ↑Read the full walkthrough →Already on Traceloop? See how it compares →
Record any model.
Whatever model you call is recorded. Replay runs on OpenAI, Anthropic and Groq-hosted open models today.
Whatever model you call, Runback records it automatically — the inspector and monitoring don't care which provider you use. Replay — re-running a step against a live model — supports OpenAI, Anthropic, and Groq-hosted open models today; more are on the roadmap.
It lives in your stack, not another console.
The record goes to the systems your organisation already runs.
- IdentityOkta · Azure AD / Entra · Google Workspace · Auth0native
SSO via OIDC, domain-routed, with provisioning.
- CI / CDGitHub Actionsnative · GitHub
A GitHub Action verifies a signed audit record in your pipeline. Agents pull versioned prompts by label over plain HTTP — no SDK required. GitLab CI and Jenkins can call the same HTTP API; there is no packaged integration for them.
- Incident & chatSlack · PagerDuty · any webhookalerts · webhooks
Alert rules route failures and error-rate spikes to email, Slack, or a generic webhook. PagerDuty receives governance findings. Opsgenie and Microsoft Teams have no integration yet.
- Regulatory evidenceEAAPL — AU Enterprise AI Patternsread-only API
A scoped, read-only key exposes your live EU AI Act / ISO 42001 / NIST AI RMF / APRA CPS 230 control status to EAAPL's evidence pack. No ingest, no run content.
- SIEMSplunk (HEC) · Microsoft Sentinel · any webhooknative · webhooks
Stream the admin audit log to your SIEM hourly. Datadog and Elastic take it through the generic webhook.
- Data exportREST API · JSONAPI
Pull signed audit records and run data into your own lake. There is no native Snowflake, BigQuery or S3 connector.
- Your cloudAWS · Azure · GCP · on-premself-host
Self-host the whole platform in your own network — your data never leaves.
Don't see yours? Everything is reachable through the open REST API and outbound webhooks — tell us what you run and we'll confirm the wiring. AU regulatory evidence pack? See the EAAPL integration →