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), ousteps_filepour 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 cheminsincludeetpastedans 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 # :
| Étape | Description |
|---|---|
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 FICHIER | colle FICHIER comme un seul collage entre parenthèses, adapté aux invites multilignes |
click TEXTE | clique à gauche sur le premier TEXTE à l'écran |
sleep SECONDES | |
snap NOM | capture l'écran sous forme de texte |
resize COLSxLIGNES | change la taille du terminal en cours d'exécution ; faites un snap après pour voir où une mise en page se casse |
| `record on | off` |
include FICHIER | exé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, etDISABLE_AUTOUPDATER=1dansenvpour 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 queCLAUDE_CODE_ENABLE_TODO_TOOLS=1ne soit dansenv. Depuis Claude Code 2.1.300,--model haikuest 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.