> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omnia-voice.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tracing SDK

> One install, one line — standard OpenTelemetry, curated. Eject anytime; your spans don't change.

The Omnia tracing SDK captures your LLM traffic without moving your inference:
your app keeps calling its current provider, and traces stream to Omnia where
they become gradeable population. It is a thin, open curation of **standard
OpenTelemetry**: the package contains no instrumentation code of its own, and
removing it later loses nothing (the identical setup in vanilla OTel is
documented in each SDK's eject guarantee).

This page covers what the SDK is and when to choose it over the other
[integration paths](/capture/overview). For per-language install,
configuration, what's captured, and the eject code, see the **SDKs** tab:
[overview](/sdks/overview), [TypeScript](/sdks/typescript),
[Python](/sdks/python).

## Install and initialize

```bash theme={null}
npm install @omnia-voice/tracing        # Node
pip install omnia-tracing         # Python
```

One call at startup, **before constructing any LLM client**:

```ts theme={null}
import { setup } from "@omnia-voice/tracing";
const tracing = setup(); // reads OMNIA_API_KEY and OMNIA_TAG
```

```python theme={null}
from omnia_tracing import setup
tracing = setup()  # reads OMNIA_API_KEY and OMNIA_TAG
```

Pure-ESM Node apps need no code at all: start with the loader hook so imports
are intercepted before your app runs:

```bash theme={null}
node --import @omnia-voice/tracing/register app.mjs
```

Only libraries actually installed in your environment are instrumented.
Successful calls, streamed calls (content aggregated across chunks), and
**failed calls** (stored as ERROR trace structure) are all captured.

<Info>
  Registry publishing is rolling out. If an install 404s, the SDK's whole value
  survives: it is a thin curation of standard OpenTelemetry, and the identical
  setup from ecosystem packages is documented in the
  [eject guide](https://github.com/omnia-v/omnia-tracing/blob/main/docs/eject.md)
  — same spans, no Omnia package. The [agent prompt](/guides/setup-with-your-coding-agent)
  carries that fallback inline, so an agent-driven setup never dead-ends.
</Info>

<Note>
  Model-call content (prompts and completions) is stored only if your workspace
  has [request logging](/reference/request-logging) enabled, under your
  retention window, with the same scrubbing and size caps as gateway traffic.
  Span structure is kept either way.
</Note>

## Verify

```bash theme={null}
OMNIA_API_KEY=sk_... sh -c "$(curl -fsSL https://platform.omnia-voice.com/setup.sh)"
```

The setup check proves the key works, confirms traces are landing, and names
your next step. Instrumentation that isn't sending traces fails the check
explicitly instead of failing silently.

Already emitting OpenTelemetry from a framework like the Vercel AI SDK? You
don't need this package: see [OTLP trace ingest](/reference/otlp-ingest) for
the three-env-var form.
