- /analytics:report
- Display usage analytics for commands and skills across all projects.
- Context
- Check if analytics data exists:
- if
- [
- [
- -f
- ~/.claude-analytics/summary.json
- ]
- ]
- ;
- then
- echo
- "Analytics available"
- SUMMARY
- =
- $(
- cat
- ~/.claude-analytics/summary.json
- )
- TOTAL
- =
- $(
- echo
- "
- $SUMMARY
- "
- |
- jq
- -r
- '.total_invocations // 0'
- )
- SINCE
- =
- $(
- echo
- "
- $SUMMARY
- "
- |
- jq
- -r
- '.tracking_since // "unknown"'
- )
- echo
- "Total invocations:
- $TOTAL
- "
- echo
- "Tracking since:
- $SINCE
- "
- else
- echo
- "No analytics data found. Start using commands to collect data."
- exit
- 0
- fi
- Parameters
- $ARGS
- - Optional filter:
- Empty: Show all analytics
- commands
-
- Show only commands
- skills
-
- Show only skills
- Show specific command/skill details Execution Display analytics report: ANALYTICS_DIR = " ${ HOME } /.claude-analytics" SUMMARY_FILE = " ${ANALYTICS_DIR} /summary.json" EVENTS_FILE = " ${ANALYTICS_DIR} /events.jsonl" if [ [ ! -f " ${SUMMARY_FILE} " ] ] ; then echo "📊 No analytics data yet" echo "" echo "Analytics will be collected automatically as you use commands and skills." echo "Data is stored in: ${ANALYTICS_DIR} " exit 0 fi SUMMARY = $( cat " ${SUMMARY_FILE} " ) FILTER = " ${ARGS :- all} " echo "📊 Command & Skill Analytics" echo ""
Header info
TOTAL
$( echo " $SUMMARY " | jq -r '.total_invocations' ) SINCE = $( echo " $SUMMARY " | jq -r '.tracking_since' ) echo "Total invocations: ${TOTAL} " echo "Tracking since: ${SINCE} " echo ""
Top used items
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "Most Used" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" if [ [ " ${FILTER} " == "all" || " ${FILTER} " == "commands" ] ] ; then echo "" echo "📝 Commands" echo " $SUMMARY " | jq -r ' .items | to_entries | map(select(.value.type == "command")) | sort_by(-.value.count) | .[:10] | .[] | " (.value.count | tostring | (. + " ")[:6]) (.key) ((.value.success)✓ (.value.failure)✗)" ' fi if [ [ " ${FILTER} " == "all" || " ${FILTER} " == "skills" ] ] ; then echo "" echo "🎯 Skills" echo " $SUMMARY " | jq -r ' .items | to_entries | map(select(.value.type == "skill")) | sort_by(-.value.count) | .[:10] | .[] | " (.value.count | tostring | (. + " ")[:6]) (.key) ((.value.success)✓ (.value.failure)✗)" ' fi
Success rate
if [ [ " ${FILTER} " == "all" ] ] ; then echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "Success Rates" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" TOTAL_SUCCESS = $( echo " $SUMMARY " | jq '[.items[].success] | add // 0' ) TOTAL_FAILURE = $( echo " $SUMMARY " | jq '[.items[].failure] | add // 0' ) TOTAL_OPS = $(( TOTAL_SUCCESS + TOTAL_FAILURE )) if [ [ $TOTAL_OPS -gt 0 ] ] ; then SUCCESS_RATE = $( echo "scale=1; ${TOTAL_SUCCESS} * 100 / ${TOTAL_OPS} " | bc ) echo " Overall: ${SUCCESS_RATE} % ( ${TOTAL_SUCCESS} ✓ ${TOTAL_FAILURE} ✗)" fi
Items with failures
echo "" echo " Items with failures:" echo " $SUMMARY " | jq -r ' .items | to_entries | map(select(.value.failure > 0)) | sort_by(-.value.failure) | .[:5] | .[] | " (.key): (.value.failure) failures" ' | while read -r line ; do if [ [ -n " $line " ] ] ; then echo " $line " else echo " None!" fi done fi
Recent activity
if [ [ " ${FILTER} " == "all" ] ] ; then echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "Recent Activity (last 10)" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" if [ [ -f " ${EVENTS_FILE} " ] ] ; then tail -10 " ${EVENTS_FILE} " | jq -r ' "(.timestamp | split("T")[0] + " " + (.timestamp | split("T")[1] | split(".")[0])) (.name) " + (if .success then "✓" else "✗" end) ' fi fi
Specific item details
if [ [ " ${FILTER} " != "all" && " ${FILTER} " != "commands" && " ${FILTER} " != "skills" ] ] ; then echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "Details: ${FILTER} " echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" echo " $SUMMARY " | jq -r \ --arg name " ${FILTER} " \ ' if .items[$name] then .items[$name] | "Type: (.type)\n" + "Total uses: (.count)\n" + "Successful: (.success)\n" + "Failed: (.failure)\n" + "First used: (.first_used)\n" + "Last used: (.last_used)" else "No data found for: " + $name end '
Show recent invocations
if [ [ -f " ${EVENTS_FILE} " ] ] ; then echo "" echo "Recent invocations:" grep " \" ${FILTER} \" " " ${EVENTS_FILE} " | tail -5 | jq -r ' " (.timestamp) " + (if .success then "✓" else "✗ (.error)" end) ' fi fi echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" echo "💡 Tips:" echo " • /analytics:report commands - Show only commands" echo " • /analytics:report skills - Show only skills" echo " • /analytics:unused - Find never-used commands" echo " • /analytics:clear - Reset analytics data" Post-actions None.