Aller au contenu

Claude Code Telemetry

Chaque fois qu’une session Claude Code demarre sur ce projet, un hook shell capture le contexte (branche, issue, repo) et le transmet a N8N. Quand la session se termine, un second hook collecte les metriques Prometheus (temps actif, cout, tokens, lignes de code), reconstruit les segments de branches parcourus, et synchronise le tout vers les taches Odoo correspondantes.

Le resultat : chaque tache Odoo affiche le temps Claude passe dessus, le cout API, le nombre de tokens, et les lignes modifiees — automatiquement, sans saisie manuelle.

WorkflowNodesDeclenchementRole
Session Start4Webhook POSTEnregistre la session active
Session End (principal)30Webhook POSTMetriques + sync Odoo
Orphan Detection~20Schedule 12hRecupere les sessions crashees
Session Categorizer17Dimanche 23hCategorise les sessions non classees
Session Metrics Updater7Webhook POSTMise a jour enrichie (backfill)

Session End · 30 nodes

Session Start · 4 nodes

Claude Code · démarre

Hook SessionStart

Dedup

Register Active Session

travail · commits · changements de branche

Claude Code · se termine

Hook SessionEnd · git reflog + git log

Dedup

Prometheus Query

Split Metrics par segment

Save Data Table

Loop par issue

Find/Create Odoo Task → Update

Create Session Detail

Cleanup Active Session

Orphan Detection · scheduled


Sans telemetrie, impossible de savoir combien de temps et d’argent Claude Code consomme par tache. On sait qu’on a utilise l’outil, mais pas sur quoi ni combien. Pour un freelance qui facture du temps, c’est un angle mort.

ProblemeSans telemetrieAvec telemetrie
Cout par tacheRelever manuellement la console APICout USD par issue, par modele
Temps passeEstimer de memoireTemps actif Prometheus + timesheets Odoo
Attribution”J’ai travaille sur le projet”Segments par branche, par issue
Sessions perduesCrash = donnees perduesOrphan Detection recupere les metriques
CategorisationBranches dev sans contexteIA categorise en dev/docs/refactor/fix/test
MetriqueSourcePrecision
Temps actif (secondes)Prometheus OTELPar session, par modele
Cout API (USD)Prometheus OTEL4 decimales, par modele
Tokens (input/output/cache)Prometheus OTELPar type, par modele
Lignes ajoutees/supprimeesgit logPar commit

C’est le hook le plus complexe. Au moment ou Claude Code se termine, il :

  1. Lit le fichier d’etat cree au demarrage (issue_id gelee, timestamp)
  2. Reconstruit les segments de branches via git reflog --since
  3. Collecte les commits via git log --since --all
  4. Enrichit chaque commit avec la branche et l’issue correspondante
  5. Construit un TLDR (fichiers changes, insertions, deletions, type dominant)
  6. Envoie le payload enrichi a N8N

Le point cle : l’issue_id est gelee au demarrage de la session. Meme si l’utilisateur change de branche en cours de route, le systeme sait a quelle tache attribuer le travail.

Quand une session traverse plusieurs branches (par exemple feature/176-fix pendant 40 minutes puis dev pendant 20 minutes), les metriques sont reparties proportionnellement :

Session totale : 60 minutes
Branch feature/176 : 40 min → 66% des metriques
Branch dev : 20 min → 33% des metriques
Si cout total = 0.15 USD :
Issue #176 → 0.10 USD
Branche dev → 0.05 USD (tache generique)

Les sessions sans issue (travail sur dev, main, ou branches sans numero) sont redirigees vers des taches generiques : une par combinaison (repo + categorie). La categorie est determinee par le type dominant des commits :

Commits dominantCategorieTache generique
feat, choredev”Dev sans issue (features & chores)“
docsdocs”Maintenance documentation”
refactorrefactor”Refactoring”
fixfix”Corrections (sans issue)“
testtest”Testing”

Chaque tache Odoo recoit 11 champs enrichis automatiquement :

ChampTypeDescription
x_claude_time_totalFloatHeures actives cumulees
x_claude_cost_totalFloatCout USD cumule
x_claude_token_totalIntegerTokens cumules
x_claude_sessionsIntegerNombre de sessions
x_claude_lines_addedIntegerLignes ajoutees
x_claude_lines_removedIntegerLignes supprimees
x_claude_cost_by_modelJSONVentilation par modele
x_claude_tokens_inputIntegerTokens d’entree
x_claude_tokens_outputIntegerTokens de sortie
x_claude_tokens_cacheIntegerTokens cache
x_claude_last_sessionDatetimeDerniere session

Les champs sont cumulatifs : chaque session ajoute ses metriques a celles deja presentes sur la tache.

Toutes les 12 heures, un workflow verifie si des sessions sont restees bloquees dans la table des sessions actives (signe d’un crash Claude Code). Les sessions datant de plus de 6 heures sont considerees orphelines.

Le workflow recupere les metriques Prometheus (si encore disponibles — retention 15 jours), les sauvegarde avec le statut orphaned, et met a jour la tache Odoo correspondante. Rien n’est perdu.

Chaque dimanche a 23h, le Session Categorizer utilise Claude pour analyser les sessions non categoriees. L’IA recoit un batch de sessions avec leur “topic” (premier message utilisateur) et peut :

  • Attribuer une categorie (dev, docs, refactor, fix, test)
  • Renommer la tache Odoo de maniere descriptive
  • Relinkquer une session vers une tache issue si elle a ete mal attribuee

LimiteImpactMitigation
Prometheus 15j retentionMetriques perdues apres 15jSauvegardees dans Data Table des la fin de session
Pas de metriques par branchePrometheus n’a que le session_idSplit proportionnel par duree de segment
Hook shell uniquementDepend de bash et gitScripts testes et deployes via scripts/claude-hooks/

Si besoin de dashboard temps reel :

  • Les metriques Prometheus sont deja disponibles dans Grafana
  • Ajouter un dashboard “Claude Code Sessions” avec cout, tokens, et sessions actives
  • Alerter si le cout depasse un seuil quotidien

Si multi-utilisateurs :

  • Ajouter un champ user_id dans le payload
  • Repartir les couts par developpeur
  • Dashboard comparatif dans Odoo

Si besoin d’analyse fine :

  • Stocker les transcripts complets (actuellement seul le “topic” est garde)
  • Analyser les patterns d’utilisation : quels prompts coutent le plus cher
  • Optimiser les caches et le choix de modele