← Back to Blog

comparison

Sep 21, 2026

OpenTelemetry is the right interface for LLM APIs — but not for coding agents

Why application-owned LLM calls belong in OpenTelemetry, while developer coding assistants require native lifecycle hooks, patch hunks, and terminal context.

Enterprises are adopting two very different kinds of AI systems at the same time.

The first is software they build: support workflows, copilots, extraction pipelines, internal agents, and other applications that call OpenAI, Anthropic, Gemini, Azure OpenAI, Vertex AI, Bedrock, or another model API.

The second is software their developers use: Claude Code, Codex CLI, Cursor, Antigravity, Gemini CLI, and OpenClaw.

Both create prompts, responses, tool calls, token usage, errors, and governance questions. But they should not be captured in the same way.

For application-owned LLM calls, OpenTelemetry is the right integration boundary. For coding agents, native hooks and transcripts contain materially richer information. ReclaimLLM supports both paths and normalizes them into the same session model.


Use OpenTelemetry Where the Application Owns the Call

An enterprise application already has a provider integration, deployment architecture, and security review. Adding observability should not require replacing that provider client or inserting a new inference gateway.

With OpenTelemetry, the paths remain separate:

Application ──→ LLM provider
     │
     └── OTLP/HTTP traces ──→ ReclaimLLM

The application continues to send inference traffic directly to its provider. An OpenTelemetry SDK or Collector exports the telemetry around that call to ReclaimLLM.

This works well for teams that:

  • Already operate an OpenTelemetry Collector;
  • Use multiple model providers;
  • Cannot add another service to the inference path;
  • Want application traces and LLM activity to share correlation context;
  • Need team attribution without transferring provider credentials.

ReclaimLLM accepts OpenTelemetry GenAI and OpenInference traces over OTLP/HTTP. Depending on what the instrumentor emits, the resulting session can include prompts, responses, tool calls, models, token usage, timing, errors, span relationships, and custom workflow attributes.

Related calls are grouped using session.id, then gen_ai.conversation.id, and finally the trace ID. Re-exported spans converge by trace and span identity, so normal Collector retries do not create duplicate conversations or inflate usage totals.


Coding Agents Expose a Different Surface

A coding agent is not just another model API.

Its useful context lives in local transcript files and proprietary lifecycle hooks rather than standard spans. That context includes:

  • File edits and patch hunks;
  • Terminal commands and their results;
  • Working-directory and repository context;
  • Permission decisions;
  • Session resume and stop events;
  • Client-specific token counters;
  • Tool-result transformations that happened before content reached the model.

Reducing these sessions to generic OTLP would discard critical detail or depend on each client emitting the same stable telemetry. They do not.

ReclaimLLM uses independently versioned native adapters for Claude Code, Codex CLI, Cursor, Antigravity, Gemini CLI, and OpenClaw. Each adapter follows the source contract that client actually provides. A transcript can be primary for one client while hook reconstruction is the best available source for another.

Installation uses one package and one command:

pip install rclm
rclm-hooks-install

The default installer configures Claude Code, Codex CLI, Cursor, Antigravity, and Gemini CLI. OpenClaw is opt-in via --openclaw.


One Downstream Model, Explicit Provenance

Separate capture paths should not create separate products.

After normalization, OpenTelemetry and native-agent records use the same ReclaimLLM session, message, tool-call, usage, storage, search, and governance systems. Existing encryption, data residency, retention, authorization, export, and deletion controls apply to both.

The source remains explicit through three independent dimensions:

  • capture_source identifies opentelemetry or native_agent;
  • agent_client identifies Cursor, Claude Code, Codex, Antigravity, Gemini CLI, or OpenClaw;
  • The model provider identifies the company serving the model.

These fields should not be collapsed. A developer can use Cursor with a Claude model. In that case, Cursor is the client and Anthropic is the model provider. Inferring the client from the model would produce incorrect analytics.


What Teams Should Deploy

  • Use OpenTelemetry for production applications and internal workflows where your code owns the provider request. If a Collector already exists, add ReclaimLLM as another trace destination and retain the current batching, filtering, redaction, and retry pipeline.
  • Use native capture for developer coding agents when you need the richer client session: transcript content, tools, code changes, project context, and lifecycle events.

The design principle is simple: standardize where the ecosystem has a useful standard, preserve native detail where it does not, and normalize only at the point where the data can honestly share a model.