Croyez le ou non, mais il y a un Tamagotchi caché dans Claude Code. Ouais ouais.
Edit : Et devinez quoi... ce buddy system dont je parlais dans cet article est officiellement sorti le 1er avril comme poisson d'avril d'Anthropic. Tapez /buddy dans Claude Code et vous aurez votre propre Tamagotchi de terminal, avec espèce, stats et rareté basées sur votre user ID. Le truc cool c'est que comme moi je l'ai implémenté sous forme de skill, rien ne vous empêche de le réutiliser dans d'autres outils compatibles comme Codex ou n'importe quel CLI qui supporte les skills Claude. Et contrairement à un vrai poisson d'avril, celui-là ne disparaîtra pas demain.
Quand le code source de Claude Code a fuité fin mars via une source map oubliée dans le package npm (512 000 lignes de TypeScript, rien que ça), les gens se sont surtout focalisés sur les prompts système et les techniques anti-hallucination. Mais dans un coin du repo, y'a un mystérieux dossier src/buddy/ qui implémente en réalité un système de compagnon façon tirage aléatoire à la Pokémon.
Et c'est franchement bien foutu vous allez voir.
En fait, votre identifiant utilisateur est hashé avec SHA-256 et salé, puis les 4 premiers octets alimentent un PRNG déterministe appelé Mulberry32. Ce générateur roll ensuite dans l'ordre les paramètres suivants : la rareté (60% common, 25% uncommon, 10% rare, 4% epic, 1% legendary), l'espèce parmi 18 (duck, cat, dragon, ghost, axolotl, capybara, robot, chonk...), le style des yeux (· ✦ × ◉ @ °), le chapeau (couronne, haut-de-forme, hélice, auréole...) et enfin 5 stats : DEBUGGING, PATIENCE, CHAOS, WISDOM et SNARK. Même utilisateur = même créature puisque tout est recalculable depuis le hash.
Chaque espèce a également 3 frames d'animation ASCII de 5 lignes sur 12 caractères. Le système injecte les yeux dans des placeholders-, colle le chapeau sur la première ligne si elle est vide, et boucle une séquence idle. Au premier lancement, Claude génère ainsi un nom et une personnalité en 2 phrases (le "soul"), stocké dans un companion.json local. Le prompt système dit ensuite à Claude : "Un petit [espèce] nommé [nom] est assis à côté du champ de saisie. Tu n'es PAS [nom]. C'est un observateur séparé."
Par contre, faut pas s'emballer. C'est pas un vrai Tamagotchi. On ne peut donc pas le nourrir pour le moment, ni le faire évoluer, et encore moins le laisser mourir. Et les stats ne bougent pas non plus. C'est plus un animal totem qu'un pet interactif. Un genre de carte Pokémon ASCII déterministe, si vous voulez.
Le truc, c'est que tout ça est bloqué derrière un flag BUDDY, réservé uniquement aux employés Anthropic. Et bien sûr le code est nettoyé du build npm public. Donc les clampins que nous sommes n'y avons pas accès pour le moment. Mais d'après les commentaires dans le code, le teaser buddy était prévu pour sortir début avril avec un lancement complet calé pour mai. Sauf que le leak a grillé la surprise avant qu'Anthropic puisse l'annoncer. Snif...
Et comme j'avais pas envie de recompiler Claude Code à partir de fichiers piratés (merci mais non merci), j'ai fait autrement. J'ai pris le port Rust du buddy system sur GitHub, j'ai analysé l'algo Mulberry32 et la logique de roll, et j'ai recréé le tout en 50 lignes de JavaScript + un skill Claude Code. Même algo de hash, mêmes tables de raretés, mêmes sprites ASCII. Du coup si vous utilisez Claude Code avec des skills customs, vous pouvez taper /buddy et obtenir votre propre compagnon. Le mien c'est un chat common aux yeux ronds avec 68 en debugging et 1 en wisdom. Il s'appelle Glitch.
Je pense que c'est aussi un truc qu'on peut faire évoluer par exemple pour le nourrir, le faire dormir, éventuellement le laisser mourir, etc. Mais bon j'ai d'autres choses à faire ^^ .
Et comme c'est pas possible d'animer votre mascotte directement dans claude code, je vous ai fait aussi un petit JS à appeler comme ceci qui fera bouger votre animal :
node tools/buddy-roller.cjs animate
Bref, si vous voulez votre animal totem ASCII, je vous mets le skill et les JS dans un zip ci-joint tout en français évidemment. Et si vous tombez sur un capybara legendary shiny sachez que y'a 0.01% de chances que ça arrive, et que vous avez le cul bordé de nouilles comme on dit.