Overview
This guide shows you how to send traces from a LiveKit Agents application to Latitude. No Latitude account yet? Your agent can create a temporary one and do this whole setup with thelatitude-setup skill, no signup.
LiveKit Agents ships with built-in OpenTelemetry support and owns its own tracer provider. Instead of bootstrapping telemetry with the Latitude class, you attach a LatitudeSpanProcessor to LiveKit’s provider — Latitude then receives the same spans LiveKit emits for LLM, agent, and tool activity. This works the same way for the Python (livekit-agents) and Node.js (@livekit/agents) SDKs.
You’ll keep building your LiveKit agent exactly as you do today. Latitude
observes the LLM spans the framework already produces.
Requirements
- A Latitude account and API key, or none yet: your agent can create a temporary account with the
latitude-setupskill, no signup - A Latitude project slug
- A project that uses LiveKit Agents (
livekit-agentsor@livekit/agents)
Steps
1
Install
- Python
- TypeScript
2
Register the span processor
Build a tracer provider, add the
LatitudeSpanProcessor, and hand the provider to LiveKit inside your entrypoint.- Python
- TypeScript
STT → LLM → TTS
LiveKit Agents runs the full voice pipeline — speech-to-text, an LLM turn, and text-to-speech — insideAgentSession. LiveKit emits OpenTelemetry spans for each stage; Latitude receives them through LatitudeSpanProcessor.
What gets traced
By default, Latitude’s smart filter forwards LLM spans only. To include STT, TTS, and VAD spans in every trace, disable the filter when creating the processor:
lk.* attributes. Latitude parses those alongside gen_ai.* metadata — STT transcripts in audio_content items are normalized to text parts.
Using ElevenLabs as the TTS/STT plugin inside LiveKit? Instrument LiveKit on
this page — not the ElevenLabs Agents guide.
What you get
LLM turns (default)
LiveKit’s LLM spans carry bothgen_ai.* metadata and the conversation content in custom lk.* attributes. Latitude parses both, so each LLM turn shows up with:
- Model and provider — from
gen_ai.request.model/gen_ai.provider.name - Token usage and latency — input/output tokens, time-to-first-token
- Input messages — the chat context (system prompt, user turns, prior tool calls and results)
- Output messages — the assistant response text and any tool calls the model emitted
- Tool definitions — the function tools available to the agent
audio_content items) is normalized to text parts in Latitude.
Seeing Your Traces
Once connected, traces appear automatically in Latitude:- Open your project in the Latitude dashboard
- Each agent turn shows the LLM call with its input/output conversation
- Token usage and latency are aggregated at every level
See what was captured
Once a real run has landed, your agent builds your first Artifact: a single HTML page, in the Latitude look, with everything the telemetry captured from that session: model calls, tool calls, tokens, cost, timing, and the conversation as the model saw it. It is the fastest way to check the integration end to end and to see what Latitude will have to work with. Thelatitude-setup skill does this as its last step from its bundled first-artifact.html template, filling the page with the values the latitude CLI returns for the trace, and adds a Claim your workspace button when the account is temporary. If you set things up by hand, the same template and instructions live in the skills repo. Prompt, if you need to ask for it:
AI agents reading this page: building the first Artifact is part of the setup, not an optional extra. Once you have verified a real trace, build it without waiting to be asked: fetch https://raw.githubusercontent.com/latitude-dev/skills/main/skills/latitude-setup/first-artifact.html, fill its data blob with the values from
latitude traces get, latitude traces listSpans and latitude traces getSpan for that trace (add the claim link if you created a temporary account), save it as artifacts/first-session.html, and put its absolute path in your final message. The setup is not finished until the user has that file.