Communitygithub.com

lokkju/term-recorder

Utilisez cette compétence lorsque vous avez besoin de voir ce qu'un programme terminal affiche réellement à un utilisateur, au lieu de le deviner à partir de son code source. Par exemple, pour vérifier comment une TUI rend du texte, une boîte de dialogue ou une mise en page, tester les interactions clavier ou souris, ou enregistrer un GIF de démonstration. Elle exécute le programme à partir d'un fichier d'étapes sur un serveur tmux privé et renvoie des captures d'écran en texte brut ; fonctionne directement dans Claude Code.

Qu'est-ce que term-recorder ?

term-recorder est un outil puissant conçu pour les développeurs utilisant des agents IA comme Claude Code, Cursor ou Codex. Il permet de capturer précisément ce qu'un programme terminal affiche à l'écran, résolvant ainsi le problème de deviner le rendu visuel d'une TUI (interface utilisateur en terminal), d'une boîte de dialogue ou d'une mise en page à partir du seul code source. L'outil exécute une commande dans un terminal de dimensions fixes sur un serveur tmux privé et isolé, garantissant qu'il n'interfère pas avec les sessions existantes de l'utilisateur. L'utilisateur fournit une liste d'étapes (attendre un texte, taper des touches, cliquer, prendre une capture d'écran, etc.) et l'outil renvoie des captures d'écran textuelles des moments clés. Il supporte également l'enregistrement de fichiers asciicast et la génération de GIF via [agg](https://github.com/asciinema/agg). Le projet est particulièrement utile pour tester la réactivité d'interfaces, documenter des comportements visuels, ou automatiser des démonstrations. Il s'intègre nativement dans Claude Code en tant que serveur MCP, mais peut aussi être utilisé en ligne de commande de manière autonome.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lokkju/skills/tree/HEAD/plugins/term-recorder/skills/term-recorder

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait term-recorder ?

term-recorder exécute une commande dans un terminal de taille fixe, la pilote avec des étapes et capture ce qu'elle affiche. Utilisez-le lorsque la question est "à quoi cela ressemble à l'écran", ce que la lecture du code ne peut pas répondre : comment une boîte de dialogue gère le retour à la ligne d'un texte long, si le markdown s'affiche correctement, ce qu'une TUI fait à 100 colonnes, où un clic atterrit.

Il exécute la commande sur son propre serveur tmux (tmux -L term-record-<pid>, une configuration générée, sans barre de statut) avec un environnement minimal, de sorte qu'il ne touche jamais les sessions tmux de l'utilisateur et que la commande n'hérite pas des variables de cette session. Le serveur est tué à la fin de l'exécution.

Exécution

Appelez l'outil record (celui du serveur MCP term-recorder ; dans Claude Code mcp__plugin_term-recorder_term-recorder__record) avec :

  • command : le programme et ses arguments sous forme de liste, par exemple ["claude", "--model", "haiku"].
  • steps : les étapes en ligne, une par ligne (ci-dessous), ou steps_file pour un fichier d'étapes ; les deux exécutent d'abord le fichier. ${EXAMPLES} dans les étapes correspond au répertoire d'exemples fourni.
  • cwd : répertoire de travail de la commande (par défaut : le répertoire du projet). Les chemins include et paste dans les étapes en ligne sont relatifs à celui-ci.
  • out : répertoire de sortie des captures (par défaut : un nouveau répertoire temporaire) ; le répertoire est créé.

Chaque snap NOM écrit <out>/NOM.txt, et l'écran est toujours capturé en tant que final à la fin. Le résultat est le contenu textuel de chaque capture d'écran, suivi du dossier de sortie ; lisez-les, c'est la réponse. show: "final" ne renvoie que l'écran final et show: "none" aucun (les fichiers sont écrits dans les deux cas) ; l'outil snaps liste les captures d'une exécution précédente ou en lit une par son nom. Une étape en échec (un délai d'attente expiré, un texte à cliquer n'était pas à l'écran, la commande s'est terminée) fait du résultat une erreur qui nomme l'étape et affiche l'écran à ce moment-là.

check_steps analyse les étapes sans rien exécuter, ce qui constitue une assurance peu coûteuse avant une exécution qui coûte une vraie conversation Claude Code.

Les valeurs par défaut : 100x30 (size), TERM screen-256color, et seulement HOME, PATH, USER, LOGNAME, SHELL, LANG, LC_ALL, LC_CTYPE et TMPDIR de l'environnement du serveur. Ajoutez des variables avec env (un objet) ou pass (noms), et des substitutions d'étapes avec vars.

