Skip to main content

Choose a setup method

Start with one method for a call path. Combining SDK tracking with framework OpenTelemetry on the same call can create duplicate interactions.
Recommended. Choose this path when you want your coding agent to inspect the project, select a supported transport, make the smallest instrumentation change, send a test event, and verify that it reached Agnost AI.
Install the skill once in your coding-agent environment:
Run the framework-specific prompt below from the application root. Review the resulting diff before deploying it.
LiveKit Agents already instruments agent sessions, turns, model requests, tool calls, speech, and transcription with OpenTelemetry. Point those native spans at Agnost AI; no webhook or Agnost SDK wrapper is required.

1. Configure the OTLP destination

Set these variables in the agent worker environment:

2. Register one batch exporter

Call LiveKit’s tracer-provider hook before AgentSession.start().
Install the OTel packages if the application does not already have them:
The TypeScript FanoutSpanProcessor is required by the current OTel 2.x API so LiveKit can attach its metadata processor (and its Cloud exporter, when enabled) after provider construction.

3. Add standard conversation context

Pass metadata to set_tracer_provider; LiveKit copies it to every native span. Use standard attributes rather than Agnost-specific names:
If session.id is absent, Agnost falls back to LiveKit’s lk.job_id, then lk.room_name. For user identity, explicit enduser.id or user.id is best; the participant identity on a native user-turn span is a safe fallback.

What appears in Agnost AI

  • agent_turn spans become the ordered user/assistant conversation turns.
  • function_tool spans become tool calls with native arguments, output, and error state.
  • LLM request spans retain model, token, and gen_ai.* attributes.
  • STT, TTS, speaking, evaluator, session, job, and activity spans remain visible in the trace.
  • Native lk.*, standard gen_ai.*, and your custom attributes remain available on events.
LiveKit webhooks are useful for room and participant lifecycle events, but they do not carry the complete agent turn, model, tool, and speech span tree. Use native OTLP export for observability.

Flush on shutdown

Batch export is asynchronous. Register a shutdown callback so the worker sends the final turns before it exits:

Verify

Run one real LiveKit agent session, then open Users in Agnost AI. Confirm:
  1. The user appears under the value sent in enduser.id.
  2. The conversation shows alternating user and assistant turns.
  3. The trace contains the LiveKit agent, LLM, tool, STT, and TTS spans used by the session.
  4. Tool details show their native input and output.

Troubleshooting

  • Register the provider before AgentSession.start(); earlier spans cannot be recovered.
  • Use the traces URL ending in /v1/traces with the HTTP/protobuf exporter.
  • Confirm X-Agnost-Org-ID is present in OTEL_EXPORTER_OTLP_HEADERS.
  • Do not point a generic OTLP exporter at LiveKit’s private observability URL.
  • Flush the provider when a short-lived worker or test exits.

References

Next steps

  • Conversations: review complete voice interactions.
  • Events: inspect native LiveKit spans and attributes.
  • Tool calls: analyze tool arguments, results, errors, and latency.