Compétence d'extraction de données de session
Responsabilité centrale
Fournir un accès brut aux journaux de session Claude Code stockés dans ~/.claude/projects/{project-dir}/{session-id}.jsonl.
Principe clé : Cette compétence extrait uniquement les données - retourner les données brutes aux compétences appelantes pour analyse. Ne pas analyser ou interpréter au sein de cette compétence.
Scripts disponibles
Tous les scripts sont situés dans le sous-répertoire scripts/ relatif à cette compétence.
1. locate-logs.sh
Trouver le répertoire de journaux ou le chemin d'accès à un fichier de session spécifique.
# Obtenir le répertoire de journaux pour le répertoire de travail actuel
scripts/locate-logs.sh
# Obtenir le répertoire de journaux pour un projet spécifique
scripts/locate-logs.sh /path/to/project
# Obtenir le chemin d'accès au fichier de journal de session spécifique
scripts/locate-logs.sh /path/to/project abc123-session-id
À utiliser quand : Construire des chemins dynamiques, vérifier l'existence des journaux avant le traitement.
2. list-sessions.sh
Énumérer toutes les sessions avec métadonnées (ID, taille, lignes, date, branche).
# Lister toutes les sessions (format tableau)
scripts/list-sessions.sh
# Sortie JSON
scripts/list-sessions.sh --format json
# Trier par taille ou lignes
scripts/list-sessions.sh --sort size
scripts/list-sessions.sh --sort lines
# Projet spécifique
scripts/list-sessions.sh /path/to/project
Formats de sortie : table, json, csv
Options de tri : date, size, lines
À utiliser quand : Commencer une rétrospective, afficher les sessions disponibles à l'utilisateur, vérifier les sessions récentes.
3. extract-data.sh
Parser les journaux JSONL et extraire des types de données spécifiques.
Types d'extraction disponibles :
metadata- Infos de session (ID, horodatages, branche, répertoire de travail)user-prompts- Tous les messages utilisateurtool-usage- Statistiques d'appels d'outilserrors- Appels d'outils échoués avec horodatagesthinking- Blocs de réflexion (si la réflexion étendue est activée)text-responses- Réponses texte de l'assistant uniquementstatistics- Métriques de session (compte de messages, appels d'outils, erreurs)all- Extraction combinée
# Extraire d'une session spécifique
scripts/extract-data.sh --type statistics --session SESSION_ID
scripts/extract-data.sh --type errors --session SESSION_ID
scripts/extract-data.sh --type tool-usage --session SESSION_ID
# Extraire de toutes les sessions (omettre --session)
scripts/extract-data.sh --type statistics
# Limiter la sortie
scripts/extract-data.sh --type user-prompts --limit 10
# Projet différent
scripts/extract-data.sh --type metadata --project /path/to/project
À utiliser quand : Besoin de données spécifiques sans charger le journal complet, générer des métriques, identifier les erreurs.
4. filter-sessions.sh
Trouver les sessions correspondant aux critères.
Options de filtre :
--since DATE- Sessions modifiées depuis la date ("2 days ago", "2025-10-20")--until DATE- Sessions modifiées jusqu'à la date--branch NAME- Sessions sur une branche git spécifique--min-size SIZE- Taille minimale du fichier ("1M", "500K")--max-size SIZE- Taille maximale du fichier--min-lines N- Nombre minimum de lignes--max-lines N- Nombre maximum de lignes--has-errors- Uniquement les sessions avec appels d'outils échoués--keyword WORD- Sessions contenant le mot-clé
Formats de sortie : list, paths, json
# Sessions récentes
scripts/filter-sessions.sh --since "2 days ago"
# Grandes sessions avec erreurs
scripts/filter-sessions.sh --min-lines 500 --has-errors
# Sessions sur la branche main la semaine dernière
scripts/filter-sessions.sh --branch main --since "7 days ago"
# Sessions contenant le mot-clé
scripts/filter-sessions.sh --keyword "authentication"
# Obtenir uniquement les chemins (pour pipe)
scripts/filter-sessions.sh --since "1 day ago" --format paths
À utiliser quand : L'utilisateur demande l'analyse de sessions récentes, trouver des sessions pour une fonctionnalité/branche spécifique, identifier les sessions problématiques.
Processus de travail
Analyse d'une seule session
# 1. Vérifier que la session existe et obtenir les métadonnées
scripts/extract-data.sh --type metadata --session SESSION_ID
# 2. Obtenir les statistiques de session (pour déterminer la taille)
scripts/extract-data.sh --type statistics --session SESSION_ID
# 3. Extraire les données spécifiques selon les besoins
scripts/extract-data.sh --type errors --session SESSION_ID
scripts/extract-data.sh --type tool-usage --session SESSION_ID
Analyse de plusieurs sessions
# 1. Filtrer pour trouver les sessions pertinentes
scripts/filter-sessions.sh --since "7 days ago" --branch main
# 2. Extraire les données de toutes les sessions filtrées
scripts/extract-data.sh --type statistics
# 3. Ou itérer sur le sous-ensemble filtré
SESSIONS=$(scripts/filter-sessions.sh --has-errors --format paths)
for session in $SESSIONS; do
SESSION_ID=$(basename "$session" .jsonl)
scripts/extract-data.sh --type errors --session $SESSION_ID
done
Modèle d'intégration pour les compétences appelantes
Quand une autre compétence (comme la rétrospective) a besoin de données de session :
- Découverte : Utiliser
list-sessions.shoufilter-sessions.shpour trouver les sessions pertinentes - Vérification de la taille : Utiliser
extract-data.sh --type statisticspour déterminer la complexité de la session - Extraction ciblée : Utiliser
extract-data.shavec des types spécifiques pour les données nécessaires - Retourner les données brutes : Retourner les données extraites à l'appelant pour analyse
Exemple :
# Obtenir l'ID de la session la plus récente
LATEST=$(scripts/list-sessions.sh --format json --sort date | jq -r '.[0].sessionId')
# Vérifier la taille avant le traitement
STATS=$(scripts/extract-data.sh --type statistics --session $LATEST)
LINE_COUNT=$(echo "$STATS" | grep "Total Lines:" | awk '{print $3}')
# Extraire en fonction de la taille
if [ "$LINE_COUNT" -lt 500 ]; then
# Petite session : extraire les détails
scripts/extract-data.sh --type errors --session $LATEST
scripts/extract-data.sh --type tool-usage --session $LATEST
else
# Grande session : résumé uniquement
scripts/extract-data.sh --type statistics --session $LATEST
fi
Gestion du budget de contexte
CRITIQUE : Cette compétence est conçue pour l'efficacité de contexte
Utiliser le traitement Bash, pas l'outil Read
# BON : Extraire via bash, reste dans le contexte bash
STATS=$(scripts/extract-data.sh --type statistics)
# Traiter $STATS en bash
# MAUVAIS : Lire les fichiers journaux complets
Read ~/.claude/projects/-path/session.jsonl
# Charge le fichier entier dans le contexte inutilement
Vérifier la taille de la session avant le chargement
Ne jamais charger les journaux de session complets dans le contexte sans vérifier d'abord la taille.
# Toujours vérifier les statistiques en premier
scripts/extract-data.sh --type statistics --session SESSION_ID
# Affiche le nombre total de lignes, les comptes de messages, etc.
# Règles de décision :
# - Petit (<500 lignes) : Peut extraire les détails en toute sécurité
# - Moyen (500-2000 lignes) : Utiliser l'extraction sélective
# - Grand (>2000 lignes) : Statistiques uniquement, offrir des analyses approfondies ciblées
Retourner les données brutes à l'appelant
Cette compétence doit :
- Exécuter des scripts bash pour extraire les données
- Retourner la sortie texte brute à la compétence appelante
- Laisser la compétence appelante gérer le contexte pour l'analyse
- Éviter l'interprétation ou l'analyse au sein de cette compétence
Format de sortie
Retourner les données brutes extraites avec une mise en forme minimale :
# Sortie de statistiques
Session: abc123-def456-ghi789
Total Lines: 450
User Messages: 12
Assistant Messages: 23
Tool Calls: 45
Errors: 2
# Sortie d'utilisation d'outils
=== Tool Usage: abc123-def456-ghi789 ===
Read 15
Bash 12
Edit 8
Grep 5
Write 3
Pas d'analyse, pas d'interprétation - juste l'extraction de données.
Gestion des erreurs
Tous les scripts se terminent avec un statut non zéro en cas d'erreurs et produisent une sortie vers stderr.
Vérifier le statut de sortie avant le traitement :
if ! scripts/locate-logs.sh /path/to/project &>/dev/null; then
# Gérer : le répertoire de journaux n'existe pas
echo "Project has no session logs yet"
fi
if ! scripts/extract-data.sh --type metadata --session abc123 &>/dev/null; then
# Gérer : la session n'existe pas
echo "Session not found"
fi
Messages d'erreur courants :
Error: Logs directory not found: ~/.claude/projects/-pathError: Session file not found: ~/.claude/projects/-path/session-id.jsonlError: --type is requiredError: jq is required but not installed. Install with: brew install jq
Calcul du chemin
Claude Code stocke les sessions avec ce modèle :
~/.claude/projects/{project-identifier}/{session-id}.jsonl
Où {project-identifier} est calculé en remplaçant tous les / par - dans le chemin du répertoire de travail absolu :
# Exemple : /Users/user/project → -Users-user-project
PROJECT_ID=$(echo "${PWD}" | sed 's/\//\-/g')
LOGS_DIR="${HOME}/.claude/projects/${PROJECT_ID}"
Tous les scripts utilisent locate-logs.sh en interne pour un calcul de chemin cohérent.
Anti-modèles à éviter
Ne pas :
- Charger les journaux de session complets dans le contexte sans vérifier la taille
- Parser JSONL manuellement - utiliser
extract-data.sh - Coder en dur les chemins de journaux - utiliser
locate-logs.sh - Analyser ou interpréter les données - retourner les données brutes à l'appelant
- Traiter les grands journaux de manière synchrone sans sensibiliser l'utilisateur
Faire :
- Vérifier la taille de la session avec
--type statisticsavant le traitement - Utiliser le type d'extraction approprié pour les besoins spécifiques
- Filtrer les sessions avant l'extraction pour l'efficacité
- Diffuser/canaliser les données lors du traitement de plusieurs sessions
- Retourner les données brutes pour que l'appelant les analyse
Critères de réussite
L'utilisation efficace de cette compétence signifie :
- Découverte efficace : Trouver rapidement les sessions pertinentes sans recherche manuelle
- Extraction ciblée : Obtenir exactement les données nécessaires, rien de plus
- Préservation du contexte : Éviter de charger les données inutiles dans le contexte
- Accent sur les données brutes : Retourner les données non traitées pour que l'appelant les analyse
- Support multi-sessions : Gérer efficacement l'analyse sur plusieurs périodes ou branches
Dépendances
Requises :
bash(v4.0+)jq(analyseur JSON)
Les scripts vérifient jq et fournissent des instructions d'installation si manquant :
Error: jq is required but not installed. Install with: brew install jq