> ## 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

> Capture traces from VoltAgent agents over OTLP

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?**

```bash theme={null}
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:

```typescript theme={null}
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:

```typescript theme={null}
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

```typescript theme={null}
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

* [Enable OpenTelemetry export](https://voltagent.dev/docs/observability/mlflow/)
* [Add custom metadata](https://voltagent.dev/observability-docs/setup/#add-metadata-to-traces)
