#!/bin/bash # Scannt Git-History und Memory-Logs nach wiederholten Aufgaben → Skill-Proposals # Wird automatisch wöchentlich via Cron ausgeführt set -e VAULT="$HOME/Work/claude-vault" PROPOSALS="$VAULT/skills/proposals" THRESHOLD=3 # Mindestanzahl Wiederholungen für Proposal echo "🔍 Scanne nach wiederholten Aufgaben..." mkdir -p "$PROPOSALS" # Temporäre Datei für Aufgaben-Tracking TEMP_TASKS="/tmp/task-detection-$$.txt" > "$TEMP_TASKS" # 1. Analysiere Memory-Logs nach Beschreibungen if [ -d "$VAULT/memory/log" ]; then echo " 📝 Scanne Memory-Logs..." find "$VAULT/memory/log" -name "*.md" -type f | while read log_file; do # Extrahiere Beschreibungen aus Session-Logs grep "^\*\*Beschreibung:\*\*" "$log_file" 2>/dev/null | \ sed 's/\*\*Beschreibung:\*\* //' | \ tr '[:upper:]' '[:lower:]' | \ sed 's/[[:punct:]]//g' >> "$TEMP_TASKS" || true done fi # 2. Analysiere Git-Commit-Messages (falls Vault ein Git-Repo ist) if [ -d "$VAULT/.git" ]; then echo " 🔗 Scanne Git-Commits (letzte 30 Tage)..." git -C "$VAULT" log --since="30 days ago" --pretty=format:"%s" 2>/dev/null | \ grep -iE '(add|create|implement|fix|update|improve)' | \ tr '[:upper:]' '[:lower:]' | \ sed 's/[[:punct:]]//g' >> "$TEMP_TASKS" || true fi # 3. Zähle Wiederholungen und erstelle Proposals if [ -s "$TEMP_TASKS" ]; then echo " 🎯 Analysiere Muster (Threshold: ${THRESHOLD}x)..." # Finde Tasks die >= THRESHOLD mal vorkommen sort "$TEMP_TASKS" | uniq -c | sort -rn | \ awk -v threshold="$THRESHOLD" '$1 >= threshold {$1=""; print $0}' | \ sed 's/^ *//' | \ while IFS= read -r task_pattern; do # Skip wenn leer oder zu kurz [ -z "$task_pattern" ] && continue WORD_COUNT=$(echo "$task_pattern" | wc -w | xargs) [ "$WORD_COUNT" -lt 2 ] && continue # Generiere Skill-Namen aus Pattern SKILL_NAME=$(echo "$task_pattern" | \ head -c 50 | \ tr ' ' '-' | \ tr -cd '[:alnum:]-' | \ sed 's/--*/-/g' | \ sed 's/^-//' | \ sed 's/-$//') # Verhindere zu generische Namen if echo "$SKILL_NAME" | grep -qE '^(add|create|fix|update|implement)$'; then continue fi DATE=$(date +%Y-%m-%d) PROPOSAL_FILE="$PROPOSALS/${DATE}_${SKILL_NAME}.md" # Erstelle Proposal nur wenn noch nicht vorhanden if [ ! -f "$PROPOSAL_FILE" ]; then COUNT=$(grep -c "$task_pattern" "$TEMP_TASKS") cat > "$PROPOSAL_FILE" < ${task_pattern} **Häufigkeit:** ${COUNT}x ## Vorgeschlagener Skill ### Name \`${SKILL_NAME}\` ### Beschreibung (TODO) ### Argument-Hint (TODO) \` [optional-arg]\` ### Allowed-Tools (TODO) \`Read, Write, Edit, Glob, Grep\` ## Implementation (TODO) ### Schritt 1: Template erstellen ### Schritt 2: Prompt schreiben ### Schritt 3: Testen ### Schritt 4: Dokumentieren ## Entscheidung - [ ] **Umsetzen** → Skill erstellen - [ ] **Verwerfen** → Proposal löschen - [ ] **Später** → In proposals/ belassen ## Notizen EOF echo " ✨ Neues Proposal erstellt: ${SKILL_NAME} (${COUNT}x erkannt)" fi done # Zeige Zusammenfassung TOTAL_PROPOSALS=$(find "$PROPOSALS" -name "*.md" -type f | wc -l | xargs) NEW_PROPOSALS=$(find "$PROPOSALS" -name "${DATE}_*.md" -type f | wc -l | xargs) echo "" echo "✅ Skill-Detection abgeschlossen" echo " - Neue Proposals: $NEW_PROPOSALS" echo " - Gesamt offen: $TOTAL_PROPOSALS" if [ "$NEW_PROPOSALS" -gt 0 ]; then echo "" echo "📋 Neue Proposals:" find "$PROPOSALS" -name "${DATE}_*.md" -type f -exec basename {} .md \; | sed "s/^${DATE}_/ - /" fi else echo "ℹ️ Keine wiederholten Aufgaben gefunden (keine Daten in Memory-Logs)" fi # Cleanup rm -f "$TEMP_TASKS" echo "" echo "Tipp: Reviewe Proposals mit: vault-proposals"