From claude-warehouse
Generate an analytics report on your AI-assisted development habits. Use when the user asks about their productivity, workflow patterns, session efficiency, or wants to understand how they use Claude Code. Covers token economics, tool usage patterns, session shapes, project maturity, and actionable improvement suggestions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-warehouse:reportThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate a comprehensive analytics report on the user's Claude Code usage patterns.
Generate a comprehensive analytics report on the user's Claude Code usage patterns.
Run ALL of the following queries and synthesize the results into a clear, actionable report.
When the user specifies a date range, add WHERE clauses. Use these join paths:
sessions.session_id ←→ messages.session_id
sessions.session_id ←→ tool_calls.session_id
messages.uuid ←→ tool_calls.message_uuid (NOT message_id)
Key column differences between tables:
created_at (TIMESTAMP), modified_attimestamp (TIMESTAMP) — NO created_at columntimestamp (TIMESTAMP) — NO created_at columntool_name exists in BOTH messages and tool_calls — always qualify with table aliasTo filter tool_calls or messages by date, JOIN through sessions:
SELECT tc.tool_name, COUNT(*) FROM tool_calls tc JOIN sessions s ON tc.session_id = s.session_id WHERE s.created_at >= '...' GROUP BY 1
SELECT model, COUNT(*) FROM messages m JOIN sessions s ON m.session_id = s.session_id WHERE s.created_at >= '...' GROUP BY 1
${CLAUDE_PLUGIN_ROOT}/scripts/query.py sql "SELECT 'last_30d' as period, COUNT(*) sessions, SUM(message_count) messages, SUM(total_input_tokens + total_output_tokens) total_tokens, ROUND(AVG(message_count), 1) avg_msgs, COUNT(DISTINCT project_name) projects FROM sessions WHERE created_at >= current_date - INTERVAL '30 days' UNION ALL SELECT 'prev_30d', COUNT(*), SUM(message_count), SUM(total_input_tokens + total_output_tokens), ROUND(AVG(message_count), 1), COUNT(DISTINCT project_name) FROM sessions WHERE created_at >= current_date - INTERVAL '60 days' AND created_at < current_date - INTERVAL '30 days'"
${CLAUDE_PLUGIN_ROOT}/scripts/query.py sql "SELECT project_name, COUNT(*) sessions, SUM(total_input_tokens) input_tok, SUM(total_output_tokens) output_tok, SUM(total_cache_read) cache_read, ROUND(SUM(total_cache_read)::FLOAT / NULLIF(SUM(total_input_tokens + total_cache_read), 0) * 100, 1) as cache_hit_pct, ROUND(SUM(total_input_tokens) * 3.0 / 1000000 + SUM(total_output_tokens) * 15.0 / 1000000, 2) as est_cost_usd FROM sessions WHERE created_at >= current_date - INTERVAL '30 days' GROUP BY 1 ORDER BY est_cost_usd DESC LIMIT 15"
${CLAUDE_PLUGIN_ROOT}/scripts/query.py sql "SELECT CASE WHEN message_count <= 3 THEN 'abandoned (1-3 msgs)' WHEN message_count <= 10 THEN 'short (4-10 msgs)' WHEN message_count <= 30 THEN 'medium (11-30 msgs)' ELSE 'long (30+ msgs)' END as bucket, COUNT(*) sessions, ROUND(AVG(total_input_tokens + total_output_tokens)) avg_tokens, ROUND(AVG(message_count), 1) avg_msgs FROM sessions WHERE created_at >= current_date - INTERVAL '30 days' GROUP BY 1 ORDER BY MIN(message_count)"
${CLAUDE_PLUGIN_ROOT}/scripts/query.py sql "SELECT tool_name, COUNT(*) calls, ROUND(COUNT(*)::FLOAT / SUM(COUNT(*)) OVER () * 100, 1) as pct FROM tool_calls WHERE timestamp >= current_date - INTERVAL '30 days' GROUP BY 1 ORDER BY 2 DESC LIMIT 15"
${CLAUDE_PLUGIN_ROOT}/scripts/query.py sql "SELECT DATE_TRUNC('week', timestamp)::DATE as week, COUNT(*) FILTER (WHERE tool_name IN ('Edit', 'MultiEdit', 'Write')) as writes, COUNT(*) FILTER (WHERE tool_name = 'Read') as reads, ROUND(COUNT(*) FILTER (WHERE tool_name IN ('Edit', 'MultiEdit', 'Write'))::FLOAT / NULLIF(COUNT(*) FILTER (WHERE tool_name = 'Read'), 0), 2) as write_read_ratio FROM tool_calls GROUP BY 1 ORDER BY 1 DESC LIMIT 8"
${CLAUDE_PLUGIN_ROOT}/scripts/query.py sql "SELECT CASE WHEN LENGTH(first_prompt) < 50 THEN 'short (<50 chars)' WHEN LENGTH(first_prompt) < 200 THEN 'medium (50-200)' ELSE 'detailed (200+)' END as prompt_length, COUNT(*) sessions, ROUND(AVG(message_count), 1) avg_msgs, ROUND(AVG(total_input_tokens + total_output_tokens)) avg_tokens FROM sessions WHERE created_at >= current_date - INTERVAL '30 days' AND first_prompt IS NOT NULL GROUP BY 1 ORDER BY MIN(LENGTH(first_prompt))"
${CLAUDE_PLUGIN_ROOT}/scripts/query.py sql "SELECT created_at::DATE as day, COUNT(*) sessions, SUM(message_count) msgs FROM sessions WHERE created_at >= current_date - INTERVAL '14 days' GROUP BY 1 ORDER BY 1 DESC"
Present the results as a structured report with:
npx claudepluginhub sderosiaux/claude-plugins --plugin claude-warehouseAnalyzes Claude Code session patterns, categories, trends, benchmarks, and usage for behavioral insights and recommendations. Activates on 'patterns', 'insights', 'how am I doing' queries.
Analyzes Claude Code session logs to extract tool usage stats, thinking blocks, error patterns, debug trajectories, and generate actionable productivity recommendations. Provides cc-session CLI for overviews, timelines, searches.
Generates usage analytics dashboard from Claude Code sessions with epistemic protocol coverage metrics, friction analysis, growth timelines, and improvement recommendations.