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.
60
69%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.claude/skills/enhanced-telemetry/SKILL.mdThe canonical home for this skill is enhanced-telemetry in fernandezbaptiste/Skrillz
Captures comprehensive Claude Code metrics via ALL 10 available hooks, providing deep observability beyond default OTEL telemetry.
| 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 |
Settings file: .claude/settings.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"]
}
}# 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": "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"}
}{
"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"
}{
"event": "user_prompt",
"turn_number": 5,
"prompt_length": 256,
"estimated_tokens": 64,
"prompt_hash": "a1b2c3d4",
"patterns": ["question", "debugging"],
"timestamp": "2025-11-27T08:05:00Z"
}{
"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"
}{
"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"
}{
"event": "context_utilization",
"estimated_session_tokens": 45000,
"context_percentage": 22.5,
"last_content_tokens": 5000,
"turn_count": 15,
"timestamp": "2025-11-27T08:10:00Z"
}{
"event": "context_compact",
"trigger": "auto",
"has_custom_instructions": false,
"session_turn_count": 45,
"estimated_tokens_before": 180000,
"timestamp": "2025-11-27T08:15:00Z"
}.claude/
├── hooks/
│ └── enhanced-telemetry.py # Main telemetry script (v2)
├── settings.json # Hook configurations
└── skills/
└── enhanced-telemetry/
└── SKILL.md # This documentationCheck hooks configured:
cat .claude/settings.json | grep enhanced-telemetryTest script manually:
echo '{"tool_name":"Test"}' | python3 .claude/hooks/enhanced-telemetry.py PreToolUseCheck Loki receiving data:
curl -s "http://localhost:3100/loki/api/v1/labels"
# Should include: event_type, tool, repo, pattern, etc.Check Loki has enhanced data:
curl -s "http://localhost:3100/loki/api/v1/query?query={job=\"claude_code_enhanced\"}&limit=5".claude/settings.jsonpython3 -m json.tool .claude/settings.jsonwhich python3chmod +x .claude/hooks/enhanced-telemetry.py{job="claude_code_enhanced"} queries93ed392
Canonical home
since Sep 12, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.