home / skills / adaptationio / skrillz / enhanced-telemetry

enhanced-telemetry skill

/skills/enhanced-telemetry

npx playbooks add skill adaptationio/skrillz --skill enhanced-telemetry

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
7.7 KB
---
name: enhanced-telemetry
description: Comprehensive Claude Code telemetry via 10 hooks capturing sessions, conversations, tools, subagents, context, permissions, and repository analytics. Use when analyzing detailed usage patterns beyond default OTEL.
---

# Enhanced Telemetry v2

Captures comprehensive Claude Code metrics via ALL 10 available hooks, providing deep observability beyond default OTEL telemetry.

## What It Captures

### Session Analytics
- Session lifecycle (start/end)
- Session duration
- Session source (startup/resume/clear/compact)
- Session termination reason
- Permission mode

### Conversation Analytics
- Turn count per session
- Prompt patterns (question/debugging/creation/ultrathink)
- Prompt length and token estimates
- Conversation style distribution

### Tool Analytics
- Tool call frequency
- Tool sequences (previous → current)
- Tool error rates
- Response sizes and token estimates
- File types accessed

### Subagent Analytics
- Subagents spawned per session
- Subagent types (Explore, Plan, general-purpose, etc.)
- Subagent completion tracking

### Context Analytics
- Estimated token usage
- Context window utilization percentage
- Context compaction events (manual vs auto)
- Token accumulation tracking

### Repository Analytics
- Activity per repository
- Tool usage by project
- Branch-level tracking

### Permission Analytics
- Permission requests
- Permission types
- Notification tracking

## 10 Hooks Instrumented

| Hook | Event Type | What's Captured |
|------|------------|-----------------|
| `SessionStart` | `session_start` | Source, permission mode, git info |
| `SessionEnd` | `session_end` | Duration, turns, tools, errors, subagents |
| `UserPromptSubmit` | `user_prompt` | Pattern, length, tokens, prompt hash |
| `PreToolUse` | `tool_call` | Tool name, details, sequence position |
| `PostToolUse` | `tool_result` | Status, response size, errors |
| `SubagentStop` | `subagent_complete` | Subagent count |
| `PermissionRequest` | `permission_request` | Notification type |
| `PreCompact` | `context_compact` | Trigger (manual/auto), token estimate |
| `Notification` | `notification` | Notification type |
| `Stop` | `session_end` | Same as SessionEnd |

## Configuration

**Settings file**: `.claude/settings.json`

```json
{
  "hooks": {
    "SessionStart": ["python3 .claude/hooks/enhanced-telemetry.py SessionStart"],
    "SessionEnd": ["python3 .claude/hooks/enhanced-telemetry.py SessionEnd"],
    "UserPromptSubmit": ["python3 .claude/hooks/enhanced-telemetry.py UserPromptSubmit"],
    "PreToolUse": [{"matcher": ".*", "hooks": ["python3 .claude/hooks/enhanced-telemetry.py PreToolUse"]}],
    "PostToolUse": [{"matcher": ".*", "hooks": ["python3 .claude/hooks/enhanced-telemetry.py PostToolUse"]}],
    "SubagentStop": ["python3 .claude/hooks/enhanced-telemetry.py SubagentStop"],
    "PermissionRequest": ["python3 .claude/hooks/enhanced-telemetry.py PermissionRequest"],
    "PreCompact": ["python3 .claude/hooks/enhanced-telemetry.py PreCompact"],
    "Notification": ["python3 .claude/hooks/enhanced-telemetry.py Notification"],
    "Stop": ["python3 .claude/hooks/enhanced-telemetry.py Stop"]
  }
}
```

## Viewing Data

### Grafana Dashboards
- **Enhanced Analytics**: http://localhost:3000/d/claude-code-enhanced
- **Deep Analytics**: http://localhost:3000/d/claude-code-deep

### LogQL Queries

```logql
# All enhanced telemetry
{job="claude_code_enhanced"} | json

# Session analytics
{job="claude_code_enhanced", event_type="session_end"} | json

# Tool calls
{job="claude_code_enhanced", event_type="tool_call"} | json

# Prompt patterns
sum by (pattern) (count_over_time({job="claude_code_enhanced", event_type="user_prompt"} | json [24h]))

# Skill usage
{job="claude_code_enhanced", event_type="skill_usage"} | json

# Context utilization
{job="claude_code_enhanced", event_type="context_utilization"} | json

# Tool sequences
{job="claude_code_enhanced", event_type="tool_call"} | json | line_format "{{.previous_tool}} → {{.tool_name}}"

# Subagent tracking
{job="claude_code_enhanced", event_type="tool_call", tool="Task"} | json

# Error analysis
{job="claude_code_enhanced", event_type="tool_result", status="error"} | json

# Context compaction
{job="claude_code_enhanced", event_type="context_compact"} | json
```

