[BUG] User-invoked skills via / prefix emit no OTEL telemetry

Resolved 💬 2 comments Opened Apr 6, 2026 by ameem-chronograph Closed Apr 6, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] I can reproduce this on the latest version of Claude Code

Bug Description

When a user invokes a skill by typing /skill-name (e.g., /code-review:code-review), no OTEL telemetry event is emitted. The skill content is expanded client-side and injected into the conversation as a user message, completely bypassing the tool call system that OTEL instruments.

When Claude programmatically calls the same skill via the Skill tool, the tool_result event is correctly emitted with the skill name in tool_parameters (when OTEL_LOG_TOOL_DETAILS=1).

This means user-initiated skill invocations — likely the majority of skill usage — are invisible to observability pipelines.

Steps to Reproduce

  1. Configure OTEL logging:

``json
{
"env": {
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_LOG_TOOL_DETAILS": "1"
}
}
``

  1. Start a Claude Code session
  2. Type /some-skill (any user-invocable skill)
  3. Check OTEL backend for tool_name = "Skill" events → none found
  4. Now ask Claude to invoke the same skill (so Claude calls the Skill tool) → event appears

Expected Behavior

Both invocation paths should emit an OTEL event so organizations can track skill usage regardless of how the skill was triggered.

Actual Behavior

Only the Skill tool call path emits OTEL events. The user / invocation path emits nothing — not in OTEL logs, not in session metadata.

Root Cause

The v2.1.3 changelog says skills and slash commands were "merged," but the merge unified the definition format (same SKILL.md files), not the invocation paths. The two paths are:

| Path | Mechanism | OTEL event? |
|------|-----------|-------------|
| User types /skill-name | CLI expands skill client-side, injects as user message | No |
| Claude calls Skill("skill-name") | Tool call through tool system | Yes |

Relationship to #35319

Issue #35319 requests skill invocation tracking in session metadata and OTEL. This issue is narrower and more fundamental: one of the two invocation paths has zero telemetry instrumentation. #35319's Level 4 Option B (OTEL integration) already works for the tool-call path — but the user / path is the gap.

Environment

  • Claude Code version: 2.1.81
  • OS: macOS (Darwin 25.2.0)
  • OTEL backend: Grafana Loki (via Alloy OTLP receiver)

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