domingo 13 / 09 / 2026

NotionRetourner

El setup por debajo

En Cuál me necesita explico cómo reparto trabajo entre agentes y recibo sus reportes. Si quieres probarlo, acá está el setup. Uso Ghostty, herdr, 23 atajos y unas 220 líneas de shell. Te muestro la config y lo que me dio problemas.

Ghostty

Ghostty es rápido y nativo en macOS. No necesitas un archivo de config para partir. El mío tiene pocas líneas. Necesito este ajuste para los atajos de los agentes:

toml
# ~/.config/ghostty/config
macos-option-as-alt = left

En un layout de Estados Unidos, Ghostty ya trata Option como Alt por defecto, así que puedes asignar alt+h. Pero lo hace con las dos teclas Option. Como también necesito Option para escribir en español (donde option+n seguido de n produce la ñ), que las dos teclas actúen como Alt rompe la escritura normal con tildes.

Con left, puedo usar el Option izquierdo para los 23 atajos de abajo y dejar el derecho para las secuencias normales con tildes. No necesitaba activar Alt en todo el teclado. Necesitaba una tecla Option para atajos y la otra funcionando normal para escribir en español.

También tengo estos atajos, que son aparte de herdr:

toml
keybind = cmd+d=new_split:right
keybind = cmd+shift+d=new_split:down

Crean splits nativos de Ghostty fuera de la sesión de herdr. Dejo uno para las cosas que no quiero que un agente herede después como panel.

Si quieres atenuar los paneles inactivos, unfocused-split-opacity no te va a servir dentro de herdr porque solo afecta a los splits nativos de Ghostty (el valor por defecto ya es 0.7). Como herdr dibuja sus paneles dentro de una sola superficie de terminal, Ghostty no puede verlos por separado, así que los bordes y resaltados dentro de la sesión los pone herdr.

herdr

tmux no sabe qué corre dentro de un panel, y yo necesito saber si un agente sigue trabajando o me está esperando sin abrir cada panel para revisar.

herdr se llama a sí mismo "the agent runtime". Es gratis (Apache 2.0). Tiene espacios, pestañas dentro de ellos y paneles dentro de las pestañas, como un multiplexor de terminal. También reconoce a los agentes y sigue su estado. Son cinco:

estadoqué significa
workingcorriendo. Déjalo en paz.
blockedtopó con un permiso o una pregunta. Te necesita ahora.
doneterminó su turno, listo para recibir.
idlelisto, nada pendiente.
unknownhay un agente pero herdr no logra clasificarlo. No prueba nada.
Cada agente tiene una línea que muestra si terminó, está trabajando o está inactivo.
Cada agente tiene una línea que muestra si terminó, está trabajando o está inactivo.

Me cambié porque tmux no me decía si un agente estaba en blocked o ya había terminado. Si se queda esperando en «¿quieres permitir este comando?», se queda ahí hasta que lo vea, que es justo como pasaron los 9 minutos de espera del otro post.

herdr reconoce 20 y tantos tipos de agente. herdr agent muestra la lista. Yo uso tres y explico las decisiones de costo por nivel en el otro post.

Las teclas

herdr usa un prefijo como tmux: aprietas ctrl+b y después otra tecla. Lo hago unas 400 veces al día, así que quería usar un solo atajo en vez de dos pulsaciones.

Asigné Alt más una tecla en Ghostty. Manda juntos el byte del prefijo y la letra:

toml
keybind = alt+key_h=text:\x02h

\x02 es ctrl+b. A herdr le llega la misma secuencia de prefijo de antes, pero aprieto el atajo una sola vez sin entrar a un modo ni esperar un timeout.

El atajo usa key_h en vez de h. Así llama Ghostty a los códigos de tecla del W3C, donde esa tecla se llama KeyH. La especificación dice que los valores «se basan únicamente en la ubicación física de la tecla en el teclado y no varían según la configuración regional del usuario».

