¿Qué hace tmux?
Utilízala para sesiones tmux interactivas existentes. Para comandos únicos, usa el shell normal. Para trabajos nuevos en segundo plano no interactivos, usa la ejecución en segundo plano.
Conceptos básicos
tmux ls
tmux list-windows -t shared
tmux list-panes -t shared:0
tmux capture-pane -t shared:0.0 -p
tmux capture-pane -t shared:0.0 -p -S -
Formato destino: sesión:ventana.panel, p. ej. shared:0.0.
Enviar entrada
Texto literal, luego Enter:
tmux send-keys -t shared:0.0 -l -- "Por favor continúa"
tmux send-keys -t shared:0.0 Enter
Teclas especiales:
tmux send-keys -t shared:0.0 C-c
tmux send-keys -t shared:0.0 C-d
tmux send-keys -t shared:0.0 Escape
Usa -l -- para texto arbitrario. Separa el texto y Enter para evitar sorpresas con pegado/saltos de línea.
Sesiones
tmux new-session -d -s worker
tmux rename-session -t old new
tmux kill-session -t worker
Verificaciones de indicadores
tmux capture-pane -t worker-3 -p | tail -20
tmux capture-pane -t worker-3 -p | rg "proceed|permission|Yes|No|❯"
Aprobar/seleccionar solo cuando el indicador se entienda:
tmux send-keys -t worker-3 -l -- "y"
tmux send-keys -t worker-3 Enter
Ayudantes
scripts/find-sessions.sh: descubre sesiones.scripts/wait-for-text.sh: espera hasta que el contenido del panel capturado contenga el texto.
wait-for-text.sh busca tanto la entrada reflejada como el historial de desplazamiento además de la salida del proceso. Para la finalización de comandos, usa un marcador único cuyo texto completo se divide entre argumentos en el comando enviado a tmux:
nonce="$(od -An -N8 -tx1 /dev/urandom | tr -d ' \n')"
marker="OPENCLAW_DONE_${nonce}"
tmux send-keys -t shared:0.0 -l -- "sleep 4; printf '%s%s\n' 'OPENCLAW_DONE_' '$nonce'"
tmux send-keys -t shared:0.0 Enter
scripts/wait-for-text.sh -t shared:0.0 -p "$marker" -F -T 30
El comando reflejado nunca contiene el marcador completo, y el nonce evita que una línea de finalización anterior coincida.
Notas
capture-pane -pimprime a la salida estándar para los scripts.-S -captura todo el historial de desplazamiento.- Las sesiones de tmux persisten a través de desconexiones SSH.