claude-vault/scripts/analyze-skill-usage.sh
2026-02-04 22:35:40 +01:00

110 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
# Analysiert welche Skills in welchen Projekten genutzt wurden
# Liest Claude-Logs aus ~/.claude/projects/*/memory/ und Vault-Logs
set -e
VAULT="$HOME/Work/claude-vault"
OUTPUT="$VAULT/memory/skill-usage-matrix.md"
TEMP_FILE="/tmp/skill-usage-temp.txt"
echo "🔍 Analysiere Skill-Nutzung..."
# Header erstellen
cat > "$OUTPUT" <<EOF
# Skill Usage Matrix
**Letzte Aktualisierung:** $(date +%Y-%m-%d %H:%M)
Zeigt welche Skills in welchen Projekten genutzt wurden.
| Skill | Projekt | Häufigkeit | Letzte Nutzung |
|-------|---------|------------|----------------|
EOF
# Temporäre Datei leeren
> "$TEMP_FILE"
# 1. Durchsuche Vault-Memory-Logs nach Skill-Erwähnungen
if [ -d "$VAULT/memory/log" ]; then
find "$VAULT/memory/log" -name "*.md" -type f | while read log_file; do
# Extrahiere Projekt-Namen aus dem Log
PROJECT=$(grep "^\*\*Projekt:\*\*" "$log_file" | head -1 | sed 's/\*\*Projekt:\*\* //' | xargs)
# Wenn kein Projekt gefunden, skip
[ -z "$PROJECT" ] && continue
# Extrahiere Skill-Erwähnungen (z.B. /lp-django-model oder lp-django-model)
grep -oE '(/[a-z][a-z0-9-]+|skill-creator|vault-janitor|reviewer|doc-gen|sparring-partner|lp-[a-z-]+)' "$log_file" 2>/dev/null | \
sed 's|^/||' | \
grep -v '^-' | \
while read skill; do
# Letzte Nutzung (Datum aus Filename)
LAST_USED=$(basename "$log_file" | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}')
echo "${skill}|${PROJECT}|${LAST_USED}" >> "$TEMP_FILE"
done
done
fi
# 2. Durchsuche Projekt-MEMORYs in ~/.claude/projects/
if [ -d "$HOME/.claude/projects" ]; then
find "$HOME/.claude/projects" -name "MEMORY.md" -type f | while read memory_file; do
PROJECT=$(basename "$(dirname "$(dirname "$memory_file")")" | sed 's|-|/|g')
# Extrahiere Skill-Erwähnungen
grep -oE '(/[a-z][a-z0-9-]+|skill-creator|vault-janitor|reviewer|doc-gen|sparring-partner|lp-[a-z-]+)' "$memory_file" 2>/dev/null | \
sed 's|^/||' | \
grep -v '^-' | \
while read skill; do
# Letzte Nutzung (Modification Time der MEMORY.md)
LAST_USED=$(stat -f "%Sm" -t "%Y-%m-%d" "$memory_file" 2>/dev/null || echo "Unknown")
echo "${skill}|${PROJECT}|${LAST_USED}" >> "$TEMP_FILE"
done
done
fi
# 3. Aggregiere Daten und erstelle Tabelle
if [ -s "$TEMP_FILE" ]; then
# Sortiere, zähle und formatiere
sort "$TEMP_FILE" | \
awk -F'|' '{count[$1"|"$2]++; last[$1"|"$2]=$3} END {
for (key in count) {
split(key, parts, "|")
skill = parts[1]
project = parts[2]
printf "| %s | %s | %d | %s |\n", skill, project, count[key], last[key]
}
}' | \
sort -t'|' -k4 -r >> "$OUTPUT"
# Füge Statistiken hinzu
TOTAL_USAGE=$(wc -l < "$TEMP_FILE")
UNIQUE_SKILLS=$(cut -d'|' -f1 "$TEMP_FILE" | sort -u | wc -l)
UNIQUE_PROJECTS=$(cut -d'|' -f2 "$TEMP_FILE" | sort -u | wc -l)
cat >> "$OUTPUT" <<EOF
## Statistiken
- **Gesamt-Nutzungen:** ${TOTAL_USAGE}
- **Verschiedene Skills:** ${UNIQUE_SKILLS}
- **Verschiedene Projekte:** ${UNIQUE_PROJECTS}
## Top 5 Skills
EOF
# Top 5 Skills nach Häufigkeit
cut -d'|' -f1 "$TEMP_FILE" | sort | uniq -c | sort -rn | head -5 | \
awk '{printf "1. **%s** (%d Nutzungen)\n", $2, $1}' >> "$OUTPUT"
else
echo "<!-- Keine Skill-Nutzung gefunden -->" >> "$OUTPUT"
fi
# Cleanup
rm -f "$TEMP_FILE"
echo "✅ Skill-Usage-Matrix aktualisiert: $OUTPUT"
echo ""
echo "Statistiken:"
cat "$OUTPUT" | grep "^- \*\*"