Agent Observability
SDKsNode

Raw LiveKit

Instrument a raw-LiveKit Node worker. initObservability emits the tag bundle the server expects so session reports are parented correctly on the dashboard.

agent-transport's AudioStreamServer wires observability internally. When you drive LiveKit Agents directly with server.rtcSession(...), call initObservability to emit the tag bundle (agentId, accountId, agentName, transport) the server's ingest path expects.

Minimal worker

import { initObservability } from "agent-observability-sdk/livekit";
import { AgentServer } from "@livekit/agents";

const server = new AgentServer();

server.rtcSession({ agentName: "support-bot" }, async (ctx) => {
  initObservability(ctx.tagger, {
    agentId: "9c2f7e3d-…",
    agentName: "support-bot",
    accountId: "acct-7",
    transport: "text",
  });
  // …your usual AgentSession.start(...) wiring
});

Conversation goals (deprecated)

initObservability still accepts a goals: [{ name, description }, …] option, and the server still stores the goal:<name>:<description> tags it emits — but no longer judges them. Conversation goals are superseded by custom judges: a name and a plain-language pass/fail description, created through the judges API and mapped onto an agent, in place of the goal declared in code. Drop goals from new integrations.

Running on agent-transport (bootstrap wired internally)? addGoalTags(tagger, goals) is deprecated the same way.

URL resolution

initObservability throws if LIVEKIT_OBSERVABILITY_URL (or the fallback AGENT_OBSERVABILITY_URL) is unset — there's no point continuing if the session report has nowhere to go. Use ensureObservabilityUrl() directly for a non-fatal, warn-only contract.

No judges yet

Unlike the Python SDK, the Node SDK ships no judges — LiveKit Node Agents 1.3.0 has no Judge API. End-of-call judging lands on the Node side once LiveKit catches up. Run judges from your test suite via the Vitest reporter in the meantime.

On this page