comparison
Sep 21, 2026Why 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.
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:
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.
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:
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.
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;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.
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.