Documentation Index
Fetch the complete documentation index at: https://docs.agnost.ai/llms.txt
Use this file to discover all available pages before exploring further.
VoltAgent ships its own observability layer. Plug an OTLP exporter into VoltAgentObservability, then pass userId / conversationId per call.
1. Install
Already have @voltagent/core and @opentelemetry/exporter-trace-otlp-proto? Skip.
No setup yet?
npm install @voltagent/core @opentelemetry/exporter-trace-otlp-proto @opentelemetry/sdk-trace-node
2. Wire the OTel exporter pointing at Agnost
Already have VoltAgentObservability? Append a span processor for Agnost to the existing spanProcessors array:
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-node';
const agnostProcessor = new BatchSpanProcessor(
new OTLPTraceExporter({
url: 'https://otel.agnost.ai/v1/traces',
headers: { 'X-Agnost-Org-ID': process.env.AGNOST_ORG_ID! },
}),
);
// Inside your existing VoltAgentObservability:
spanProcessors: [
// ...your existing processors,
agnostProcessor,
]
No Observability yet? Full setup:
import { VoltAgent, VoltAgentObservability } from '@voltagent/core';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-node';
const exporter = new OTLPTraceExporter({
url: 'https://otel.agnost.ai/v1/traces',
headers: { 'X-Agnost-Org-ID': process.env.AGNOST_ORG_ID! },
});
const observability = new VoltAgentObservability({
spanProcessors: [new BatchSpanProcessor(exporter)],
});
new VoltAgent({ agents: { agent }, observability });
3. Pass userId / conversationId per call
await agent.generateText('Hello', {
userId: 'user-42',
conversationId: 'conv-abc123',
});
VoltAgent maps userId → user.id and conversationId → conversation.id on every span — both read directly by Agnost for user / session grouping.
References