all answers

Frameworks and tooling

Otel genai conventions

The OpenTelemetry GenAI semantic conventions are a shared vocabulary for describing an LLM call, a tool call, or an agent step as a span. They fix the span names and the attribute names, so a trace from one framework means the same thing as a trace from another, and a backend can read both without a per-framework adapter.

The shape is one span per operation. An attribute called gen_ai.operation.name says what kind of operation it was: a chat call, an embedding, a retrieval, a tool execution, an agent invocation. An LLM span carries the provider, the model name, and the token counts. A tool span carries the tool's name and the id of that particular call. Grouping spans into a session or a user uses the general OpenTelemetry attributes, session.id and user.id, not a GenAI-specific one.

Two things to know before building on them. They are not stable yet. Every GenAI span, metric, and attribute is still marked as in development, and names have already changed once: gen_ai.system became gen_ai.provider.name, so both spellings are live in the wild and anything reading them has to accept either. And the message content is opt-in. The input and output messages are off by default because they carry whatever the user typed, and how they should be recorded, as span attributes or as separate events, is the part still moving.

Export is OTLP, over HTTP or gRPC. The payload is the same either way; pick whichever your collector already speaks.

9 questions

Answered, plainly.

What are the OpenTelemetry GenAI semantic conventions?A shared span vocabulary for LLM and tool calls: gen_ai.operation.name plus provider, model, and token attributes, still marked development-stability.answer →Are LLM prompts and completions captured by OpenTelemetry's GenAI conventions by default?No. gen_ai.input.messages and gen_ai.output.messages both carry an Opt-In requirement level, so a compliant instrumentation ships with them off by default.answer →Why was gen_ai.system renamed to gen_ai.provider.name?To fit a naming pattern OpenTelemetry adopted everywhere: system-identifying fields follow system.thing.property, freeing a provider namespace for later fields.answer →Which attributes should an agent emit on an LLM span?Only gen_ai.operation.name and gen_ai.provider.name are required; token counts and response details are recommended, and message content is opt-in.answer →How do I capture prompts and completions without leaking PII?Turn on the opt-in message attributes, then redact before export; the spec lets instrumentation filter content but doesn't redact anything on your behalf.answer →Does OpenTelemetry identify the top-level agent in a multi-agent system?A new, still-in-development gen_ai.main_agent resource entity names the one persistent top-level agent in a process, not the subagents inside a run.answer →Does OpenTelemetry record which agent skill caused a bad response?As of September 2026, yes: a new gen_ai.skill.* attribute set records which skill an agent loaded, where it came from, and whether its script failed.answer →Why did OpenTelemetry split its token-usage metric into separate counters?Because the metric it replaced mixed input and output tokens into one number and had no way to count cache or reasoning tokens at all.answer →Does OpenTelemetry capture the model's output when a GenAI call ends in an error?Only if the call actually produced output, including a partial streamed response, before it failed; instrumentation is told not to invent output for a call that generated none.answer →

Two ways to run Tessary.

Tessary is an open-source agent reliability platform. Cloud and self-hosted run the same workflow on the OpenTelemetry traces your agent already emits.

Tessary Cloud

We host it for you. Send your first trace with nothing to deploy and no model key.

what's includedper organization
traces
10,000 per calendar month
stored trace data
1 GB
retention
30 days
model credit
$10, one-time, for triage and root-cause analysis
credit card
not required

Self-hosted Tessary

Run the open-source code on your own infrastructure with one command. Add your own model key for triage and root-cause analysis.

Self-host Tessary for me by following https://github.com/tessaryai/tessary/blob/main/setup.md

docker compose -f oci://docker.io/tessaryai/tessary:compose up -d -y