¿Qué hace term-recorder?
term-recorder ejecuta un comando en un terminal de tamaño fijo, lo dirige mediante pasos y captura lo que muestra. Úsalo cuando la pregunta sea «cómo se ve esto en pantalla», algo que leer el código no puede responder: cómo un diálogo envuelve texto largo, si el markdown se renderiza, qué hace una TUI a 100 columnas, dónde cae un clic.
Ejecuta el comando en su propio servidor tmux (tmux -L term-record-<pid>, una configuración generada, sin barra de estado) con un entorno mínimo, de modo que nunca toca las sesiones tmux del usuario y el comando no hereda las variables de esta sesión. El servidor se elimina cuando termina la ejecución.
Ejecutarlo
Usa la herramienta record (la del servidor MCP term-recorder; en Claude Code mcp__plugin_term-recorder_term-recorder__record) con:
command: el programa y sus argumentos como lista, p. ej.["claude", "--model", "haiku"].steps: los pasos en línea, uno por línea (abajo), osteps_filepara un archivo de pasos; ambos ejecutan el archivo primero.${EXAMPLES}en los pasos es el directorio de ejemplos empaquetado.cwd: donde se inicia el comando (por defecto: el directorio del proyecto). Las rutasincludeypasteen pasos en línea son relativas a este.out: donde van las capturas (por defecto: un nuevo directorio temporal); el directorio se crea.
Cada snap NOMBRE escribe <out>/NOMBRE.txt, y la pantalla siempre se captura como final al final. El resultado es el texto de cada captura, seguido de dónde fueron guardadas; léelas, son la respuesta. show: "final" devuelve solo la pantalla final y show: "none" ninguna (los archivos se escriben de todas formas); la herramienta snaps lista las capturas de una ejecución anterior o lee una por nombre. Un paso fallido (una espera agotó su tiempo, el texto a clicar no estaba en pantalla, el comando terminó) hace que el resultado sea un error que nombra el paso y muestra la pantalla en ese momento.
check_steps analiza los pasos sin ejecutar nada, un seguro económico antes de una ejecución que cuesta una conversación real de Claude Code.
Los valores predeterminados: 100x30 (size), TERM screen-256color, y solo HOME, PATH, USER, LOGNAME, SHELL, LANG, LC_ALL, LC_CTYPE y TMPDIR del entorno del servidor. Añade variables con env (un objeto) o pass (nombres), y sustituciones en pasos con vars.
Sin el servidor MCP
En un agente sin el servidor, ejecuta el CLI sobre el mismo código. Escribe los pasos en un archivo en tu directorio de borrador, luego ejecútalo como su propio comando, no encadenado a otro:
"${CLAUDE_SKILL_DIR}/scripts/term-record" -C <directorio_de_trabajo> -s <pasos> -o <directorio_salida> -- <comando> [argumentos...]
${CLAUDE_SKILL_DIR} es el directorio que contiene este SKILL.md. Claude Code lo rellena; en un agente que lo deje como está escrito, pon la ruta de ese directorio en su lugar. Las capturas se imprimen en stdout además de ir a <directorio_salida>. El estado de salida 1 significa que un paso falló, con la pantalla en stderr; 2 es un problema de uso o configuración. Las banderas coinciden con los argumentos de la herramienta: --size, --env NOMBRE=VALOR, --pass NOMBRE, --var NOMBRE=VALOR, --cast, --gif, --agg-arg, y -s - lee pasos desde stdin.
Pasos
Uno por línea, con comillas tipo shell, comentarios #:
| Paso | Hace |
|---|---|
wait REGEX [TIEMPO] | espera hasta que la pantalla coincida (Python re, multilínea; 90s) |
gone REGEX [TIEMPO] | espera hasta que ya no coincida |
idle REGEX [SILENCIO] [TIEMPO] | espera hasta que REGEX, un marcador de ocupado, haya estado ausente durante SILENCIO segundos (3; 240s) |
keys TECLA... | envía nombres de teclas de tmux: Enter, Down, Escape, C-c |
type TEXTO [DELAY] | escribe TEXTO literalmente, un carácter cada DELAY segundos (0.03; 0 lo envía de una vez) |
paste ARCHIVO | pega ARCHIVO como un pegado entre corchetes, adecuado para indicaciones multilínea |
click TEXTO | hace clic izquierdo en el primer TEXTO en pantalla |
sleep SEGUNDOS | |
snap NOMBRE | captura la pantalla como texto |
resize COLUMNASxFILAS | cambia el tamaño del terminal durante la ejecución; captura después de cada uno para ver dónde se rompe un diseño |
| `record on | off` |
include ARCHIVO | ejecuta los pasos de ARCHIVO en su lugar |
when REGEX PASO... | ejecuta PASO solo si la pantalla coincide ahora |
Las rutas en include y paste son relativas al archivo de pasos (a cwd para pasos en línea).
Claude Code como objetivo
include ${EXAMPLES}/claude-start.steps inicia una sesión nueva superando el diálogo de confianza de carpetas hasta llegar a un prompt vacío; ponlo primero. ${EXAMPLES}/ask-dialog.steps es un ejemplo completo que abre el diálogo de preguntas y lo captura.
- Inícialo en un directorio de borrador (
cwd), con un modelo barato (--model haiku) a menos que el modelo importe, yDISABLE_AUTOUPDATER=1enenvpara que no aparezca un aviso de actualización en el fotograma. - Para probar un plugin desde un checkout, añade
--plugin-dir <ruta>, y pasa--settings <archivo>para desactivar la copia instalada ("enabledPlugins": {"<nombre>@<marketplace>": false}). - Las herramientas de tareas (TaskCreate y el resto) están desactivadas en los modelos Claude 5, interactivo o
-p, a menos queCLAUDE_CODE_ENABLE_TODO_TOOLS=1esté enenv. Desde Claude Code 2.1.300,--model haikues Haiku 5.5, así que eso incluye haiku. Incluso así son herramientas diferidas: aparecen en la lista de herramientas diferidas y se cargan a través de ToolSearch, no en la lista inicial de herramientas. - Tu prompt se muestra en pantalla, así que espera solo texto que muestre el resultado (una opción numerada de un diálogo como
'[0-9]\. Accept'), nunca una palabra del propio prompt. - Su marcador de ocupado, para
idle:'\([0-9]+m? ?[0-9]*s · |esc to interrupt'. - Cada ejecución es una conversación real en la cuenta del usuario. Limítala a los turnos que la verificación necesita.
Grabaciones
cast escribe un archivo asciicast v2, y gif lo renderiza a través de agg (agg_args reemplaza sus argumentos); el resultado proporciona ambas rutas. Los fotogramas se capturan cuando la pantalla cambia; durante una espera idle el reloj de la grabación corre ocho veces más lento (busy_timescale), de modo que un minuto de pensamiento se reproduce en unos segundos.