À propos du projet
tg-cli (commande tg) est un pont Telegram pour agents de codage IA. Il se compose de deux parties : un CLI sortant que les agents appellent pour envoyer des mises à jour, et un démon entrant, tg-ctl, qui renvoie vos réponses depuis un téléphone vers une session d'agent en cours.
Sortant. Les agents envoient du texte, des rapports HTML, des photos et des fichiers. Les balises HTML sont auto-détectées et un préfixe emoji personnalisé est ajouté pour l'agent détecté. Les fichiers Markdown sont convertis en PDF via pandoc et Chrome headless avant l'envoi, avec un repli vers le fichier original en cas d'échec. Les chemins de fichiers mentionnés dans le texte sont détectés et joints automatiquement par une recherche récursive dans l'arborescence de travail, le chemin restant dans la légende.
Plusieurs gardes s'exécutent avant l'envoi. Un message trop long pour Telegram (plus de six fragments) est refusé avec le nombre de caractères et de fragments. Les fichiers sensibles ne sont jamais joints : fichiers .env, clés privées SSH, pem/key/p12/pfx/ppk, fichiers rc de credentials, historiques de shell, tfvars, credentials.json et kubeconfig ; les mentions auto-détectées sont ignorées, tandis qu'un argument de fichier explicite provoque une erreur critique. Un garde contre les jetons corrompus bloque un seul codepoint CJK coincé dans un mot latin ou cyrillique, ainsi que les jetons dont le script change deux fois ou plus, tout en autorisant le texte véritablement bilingue. Un garde de capture d'écran refuse un message mentionnant une capture d'écran sans photo jointe. Une passerelle de dictionnaire compare des termes interdits (via un fichier JSON utilisateur) au titre, au corps et aux légendes de chaque envoi, sans option de contournement par conception ; un fichier malformé entraîne un refus. Les autoliens résolvent les IDs de tickets Linear via le CLI linear et les numéros de PR/issue GitHub via gh, avec mise en cache pendant une heure. Les fonctionnalités individuelles peuvent être désactivées via un flag no-feature.
Entrant. tg-ctl démarre automatiquement lors du premier envoi sortant depuis un volet tmux avec un agent détecté. Les réponses en texte brut de Telegram sont injectées dans le volet de cet agent. Répondre à un message avec une citation joint une ancre nommant le message répondu, et la commande tg replies peut récupérer l'original complet. La commande /agent route un message vers un agent spécifique via un fuzzy-matching (compatible cyrillique) des noms de fenêtres, proposant des boutons de sélection groupés par session en cas d'ambiguïté, ou une liste d'agents lors d'une invocation simple.
Un agent démarré hors tmux n'a pas de volet ; il est listé comme injoignable avec la raison et reçoit un second canal via une boîte de réception Stop-hook, lue à la fin de chaque tour. Le README précise cette limitation : un agent déjà inactif ne reçoit le message mis en file d'attente que lorsqu'il termine son prochain tour. La commande inbox de tg-ctl affiche les messages en attente.
Question-to-buttons transfère les questions de l'agent et les demandes de permission vers Telegram sous forme de boutons inline, permettant de répondre par un tapotement pour injecter la réponse directement dans le volet. Cela couvre les formats de questions et permissions de Claude Code, Codex PermissionRequest et les événements question.asked et permission.asked d'opencode, et est configuré de manière idempotente par une commande install-hooks qui sauvegarde les paramètres existants. Les messages envoyés pendant qu'une question est en attente sont différés, et une carte de question expirée peut toujours recevoir une réponse en texte brut.
Les commandes incluent stop (interrompt le tour actuel), kill, status, limit (télémétrie d'utilisation récente par agent), tasks (tableau de tâches filtrable), agent, daily (rapport de travail livré) et spend (utilisation des jetons et coûts). Les photos et documents envoyés depuis Telegram sont téléchargés dans un répertoire de cache local et le chemin est injecté pour que l'agent puisse les lire. La télémétrie provenant de Claude Code statusLine, des comptes de jetons Codex et des stats de session Pi peut déclencher un avertissement dédupliqué lorsqu'une limite atteint 90 %. Le routage par forum-topic est optionnel et expérimental, avec des mises en garde documentées sur la création de topics générant un agent et la réouverture d'un topic actif ne réattachant pas son agent. Le contrôle peut être désactivé dans le fichier de configuration.
Installation. Un script d'installation en une ligne installe les dépendances via Bun, lie tg au PATH et enregistre la compétence de l'agent ; un clone manuel avec lien symbolique fonctionne également. La configuration se trouve dans un fichier dotenv sous le répertoire config avec un jeton de bot et un chat id. Une sous-commande install-skill écrit un fichier de compétence et ajoute des instructions courtes aux fichiers de harnais détectés. Le script extrait étant le binaire exécuté, il n'y a pas d'étape de build, et un script de déploiement met à jour l'extraction, refusant d'écraser les modifications locales ; les changements de code du démon nécessitent un redémarrage, détecté et signalé par le script. Un jeton de bot par machine est requis, car Telegram n'autorise qu'un seul consommateur getUpdates par jeton.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.