Eso no importa para h j k l porque los layouts de Estados Unidos y español son QWERTY y esas letras no se mueven, pero ;, [, ] y el backtick sí cambian de lugar. Como asigno la posición física en el teclado, puedo seguir apretando la misma tecla al cambiar de layout aunque cambie el carácter.

  • h j k l paneles · z zoom · v s dividir
  • ` ; último panel · g ir a · b barra
  • [ ] pestañas · c nueva · tab espacios
  • a agentes · shift: w n r t x
  • cada atajo es alt + esta tecla
  • se leen por posición, no por letra

Los atajos de los paneles están en la fila de descanso, así que con h j k l me muevo entre paneles como en vim y los alcanzo con una mano.

Me gusta alt+a porque pasa solo por agentes, saltándose las shells, los servidores y los logs. No necesito parar ahí cuando reviso quién me necesita.

El panel anterior también tiene un atajo en alt+backquote. Como tengo un teclado de 68 teclas y el backtick necesita fn+esc, me queda incómodo, así que suelo usar ; en su lugar. Lo tengo justo bajo el meñique derecho.

La lista completa está en el bloque plegado de abajo. Si vas a instalar esto, usa github.com/Vader-7/ghostty-herdr. Tiene los archivos de config, el script de preflight, los hooks de shell y un instalador que respalda lo que reemplaza. Puedo actualizar el repo cuando cambien las herramientas. Este post probablemente se va a quedar atrás.

Los 23 atajos y la config

La columna del medio es lo que herdr recibe de verdad, que es la parte útil si quieres reasignarlo:

aprietoherdr recibequé pasa
alt+h alt+j alt+k alt+lprefix+h/j/k/lir al panel de la izquierda, abajo, arriba, derecha
alt+zprefix+zzoom del panel a pantalla completa
alt+vprefix+vdividir en vertical
alt+sprefix+-dividir en horizontal
alt+;prefix+uvolver al panel anterior
alt+gprefix+ggoto: saltar a cualquier lado por nombre
alt+bprefix+bmostrar u ocultar la barra lateral
alt+tab / alt+shift+tabprefix+a / prefix+Aespacio anterior / siguiente
alt+a / alt+shift+aprefix+d / prefix+fagente anterior / siguiente
alt+[ / alt+]prefix+p / prefix+npestaña anterior / siguiente
alt+cprefix+cpestaña nueva
alt+shift+wprefix+wselector de espacios
alt+shift+nprefix+Nespacio nuevo
alt+shift+rprefix+Wrenombrar espacio
alt+shift+tprefix+Trenombrar pestaña
alt+shift+xprefix+xcerrar panel

Esto es lo que hay que copiar, y va completo, porque una línea de ejemplo solo te va a dar un atajo funcionando:

toml
# ~/.config/ghostty/config
keybind = alt+key_h=text:\x02h
keybind = alt+key_j=text:\x02j
keybind = alt+key_k=text:\x02k
keybind = alt+key_l=text:\x02l
keybind = alt+key_z=text:\x02z
keybind = alt+key_v=text:\x02v
keybind = alt+key_s=text:\x02-
keybind = alt+backquote=text:\x02u
keybind = alt+semicolon=text:\x02u
keybind = alt+key_g=text:\x02g
keybind = alt+key_b=text:\x02b
keybind = alt+tab=text:\x02a
keybind = alt+shift+tab=text:\x02A
keybind = alt+key_a=text:\x02d
keybind = alt+shift+key_a=text:\x02f
keybind = alt+bracket_right=text:\x02n
keybind = alt+bracket_left=text:\x02p
keybind = alt+key_c=text:\x02c
keybind = alt+shift+key_w=text:\x02w
keybind = alt+shift+key_n=text:\x02N
keybind = alt+shift+key_r=text:\x02W
keybind = alt+shift+key_t=text:\x02T
keybind = alt+shift+key_x=text:\x02x

Cinco de esas acciones vienen sin asignar en herdr, así que necesitan la otra mitad del par:

toml
# ~/.config/herdr/config.toml
[keys]
previous_workspace = "prefix+a"
next_workspace     = "prefix+shift+a"
previous_agent     = "prefix+d"
next_agent         = "prefix+f"
last_pane          = "prefix+u"

Un worktree por carril

Esto me costó más que la config de la terminal. Cuando cuatro agentes trabajan en el mismo directorio pueden editar el mismo archivo, entonces uno hace stash, otro hace rebase y ordenar el diff resultante toma una tarde.

Cada agente que trabaja en paralelo recibe su propio worktree de git. La documentación dice que «un repositorio git puede soportar múltiples árboles de trabajo, lo que te permite tener más de una rama abierta a la vez». Cada agente tiene un directorio y una rama aparte, con el mismo repositorio debajo. herdr crea el worktree y su espacio juntos:

bash
herdr worktree create --branch fc-api --label "carril 3 · api"
Un repositorio, un agente dentro. Todos estos empiezan como un solo panel.

Antes de repartir el trabajo reviso qué archivos va a tocar cada tarea. «Agregar contactos al dashboard» y «agregar el endpoint de contactos» necesitan los mismos tipos, así que los dejo en un solo carril. Pueden parecer independientes en el ticket y aun así necesitar el mismo archivo. Si pasa eso, los mantengo juntos.

Arrancar agentes desde el CLI

El CLI de herdr hace todo lo que hace la interfaz y devuelve JSON, lo que permite que el orquestador arranque y maneje otros agentes sin que yo prepare cada panel.

Este es un ejemplo desde el panel del orquestador sacando el id del panel de la respuesta del split. No dejes el id fijo ni lo adivines, porque podrías arrancar el agente en el panel de otro.

bash
# un panel hermano, mismo directorio, sin robarme el foco
pane=$(herdr pane split --current --direction right --cwd "$PWD" --no-focus \
  | jq -r .result.pane.pane_id)

# un agente con nombre adentro
herdr agent start reviewer --kind codex --pane "$pane"

# entregarle trabajo y esperar a que asiente
herdr agent prompt reviewer "Revisa el diff de esta rama. \
  Reporta solo hallazgos que romperían algo." --wait --timeout 120000

# leer la respuesta de vuelta
herdr agent read reviewer --source recent-unwrapped --lines 120

Revisa esto antes de dejar que otro agente lo use.

Usa --no-focus para el trabajo en segundo plano. Si no lo haces, te puede mover el cursor mientras escribes en otro panel.

--wait vuelve cuando el agente está en un estado asentado, lo que incluye blocked. Volvió el prompt, pero eso no significa que la tarea esté lista, así que revisa agent get antes de seguir.

agent prompt no le escribe a un agente bloqueado, devolviendo agent_blocked y sin mandar nada. Bien. No quiero que un agente responda un diálogo de permisos que no ha revisado, sobre todo si el comando que espera ahí es algo como rm -rf.

Usa recent-unwrapped si necesitas parsear la respuesta. visible todavía trae los saltos de línea visuales del viewport. Si pides más líneas y sigue llegando una respuesta corta, el agente está usando la pantalla alternativa y esas filas ya no están. Dile que escriba la respuesta en un archivo y después lee eso.

Scripts de shell

Uso algunos scripts alrededor de esto. Son chicos, me gusta tenerlos y no los sacaría.

Los CLIs de los agentes se actualizan antes de abrir herdr. Sacan cambios que rompen cosas a cada rato, así que herdr-preflight lee mi lista de tipos de agente y corre cada actualizador. Es un script propio (no viene con herdr), con un límite de 90 segundos por actualización, corriendo como máximo una vez cada 12 horas.

Parte desde .zshrc solo en una ventana nueva de Ghostty, porque no puede correr dentro de herdr o se repetiría por cada panel:

bash
if [[ $- == *i* ]] && [[ $TERM_PROGRAM == ghostty ]] \
   && [[ -z ${HERDR_ENV:-} ]] && [[ -z ${CLAUDECODE:-} ]]; then
  herdr-preflight
fi

Perdí una tarde en esto. Los actualizadores parecían haber funcionado pero no habían hecho nada, porque varios de estos CLIs revisan si tienen una terminal y si no, salen en silencio con estado 0. Ahora corro cada uno bajo script -q /dev/null para darle un pty, dejando stdin cerrado para que un prompt inesperado falle en vez de colgar la shell.

El fondo también se difumina cuando parte un comando de trabajo. Un hook de preexec cambia el fondo de Ghostty por una copia difuminada y precmd lo devuelve. Un archivo de lock por PID lo mantiene así hasta que termina el último panel. Sigue al comando, así que un agente abierto mantiene el fondo difuminado aunque me esté esperando. No me dice más que la barra lateral. Solo me gusta cómo se ve mientras hay algo abierto.

También tengo dos sonidos y una notificación que espera. Los ajustes de sonido y aviso visual no están en la misma sección, cosa que me demoró en notar. Dentro de [ui.sound], herdr llama al estado de atención request en vez de blocked:

toml
# ~/.config/herdr/config.toml
[ui.sound]
done_path    = "sounds/done-purr.mp3"     # el agente terminó
request_path = "sounds/request-tink.mp3"  # el agente te necesita

[ui.toast]
delivery      = "terminal"
delay_seconds = 5

Uso dos sonidos del sistema de macOS bajados en 8 dB, con rutas relativas al archivo de config. Los 5 segundos de espera son para el aviso visual. Si el agente se desbloquea solo en menos de 5 segundos no te llega la notificación. Sin esa espera creo que las habría apagado en una semana, pero así las dejo prendidas.

Para probarlo

Si quieres copiar esto, yo partiría en este orden:

  1. Instala Ghostty. Pon macos-option-as-alt = left.
  2. Instala herdr y usa el prefijo ctrl+b por defecto durante una semana. Acostúmbrate a los estados antes de cambiar las teclas.
  3. Parte con 10 teclas de las 23: h j k l, el par de espacios, el par de agentes y los dos splits. Agrega otras cuando te hagan falta.
  4. Después prueba los worktrees. Es lo que más me ha servido, pero me acostumbraría al resto antes de agregarlos.

Ahora casi no paso tiempo navegando. La mayor parte se me va en decidir qué deberían hacer los cuatro agentes después, que es más difícil, y prefiero dedicarle la tarde a eso que a buscar sus ventanas.

Repositoriola config, lista para clonar

Vader-7/ghostty-herdr

Artículola pieza de la que cuelga

Cuál me necesita