home / skills / adaptationio / skrillz / enhanced-telemetry
npx playbooks add skill adaptationio/skrillz --skill enhanced-telemetryReview the files below or copy the command above to add this skill to your agents.
---
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