Agent Observability

Client SDKs

Instrument your agent to ship session reports and eval results to the observability server. Covers the two integration modes — agent-transport (auto-emits) and raw LiveKit (you wire it) — and the env-var contract both share.

The server can only show you what your agent sends it. The client side is the SDK that lives next to your agent and uploads session reports — recordings, per-turn metrics, chat history, tool calls, and judge verdicts — to the observability server. One package per language: agent-observability-sdk (Python and Node).

Two integration modes

How much wiring you do depends on how your agent is built.

agent-transport

If your agent runs on agent-transport's AudioStreamServer / AgentServer, observability is automatic. The transport layer already emits the tag bundle and runs the configured judges through its own EvaluationConfig. You only set the environment variables so reports know where to go, and — in Python — optionally pull judges from the SDK's catalogue into your EvaluationConfig.

Raw LiveKit

If you drive LiveKit Agents directly (@server.rtc_session(...) in Python, server.rtcSession(...) in Node), nothing is wired for you. The SDK's LiveKit helpers replace the hand-rolled boilerplate: one init_observability / initObservability call emits the tags the server expects, and (Python only) run_judges_on_report runs judges at end-of-call. See the raw-LiveKit guides for Python and Node.

Environment

Both modes and both languages read the same environment variables. Only the URL and an agent id matter for most setups.

Env varPurpose
LIVEKIT_OBSERVABILITY_URLDashboard base URL (LiveKit-canonical name). Required by init_observability / initObservability (raises if unset).
AGENT_OBSERVABILITY_URLSame purpose; accepted as a fallback and mirrored into LIVEKIT_OBSERVABILITY_URL so LiveKit's upload code picks it up.
AGENT_OBSERVABILITY_AGENT_IDStable opaque agent identifier. Strongly recommended — without it sessions land unparented on the dashboard. UUIDs preferred over slugs.
AGENT_OBSERVABILITY_ACCOUNT_IDMulti-tenant account id. Optional.
AGENT_OBSERVABILITY_USER / _PASSBasic-auth credentials, when the server enables auth. Optional.
AGENT_OBSERVABILITY_TIMEOUTUpload request timeout in seconds (default 10).
AGENT_OBSERVABILITY_MAX_RETRIESMax upload attempts before falling back (default 3).
AGENT_OBSERVABILITY_FALLBACK_DIRDirectory for failed-upload JSON when the server is unreachable after all retries.

Matching the server's auth mode

The server accepts either Basic credentials or a LiveKit Bearer JWT on its ingest routes (see server Environment). The SDK speaks Basic auth via AGENT_OBSERVABILITY_USER / _PASS. When the server is gated with the LiveKit key pair instead, the LiveKit upload path mints the Bearer token itself from your LIVEKIT_API_KEY / LIVEKIT_API_SECRET — no extra SDK config. Use whichever mode your server is configured for; both can be enabled at once during a migration.

On this page