/analytics:unused
Identify commands and skills that have never been invoked, helping you discover unused features or clean up unused plugins.
Context
Check analytics availability:
if [[ ! -f ~/.claude-analytics/summary.json ]]; then echo "No analytics data yet. Cannot determine unused commands/skills." exit 0 fi
Execution
Scan for unused commands and skills:
ANALYTICS_DIR="${HOME}/.claude-analytics" SUMMARY_FILE="${ANALYTICS_DIR}/summary.json"
echo "🔍 Scanning for unused commands and skills..." echo ""
Get list of used commands/skills
if [[ -f "${SUMMARY_FILE}" ]]; then USED=$(cat "${SUMMARY_FILE}" | jq -r '.items | keys[]') else USED="" fi
Find all command files in plugins
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "Unused Commands" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo ""
UNUSED_COUNT=0
Scan for skill files
find . -type f ( -name "SKILL.md" -o -name "skill.md" ) -not -path "/node_modules/" 2>/dev/null | while read -r cmd_file; do
Extract command name from filename
Format: plugin-name/commands/plugin-command.md -> plugin:command
BASENAME=$(basename "$cmd_file" .md)
Try to extract command name from frontmatter
CMD_NAME=$(grep -A 20 "^---$" "$cmd_file" | grep "^# /" | head -1 | sed 's/^# ///' || echo "")
if [[ -z "$CMD_NAME" ]]; then # Fallback: derive from filename (e.g., analytics-report.md -> analytics:report) CMD_NAME=$(echo "$BASENAME" | sed 's/-/:/' | sed 's/-/:/') fi
Check if command has been used
if ! echo "$USED" | grep -q "^${CMD_NAME}$"; then echo " 📝 /${CMD_NAME}" echo " File: ${cmd_file}" echo "" UNUSED_COUNT=$((UNUSED_COUNT + 1)) fi done
if [[ $UNUSED_COUNT -eq 0 ]]; then echo " All commands have been used! 🎉" echo "" fi
Find all skill files
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "Unused Skills" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo ""
UNUSED_SKILLS=0
find . -type f -path "/skills//skill.md" -not -path "/node_modules/" 2>/dev/null | while read -r skill_file; do
Extract skill name from directory name
SKILL_DIR=$(dirname "$skill_file") SKILL_NAME=$(basename "$SKILL_DIR")
Try to get skill name from frontmatter
FRONTMATTER_NAME=$(grep -A 5 "^---$" "$skill_file" | grep "^name:" | head -1 | sed 's/^name: *//' || echo "")
if [[ -n "$FRONTMATTER_NAME" ]]; then SKILL_NAME="$FRONTMATTER_NAME" fi
Check if skill has been used
if ! echo "$USED" | grep -qi "$SKILL_NAME"; then echo " 🎯 ${SKILL_NAME}" echo " File: ${skill_file}" echo "" UNUSED_SKILLS=$((UNUSED_SKILLS + 1)) fi done
if [[ $UNUSED_SKILLS -eq 0 ]]; then echo " All skills have been used! 🎉" echo "" fi
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo ""
if [[ $UNUSED_COUNT -eq 0 && $UNUSED_SKILLS -eq 0 ]]; then echo "✨ All commands and skills have been used at least once!" else echo "💡 Consider:" echo " • Trying out unused features to see if they're helpful" echo " • Removing plugins you never use" echo " • Sharing useful commands with your team" fi
echo ""
Post-actions
None.