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.
Quickstart
Install agent-observability-sdk (Node) and point your agent at the dashboard. Covers the agent-transport path (observability auto-emits) and where to go for raw LiveKit workers.
Vitest reporter
Stream Vitest eval results into the dashboard. Every vitest run becomes one eval_run; every it(...) becomes an eval_case with events, judgments, and failure detail.