L'utilitaire baton transfère une session entre 5 agents IA en ligne de commande sans perte de contexte
L'auteur de l'utilitaire baton, écrit en Go, a appris aux agents en ligne de commande Claude Code, Codex, Antigravity CLI, Pi et Hermes à reprendre les sessions les uns des autres lorsque l'un d'eux a épuisé son quota de 5 heures. L'outil lit les journaux stockés sur le disque au lieu de demander au modèle de résumer l'historique. Il ne brûle donc pas de coûteux tokens de sortie et conserve les numéros de ligne et les hypothèses écartées. Le nouvel agent reçoit la synthèse produite depuis le dernier /compact, tandis que le dump complet est stocké dans un dossier temporaire. • Un instantané chiffré pour un autre PC : AES-256-GCM, la clé n'est pas envoyée au serveur • Un skill SKILL.md plutôt qu'un serveur MCP : une seule ligne de description dans le contexte • Code reposant sur la bibliothèque standard de Go, licence MIT, compilation en trois commandes
Traité par IA depuis Habr AI ; édité par Hamidun News
Les quotas de 5 heures des forfaits à 20 $ s'épuisent généralement en pleine session de débogage, et il n'existe pas de passerelle native entre Claude Code, Codex, Antigravity CLI (agy), Pi et Hermes. L'auteur de l'utilitaire baton a donc écrit en Go un outil en ligne de commande qui récupère la session dans les journaux locaux d'un agent et la transmet à un autre, sur la même machine ou, via le réseau, sur un autre ordinateur. Le code source est publié sur GitHub sous licence MIT.
Pourquoi HANDOFF.md ne suffit pas
Le conseil habituel consiste à demander à l'agent, avant de passer la main, de consigner l'état de la tâche, les étapes et le plan dans un fichier HANDOFF.md. L'auteur y voit trois problèmes.
Premièrement, une fois la limite atteinte, l'agent ne répond plus et personne ne peut plus écrire le bilan. Deuxièmement, même en anticipant, le modèle résume de mémoire sa propre histoire. La fenêtre de contexte contient de 200 000 à 1 million de tokens, alors qu'une seule réponse est limitée à quelques dizaines de milliers : le résumé est donc forcément compressé.
Les arguments exacts des commandes, les numéros de ligne, les hypothèses écartées et les petites corrections disparaissent. Troisièmement, les tokens de sortie coûtent chez les fournisseurs environ cinq fois plus cher que les tokens d'entrée, et ils entament plus vite le quota restant.
Pour Claude Code avec plusieurs comptes, l'option --resume existe, mais lorsqu'on change de compte, le cache serveur des prompts est réinitialisé, et le retraitement d'un long historique consomme une part notable du nouveau quota. Cette option ne permet pas de basculer vers l'agent d'un autre éditeur.
Comment baton construit sa synthèse à partir des journaux
Chaque agent écrit déjà un journal détaillé sur le disque. Claude Code stocke du JSONL dans ~/.claude/projects, Codex des fichiers rollout dans ~/.codex/sessions, agy un transcript.jsonl et des instantanés Protobuf dans ~/.gemini/antigravity-cli, Pi un JSONL v3 arborescent avec les champs id et parentId, Hermes une base SQLite, state.db. La commande /compact n'efface rien : les journaux fonctionnent en ajout, et une entrée contenant la synthèse de la conversation précédente est ajoutée au flux.
baton parcourt le journal depuis la première entrée (dans Pi, le long de la branche active de l'arbre ; dans Hermes, le long de la chaîne parent_session_id). Il dresse la liste des fichiers modifiés et des commandes exécutées, et vide le tampon des anciennes répliques lorsqu'il rencontre un marqueur de compression. La synthèse opérationnelle contient le texte de la dernière compression et l'intégralité des messages qui la suivent.
L'historique complet et les longues sorties de commandes sont déposés dans /tmp/baton-handoff/<id-session>/ (sous Windows, dans %TEMP%). Les dossiers de plus de 24 heures sont supprimés, et l'arborescence de travail reste propre pour git status. Le chat affiche les métadonnées, l'état du dépôt, les fichiers concernés, les dernières commandes et les chemins vers les dumps.
L'agent va chercher le détail voulu dans full_dialogue.md ou avec la commande baton turn.
Le fonctionnement repose sur le couple save et load. On nomme la session avec la commande native de l'agent ou via baton save, puis, dans un autre agent, on écrit « Продолжи сессию auth-refactor » ou « Подхвати последнюю сессию » (« Reprends la session auth-refactor » ou « Reprends la dernière session »). Si aucun nom n'a été donné, baton list affiche des candidats numérotés avec le dossier de travail, l'heure de modification et la première requête.
L'auteur a délibérément renoncé à un serveur MCP. Un tel serveur démarre à chaque session et reste en mémoire, et les descriptions de ses fonctions s'ajoutent au prompt système et consomment des tokens d'entrée, même quand aucune session n'est transférée pendant des semaines. Un skill SKILL.md ne garde qu'une seule ligne dans le contexte, et l'utilitaire se lance ponctuellement puis se termine aussitôt. Les cinq agents savent charger des skills à la demande.
Transfert vers un autre portable sans commit
Le second scénario consiste à quitter son PC fixe et à poursuivre sur un portable, sans pousser du code brut dans une branche partagée. La commande baton push regroupe dans une archive tar.gz l'historique de la session, les fichiers modifiés et les nouveaux fichiers non suivis (d'après l'historique d'écriture de l'agent et l'état de Git, Fossil ou SVN), les fichiers de règles locaux (CLAUDE.md, AGENTS.md, GEMINI.md, .cursorrules, .agents/rules/) et une copie des instructions globales.
L'archive est chiffrée côté client avec AES-256-GCM, à l'aide d'une clé aléatoire de 256 bits, puis envoyée vers paste.rs (jusqu'à 10 MiB) ou, en cas d'échec, vers dpaste.org, puis termbin.com:9999. Une variante avec un dossier de synchronisation local est également prévue : Dropbox, Nextcloud, Syncthing. La clé, qui correspond à la fin du jeton après le caractère #, n'arrive pas sur le serveur du service d'échange. Sans elle, le paquet ressemble à du bruit aléatoire.
Sur le second ordinateur, il suffit de coller le prompt fourni dans n'importe quel agent : celui-ci lit INSTALL.md, compile l'utilitaire et restaure la session. Si un fichier local diffère de celui qui doit être écrasé, une copie portant l'extension .baton.bak est créée à côté. Les règles globales sont extraites dans un répertoire temporaire et ne touchent pas aux configurations système de la seconde machine.
Installation, mise à jour et limites
La compilation tient en trois commandes : git clone, go build -ldflags="-s -w" et baton install. Il n'y a aucune dépendance externe, seulement la bibliothèque standard de Go. baton install copie SKILL.md dans les répertoires de skills des cinq agents et ajoute la commande slash /baton. L'auteur recommande de compiler depuis les sources plutôt que d'utiliser les versions précompilées. La vérification des mises à jour s'exécute en tâche de fond, au plus une fois par jour. baton update recompile l'utilitaire via go install avec vérification auprès de sum.golang.org, ou télécharge le binaire depuis GitHub Releases et contrôle son SHA-256.
Il y a aussi des limites. Les pastebins publics restent une infrastructure tierce, et le jeton de transfert est de fait un secret, puisqu'il contient la clé de déchiffrement. Les formats de journaux sont internes et peuvent changer à la mise à jour de n'importe quel agent. La vitesse « en une fraction de seconde » est une estimation de l'auteur, sans mesure indépendante. Il reconnaît lui-même qu'on peut construire un outil similaire en une journée et propose de voir la principale valeur du projet dans l'analyse des formats de stockage des sessions.
- 1 nov. 2026Les modèles locaux battus par Opus et Codex : 0,21 sur MacBook contre 1,00 pour Codex
- 1 nov. 2026Kimi obtient 96,2 % à un test d'analytique sur une base 1C et s'impose comme solution de repli en cas de blocage de Claude
- 1 nov. 2026OpenAI réécrit les règles de comportement de GPT : cinq valeurs et une chaîne de priorités
- 1 nov. 2026Google reconnaît que l'AI Mode réduit les revenus de la recherche, l'action chute de 15%
Questions clés sur cet article
Pourquoi HANDOFF.md ne suffit pas?
Le conseil habituel consiste à demander à l'agent, avant de passer la main, de consigner l'état de la tâche, les étapes et le plan dans un fichier HANDOFF.md. L'auteur y voit trois problèmes. Premièrement, une fois la limite atteinte, l'agent ne répond plus et personne ne peut plus écrire le bilan. Deuxièmement, même en anticipant, le modèle résume de mémoire sa propre histoire. La fenêtre de contexte contient de 200 000 à 1 million de tokens, alors qu'une seule réponse est limitée à quelques dizaines de milliers : le résumé est donc forcément compressé. Les arguments exact
Comment baton construit sa synthèse à partir des journaux?
Chaque agent écrit déjà un journal détaillé sur le disque. Claude Code stocke du JSONL dans ~/.claude/projects, Codex des fichiers rollout dans ~/.codex/sessions, agy un transcript.jsonl et des instantanés Protobuf dans ~/.gemini/antigravity-cli, Pi un JSONL v3 arborescent avec les champs id et parentId, Hermes une base SQLite, state.db. La commande /compact n'efface rien : les journaux fonctionnent en ajout, et une entrée contenant la synthèse de la conversation précédente est ajoutée au flux. baton parcourt le journal depuis la première entrée (dans Pi, le long de la bran
Que sait-on sur Transfert vers un autre portable sans commit ?
Le second scénario consiste à quitter son PC fixe et à poursuivre sur un portable, sans pousser du code brut dans une branche partagée. La commande baton push regroupe dans une archive tar.gz l'historique de la session, les fichiers modifiés et les nouveaux fichiers non suivis (d'après l'historique d'écriture de l'agent et l'état de Git, Fossil ou SVN), les fichiers de règles locaux (CLAUDE.md, AGENTS.md, GEMINI.md, .cursorrules, .agents/rules/) et une copie des instructions globales. L'archive est chiffrée côté client avec AES-256-GCM, à l'aide d'une clé aléatoire de 256 b
Build & Ship Production AI Agents Without Boilerplate Code
Start your free 72-hour trial at Hamidun Academy (academy.hamidun.com) — interactive lessons on Claude Code & Cursor, live Tech Radar, and production agent templates.
L'essentiel de l'IA — une fois par semaine
Sept actus qui ont vraiment compté, choisies à la main. Sans bruit ni communiqués.
C'est fait ! Vérifiez votre boîte mail pour la confirmation.