## Event Schemas

### session_start
```json
{
  "event": "session_start",
  "session_id": "abc123",
  "source": "startup",
  "permission_mode": "default",
  "cwd": "/mnt/c/data/github/project",
  "timestamp": "2025-11-27T08:00:00Z",
  "git": {"repo_name": "project", "branch": "main"}
}
```

### session_end
```json
{
  "event": "session_end",
  "session_id": "abc123",
  "reason": "prompt_input_exit",
  "duration_seconds": 1847.5,
  "turn_count": 25,
  "tools_used": {"Read": 45, "Edit": 12, "Bash": 8},
  "tool_sequence": ["Read", "Edit", "Bash", "Read"],
  "subagents_spawned": 3,
  "error_count": 2,
  "timestamp": "2025-11-27T08:30:00Z"
}
```

### user_prompt
```json
{
  "event": "user_prompt",
  "turn_number": 5,
  "prompt_length": 256,
  "estimated_tokens": 64,
  "prompt_hash": "a1b2c3d4",
  "patterns": ["question", "debugging"],
  "timestamp": "2025-11-27T08:05:00Z"
}
```

### tool_call
```json
{
  "event": "tool_call",
  "tool_name": "Read",
  "tool_use_id": "xyz789",
  "tool_details": {"file_path": "/src/main.py", "file_type": ".py"},
  "sequence_position": 15,
  "previous_tool": "Glob",
  "timestamp": "2025-11-27T08:05:30Z"
}
```

### tool_result
```json
{
  "event": "tool_result",
  "tool_name": "Read",
  "tool_use_id": "xyz789",
  "response_length": 4500,
  "estimated_tokens": 1125,
  "is_error": false,
  "error_type": null,
  "timestamp": "2025-11-27T08:05:31Z"
}
```

### context_utilization
```json
{
  "event": "context_utilization",
  "estimated_session_tokens": 45000,
  "context_percentage": 22.5,
  "last_content_tokens": 5000,
  "turn_count": 15,
  "timestamp": "2025-11-27T08:10:00Z"
}
```

### context_compact
```json
{
  "event": "context_compact",
  "trigger": "auto",
  "has_custom_instructions": false,
  "session_turn_count": 45,
  "estimated_tokens_before": 180000,
  "timestamp": "2025-11-27T08:15:00Z"
}
```

## Files

```
.claude/
├── hooks/
│   └── enhanced-telemetry.py       # Main telemetry script (v2)
├── settings.json                    # Hook configurations
└── skills/
    └── enhanced-telemetry/
        └── SKILL.md                 # This documentation
```

## Requirements

- Python 3.x (in PATH)
- Loki running at localhost:3100
- Claude Code hooks enabled

## Troubleshooting

### No Data in Dashboards

1. **Check hooks configured**:
   ```bash
   cat .claude/settings.json | grep enhanced-telemetry
   ```

2. **Test script manually**:
   ```bash
   echo '{"tool_name":"Test"}' | python3 .claude/hooks/enhanced-telemetry.py PreToolUse
   ```

3. **Check Loki receiving data**:
   ```bash
   curl -s "http://localhost:3100/loki/api/v1/labels"
   # Should include: event_type, tool, repo, pattern, etc.
   ```

4. **Check Loki has enhanced data**:
   ```bash
   curl -s "http://localhost:3100/loki/api/v1/query?query={job=\"claude_code_enhanced\"}&limit=5"
   ```

### Hooks Not Running

- Ensure Claude Code started from project directory with `.claude/settings.json`
- Check settings.json is valid JSON: `python3 -m json.tool .claude/settings.json`
- Verify Python available: `which python3`

### Script Errors

- Check script permissions: `chmod +x .claude/hooks/enhanced-telemetry.py`
- Test with debug output: Run script manually and check stderr

## Integration with Other Skills

- **observability-analyzer**: Uses `{job="claude_code_enhanced"}` queries
- **observability-pattern-detector**: Detects patterns in enhanced data
- **observability-alert-manager**: Alerts on enhanced telemetry events
- **skill-improvement-from-observability**: Uses enhanced data for insights