Communitygithub.com

lokkju/term-recorder

Úsalo cuando necesites ver lo que realmente muestra un programa de terminal a una persona, en lugar de adivinarlo a partir de su código fuente, por ejemplo, para comprobar cómo una TUI renderiza texto, un diálogo o un diseño, probar la interacción con teclado o ratón, o grabar un GIF de demostración. Ejecuta el programa desde un archivo de pasos en un servidor tmux privado y devuelve capturas de pantalla en texto plano; funciona en el propio Claude Code.

¿Qué es term-recorder?

term-recorder es una habilidad MCP diseñada para capturar la salida visual real de aplicaciones de terminal, resolviendo la pregunta «¿cómo se ve esto en pantalla?» que leer el código no puede responder. Útil para desarrolladores que trabajan con TUI, diálogos, layouts de terminal o que necesitan grabar demos GIF. Se ejecuta en un servidor tmux aislado (`tmux -L term-record-<pid>`) con un entorno mínimo, sin interferir con las sesiones tmux del usuario, y se destruye al finalizar. Soporta plataformas como Claude Code (a través del servidor MCP integrado) y cualquier agente que pueda ejecutar scripts de shell (mediante el CLI directo). Funciona mediante un archivo de pasos que define la secuencia: esperar patrones de texto, enviar teclas, hacer clic, capturar pantallas (snaps) y redimensionar la terminal. Los resultados son archivos de texto con el contenido de cada snap y rutas opcionales para grabaciones en formato asciicast o GIF. Incluye un comando `check_steps` para validar pasos sin ejecutarlos, ahorrando costes de conversación en Claude Code.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿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), o steps_file para 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 rutas include y paste en 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 #:

PasoHace
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 ARCHIVOpega ARCHIVO como un pegado entre corchetes, adecuado para indicaciones multilínea
click TEXTOhace clic izquierdo en el primer TEXTO en pantalla
sleep SEGUNDOS
snap NOMBREcaptura la pantalla como texto
resize COLUMNASxFILAScambia 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 onoff`
include ARCHIVOejecuta 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, y DISABLE_AUTOUPDATER=1 en env para 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 que CLAUDE_CODE_ENABLE_TODO_TOOLS=1 esté en env. Desde Claude Code 2.1.300, --model haiku es 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.

Skills relacionados