Indépendant · Depuis 2009|~750€ / jour
Pourquoi j'audite ma configuration Claude Code, et pourquoi je publie l'auditeur

Pourquoi j'audite ma configuration Claude Code, et pourquoi je publie l'auditeur

Un jour de test, j'ai fait tourner un plugin qui ne faisait qu'une chose : imprimer quelques lignes de repérage sur sa sortie standard au démarrage d'une session. Dans la session suivante, ouverte sur le même projet, j'ai demandé à Claude ce qu'il savait de ce plugin. Il m'a récité mes propres lignes, mot pour mot. Elles n'étaient nulle part dans le code, dans aucun fichier qu'il aurait pu lire - seulement dans la sortie d'un hook.

C'est cette mesure qui a fixé une règle simple pour l'auditeur que je publie aujourd'hui : ce qu'un hook de plugin affiche entre dans le contexte du modèle. Chaque ligne imprimée se paie en tokens, à chaque session, dans chaque projet qui installe le plugin. Deadweight, l'auditeur en question, ne dit donc rien au démarrage. Il mesure en silence et range le résultat dans un cache hors du dépôt ; ce que vous voyez, c'est une barre d'état - gratuite, parce qu'elle tourne sur votre machine et jamais sur le réseau.

Ce que « deadweight » veut dire

J'écris des CLAUDE.md, des skills et des règles pour chaque projet depuis plusieurs mois maintenant - ce site en a un, mes projets clients aussi. Une configuration de ce genre ne fait que grossir : une règle de plus, un skill de plus, jusqu'au jour où plus personne ne sait quelle partie sert encore à quelque chose. Le mot anglais désigne exactement ça : du poids mort. Des instructions payées à chaque tour et que rien ne lit jamais. Une règle dont le motif ne correspond plus à aucun fichier. Un lien vers une page qui n'existe plus. Deux skills qui se disputent la même requête sans que personne ne l'ait remarqué.

Deadweight audite tout ça - le CLAUDE.md, les skills, les sous-agents, les règles, les hooks, les réglages - en dix familles de vérifications, du coût d'un bloc d'instructions jusqu'au secret en clair dans un .mcp.json. Il dit pourquoi chaque trouvaille compte, pas seulement qu'elle existe.

Mesuré sur 600 dépôts publics

Je l'ai mesuré sur des dépôts publics qu'il n'avait jamais vus : 600 en tout, en quatre échantillons de 150, aucun dépôt réutilisé d'un tour à l'autre. Sur le premier, 84 des 98 erreurs qu'il signalait étaient fausses ou mal classées. Une fois corrigé, le même échantillon donne 28 erreurs dans 10 dépôts, lues une par une à la main, toutes réelles. Au dernier tour, 69 de ses 82 erreurs sont justes en lecture stricte (version 0.17.0 du CHANGELOG, 27 septembre 2026), sous les 9 sur 10 fixés avant de mesurer : les ratés sont des faux exemples (liens de démonstration, fichiers d'exemple) qu'une règle de lecture ne peut que deviner.

Sur ces 600 dépôts, il a aussi repéré 2 identifiants en clair dans des .mcp.json versionnés ; j'en ai vérifié un, c'était une vraie clé. Le CHANGELOG garde la trace de chaque défaut trouvé dans l'outil lui-même.

Un seuil qui ne se relâche pas

--set-floor fige les compteurs du jour ; --check-floor fait échouer la CI le jour où ils remontent. Le dépôt de deadweight applique ce seuil à son propre code à chaque push. Ce site aussi : le dernier seuil, fixé le 29 septembre, est à 0 erreur et 0 avertissement, visible dans l'historique git du fichier qui le porte. Voici l'audit tel qu'il tourne sur ce dépôt.

Capture d'un terminal : audit.py lancé sur le dépôt e-xode.www, 51 groupes de vérifications, 0 erreur, 0 avertissement, 0 notice, seuil à zéro

Un vrai lancement d'audit.py sur le dépôt de ce site : 51 groupes de vérifications, 0 erreur, 0 avertissement, 0 notice et le seuil à zéro.

Installer, essayer, lire le code

Deadweight est en version 0.20.1, sous licence MIT. Il n'a pas encore atteint la version 1.0. Il ne demande qu'un python3 en 3.9 ou plus récent, aucune autre dépendance et rien ne part jamais sur le réseau. L'installation tient en deux commandes :

claude plugin marketplace add e-xode/deadweight --scope project
claude plugin install deadweight@e-xode --scope project

Les deux identifiants se ressemblent sans être la même chose : e-xode/deadweight est le dépôt GitHub, deadweight@e-xode est le plugin, tiré de la place de marché nommée e-xode. Avec --scope project sur les deux, quiconque clone le dépôt les retrouve. Ouvrez ensuite une nouvelle session (les plugins se lisent au démarrage) et demandez à Claude de lancer deadweight. Installé avant la 0.16.0 sous le nom deadweight@deadweight ? Il continue de fonctionner ; le README donne le passage au nouveau nom.

Le code est public sur GitHub, et la page produit détaille ce qu'il vérifie. Heureux d'échanger sur le sujet - sur ce qu'il trouve chez vous, ou sur la gouvernance qui va avec.

Commentaires (0)

Aucun commentaire pour le moment.