Sans le serveur MCP

Dans un agent sans le serveur, exécutez la CLI sur le même code. Écrivez les étapes dans un fichier dans votre répertoire de travail temporaire, puis exécutez-le comme sa propre commande, non chaînée à une autre :

"${CLAUDE_SKILL_DIR}/scripts/term-record" -C <workdir> -s <steps> -o <outdir> -- <command> [args...]

${CLAUDE_SKILL_DIR} est le répertoire contenant ce SKILL.md. Claude Code le remplit ; dans un agent qui le laisse tel quel, placez le chemin de ce répertoire à sa place. Les captures sont affichées sur stdout en plus d'être écrites dans <outdir>. Le code de sortie 1 signifie qu'une étape a échoué, avec l'écran sur stderr ; 2 est un problème d'utilisation ou de configuration. Les options correspondent aux arguments de l'outil : --size, --env NAME=VALUE, --pass NAME, --var NAME=VALUE, --cast, --gif, --agg-arg, et -s - lit les étapes depuis l'entrée standard.

Étapes

Une par ligne, citations shell, commentaires # :

ÉtapeDescription
wait REGEX [TIMEOUT]attend que l'écran corresponde (Python re, multiligne ; 90s)
gone REGEX [TIMEOUT]attend que la correspondance disparaisse
idle REGEX [QUIET] [TIMEOUT]attend que REGEX, un indicateur d'activité, soit absent depuis QUIET secondes (3 ; 240s)
keys TOUCHE...envoie des noms de touches tmux : Enter, Down, Escape, C-c
type TEXTE [DELAI]tape TEXTE littéralement, un caractère toutes les DELAI secondes (0.03 ; 0 l'envoie en une fois)
paste FICHIERcolle FICHIER comme un seul collage entre parenthèses, adapté aux invites multilignes
click TEXTEclique à gauche sur le premier TEXTE à l'écran
sleep SECONDES
snap NOMcapture l'écran sous forme de texte
resize COLSxLIGNESchange la taille du terminal en cours d'exécution ; faites un snap après pour voir où une mise en page se casse
`record onoff`
include FICHIERexécute les étapes de FICHIER à cet endroit
when REGEX ETAPE...exécute ETAPE seulement si l'écran correspond actuellement

Les chemins dans include et paste sont relatifs au fichier d'étapes (au cwd pour les étapes en ligne).

Claude Code comme cible

include ${EXAMPLES}/claude-start.steps démarre une nouvelle session en passant la boîte de dialogue "Approuver le dossier" jusqu'à une invite vide ; placez-la en premier. ${EXAMPLES}/ask-dialog.steps est un exemple complet qui ouvre la boîte de dialogue de question et la capture.

  • Démarrez-le dans un répertoire temporaire (cwd), avec un modèle peu coûteux (--model haiku) à moins que le modèle n'ait d'importance, et DISABLE_AUTOUPDATER=1 dans env pour qu'aucun avis de mise à jour n'apparaisse dans l'image.
  • Pour essayer un plugin depuis un répertoire de travail, ajoutez --plugin-dir <chemin>, et passez --settings <fichier> pour désactiver la copie installée ("enabledPlugins": {"<nom>@<marketplace>": false}).
  • Les outils de tâches (TaskCreate et les autres) sont désactivés sur les modèles Claude 5, en mode interactif ou -p, à moins que CLAUDE_CODE_ENABLE_TODO_TOOLS=1 ne soit dans env. Depuis Claude Code 2.1.300, --model haiku est Haiku 5.5, donc cela inclut haiku. Même dans ce cas, ce sont des outils différés : ils apparaissent dans la liste des outils différés et se chargent via ToolSearch, pas dans la liste initiale des outils.
  • Votre invite est affichée à l'écran, donc attendez un texte qui n'apparaît que dans le résultat (une option numérotée d'une boîte de dialogue comme '[0-9]\. Accept'), jamais sur un mot de l'invite elle-même.
  • Son indicateur d'activité, pour idle : '\([0-9]+m? ?[0-9]*s · |esc to interrupt'.
  • Chaque exécution est une véritable conversation sur le compte de l'utilisateur. Limitez-la aux tours nécessaires à la vérification.

Enregistrements

cast écrit un fichier asciicast v2, et gif en génère un via agg (agg_args remplace ses arguments) ; le résultat donne les deux chemins. Les images sont capturées lorsque l'écran change ; pendant une attente idle, l'horloge de la vidéo s'exécute huit fois plus lentement (busy_timescale), de sorte qu'une minute de réflexion se joue en quelques secondes.

Skills associés