Mi setup: Claude Code + Ghostty + worktrees en un Mac

| Última modificación: 4 de mayo de 2026 | Tiempo de Lectura: 7 minutos
Premios Blog KeepCoding 2025

Co-Fundador de KeepCoding

Tengo tres sesiones de Claude Code abiertas ahora mismo. Una está traduciendo posts del blog. Otra está escribiendo tests para una CLI. La tercera me está ayudando a depurar un pipeline de datos. Cada una en su propio worktree, cada una en su propio split de Ghostty, y yo saltando entre ellas con Cmd+Alt+Flechas.

No he abierto iTerm2 en meses. No he tocado tmux en semanas. Todo vive en una sola ventana de Ghostty.

¿Es el setup perfecto? No. ¿Es el que me hace más productivo que he tenido nunca? Sin ninguna duda.

Por qué Ghostty y no otra terminal

Voy a ser directo: Ghostty traga batería como si minara Bitcoin. Ya lo conté en detalle en el post sobre terminales GPU y batería. Eso no ha cambiado y es su mayor defecto. Si estoy con batería, cierro Ghostty y abro Terminal.app sin pensármelo dos veces.

Pero cuando estoy enchufado — que es el 80% del tiempo en mi escritorio con el Studio Display — Ghostty gana por dos razones que no tienen nada que ver con frikadas estéticas:

1. No parpadea. Suena a tontería hasta que pasas ocho horas al día mirando una terminal. iTerm2 tiene micro-parpadeos en el scroll rápido, artefactos al redimensionar, un flicker sutil al cambiar de pestaña. Terminal.app es peor. Ghostty, al renderizar con GPU, tiene una fluidez visual que no cansa la vista. Cuando Claude Code te escupe 200 líneas de output y haces scroll para revisarlo, la diferencia entre una terminal que parpadea y una que no es la diferencia entre leer un libro y leer un libro con alguien encendiendo y apagando la luz.

2. Le puedes dar un buffer del carajo. Con scrollback-limit = 50000 tengo 50.000 líneas de historial por panel. Claude Code es verboso: genera código, lo explica, lo ejecuta, muestra el output, y a veces se enrolla durante cientos de líneas. Con iTerm2 o Terminal.app, el scrollback por defecto se queda corto y pierdes contexto. Con Ghostty, puedo hacer scroll hasta el principio de una sesión de hace dos horas y encontrar exactamente lo que necesito.

Después hay extras que están bien — splits nativos con Cmd+D, Quick Terminal estilo Quake con `Ctrl+« — pero esos son la guinda. El pastel es no parpadear y no perder historial.

La anatomía de mi ventana

Cuando estoy en modo «paralelo» — varias tareas independientes a la vez — mi ventana de Ghostty se ve así:

┌──────────────────────────────────┬──────────────────────────────────┐
│                                  │                                  │
│   Claude Code (worktree A)       │   Claude Code (worktree B)       │
│   feature/nueva-validacion       │   chore/traducciones             │
│                                  │                                  │
│                                  │                                  │
├──────────────────────────────────┴──────────────────────────────────┤
│                                                                     │
│   Repo principal (main) — tests, builds, git log                    │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

Dos splits arriba, cada uno con un agente en su worktree. Un split abajo con main donde corro tests, miro diffs, y hago los merges cuando los agentes terminan.

El Quick Terminal (Ctrl+``) lo uso para cosas que duran tres segundos: mirar el *backlog* en Linear, comprobar el estado de un deploy, lanzar unmake validate` rápido.

Cómo montar esto paso a paso

1. Configurar Ghostty para desarrollo

Mi ~/.config/ghostty/config tiene lo imprescindible para este flujo:

# Shell
command = /opt/homebrew/bin/fish
shell-integration = fish

# Fuente legible para sesiones largas
font-family = JetBrainsMono Nerd Font
font-size = 15
font-thicken = true

# Quick Terminal (dropdown Quake-style)
keybind = global:ctrl+grave_accent=toggle_quick_terminal
quick-terminal-position = bottom
quick-terminal-animation-duration = 0.15

# Splits
keybind = cmd+d=new_split:right
keybind = cmd+shift+d=new_split:down
keybind = cmd+alt+left=goto_split:left
keybind = cmd+alt+right=goto_split:right
keybind = cmd+alt+up=goto_split:top
keybind = cmd+alt+down=goto_split:down

# Zoom split (toggle fullscreen de un panel)
keybind = cmd+shift+enter=toggle_split_zoom

# Saltar entre prompts de Claude Code (game changer)
keybind = cmd+up=jump_to_prompt:-1
keybind = cmd+down=jump_to_prompt:1

# Transparencia funcional
background-opacity = 0.92
background-blur = 20

# Scrollback generoso (Claude escupe mucho output)
scrollback-limit = 50000

# Sin parpadeos innecesarios
cursor-style-blink = false

La mayoría son valores por defecto razonables, pero hay dos que merecen mención especial.

jump_to_prompt es lo que te permite saltar entre respuestas de Claude Code con Cmd+Arriba y Cmd+Abajo. Cuando una sesión lleva 40 minutos y quieres revisar algo que Claude dijo hace rato, en vez de hacer scroll durante medio minuto, saltas directamente al prompt anterior. Mola mucho.

toggle_split_zoom te permite hacer fullscreen de un split concreto sin cerrar los demás. Estás revisando un diff largo en el split izquierdo, pulsas Cmd+Shift+Enter, se expande a toda la ventana. Revisas, vuelves a pulsar, y todo sigue donde estaba.

2. Crear los worktrees

Ya he escrito sobre qué son los worktrees y sobre los trucos de Claude Code con ellos. Aquí va el resumen ejecutivo de lo que hago cada mañana:

# Desde el repo principal
cd ~/code/mi-proyecto

# Crear worktrees para las tareas del día
git worktree add ../mi-proyecto-feat-a -b feature/validacion
git worktree add ../mi-proyecto-traducciones -b chore/traducciones

Convención de nombres: el repo original sin sufijo es main. Cada worktree lleva el nombre del repo más un sufijo descriptivo. Un ls ~/code/mi-proyecto* me enseña todo de un vistazo.

3. Abrir splits y lanzar agentes

# Split 1 (ya estoy aquí): repo principal
cd ~/code/mi-proyecto

# Cmd+D → split vertical
cd ~/code/mi-proyecto-feat-a
claude

# Cmd+Alt+Left → volver al split original
# Cmd+Shift+D → split horizontal debajo
cd ~/code/mi-proyecto-traducciones
claude

En menos de un minuto tengo la ventana montada con tres splits y dos agentes trabajando.

4. Supervisar y mergear

El split de main es el centro de mando. Desde ahí:

# Ver qué worktrees están vivos
git worktree list

# Ver los cambios de un agente (sin cambiar de split)
git diff feature/validacion

# Cuando un agente termina: merge
git merge feature/validacion

# Limpiar
git worktree remove ../mi-proyecto-feat-a
git branch -d feature/validacion

No necesito cambiar de split para ver los diffs. Todos los worktrees comparten la misma base de datos git, así que desde main puedo ver todas las ramas y sus cambios.

Lo que he aprendido después de dos meses con este setup

El zoom de split salva vidas

Cuando un agente genera un diff de 200 líneas y quieres revisarlo con calma, el split se queda pequeño. Cmd+Shift+Enter lo expande a toda la ventana. Revisas, apruebas o pides cambios, y vuelves al layout de tres splits. Sin perder ninguna sesión.

El Quick Terminal es para lo que no merece un split

Al principio metía todo en splits. Error. Acababa con cinco paneles diminutos donde no se veía nada. Ahora la regla es simple: si la tarea dura más de un minuto, merece un split. Si no, Quick Terminal.

Ctrl+` → git log --oneline -5 → Ctrl+`

Aparece, ejecutas, desaparece. Sin ensuciar el layout.

No más de tres splits simultáneos

He probado con cuatro y cinco splits. No funciona. En una pantalla de 27 pulgadas, tres es el máximo antes de que cada panel sea tan estrecho que el output de Claude se hace ilegible. En un portátil de 14 pulgadas, dos es el límite práctico.

Si necesito más de tres tareas en paralelo, uso Cmd+T para una pestaña nueva y repito el layout ahí. Ghostty mantiene el estado de todas las pestañas, así que puedo cerrar la tapa y al abrir está todo exactamente como lo dejé (window-save-state = always).

Los worktrees necesitan su .env

Cada worktree es un directorio de trabajo independiente. Eso significa que tu .env.local, tu .claude/settings.json local, cualquier fichero que no esté en git… no existe en el worktree nuevo.

Mi chapucilla: un script de Fish que copia lo necesario al crear un worktree:

function wt --description "Crea worktree con ficheros locales"
    set -l branch $argv[1]
    set -l dir (basename (pwd))-$branch
    git worktree add ../$dir -b $branch
    # Copiar ficheros locales que no están en git
    for f in .env.local .claude/settings.json
        if test -f $f
            cp $f ../$dir/$f
        end
    end
    echo "Worktree listo en ../$dir"
end

No es elegante, pero funciona. Podría usar symlinks, pero prefiero copias independientes: si un agente cambia algo en .env.local (que no debería, pero nunca se sabe), no quiero que afecte a los demás.

Ghostty + Claude Code tiene un truco oculto

La integración de shell de Ghostty (shell-integration = fish) le permite a la terminal saber dónde empieza y termina cada prompt. Eso es lo que hace posible jump_to_prompt. Pero el efecto secundario es que puedes seleccionar el output de un comando completo con un solo click en el margen izquierdo.

Cuando Claude Code te escupe un bloque de código y quieres copiarlo, en vez de seleccionar manualmente (y arriesgarte a incluir el prompt o cortar una línea), haces click en el margen y se selecciona todo el output del último comando. Cmd+C y listo.

No está documentado en ningún sitio, pero una vez que lo descubres no puedes vivir sin ello.

Cuándo NO uso este setup

Con batería. Este es el precio de Ghostty y no tiene solución: la GPU rendering consume lo que consume. Lo medí en detalle en Tu terminal está quemando batería como si minara Bitcoin y los números son obscenos. Si estoy en una cafetería con el portátil, cierro Ghostty y abro Terminal.app. El flujo es peor, pero la batería dura el triple.

Para tareas secuenciales. Si la tarea B depende de la tarea A, no gano nada con worktrees. Un solo split con un solo agente es suficiente. Los worktrees son para paralelismo real, no para sentirte productivo.

Cuando no conozco bien el problema. Si no sé exactamente qué quiero que haga cada agente, lanzar tres en paralelo es una receta para el caos. Primero exploro en un solo split, entiendo el problema, y solo cuando tengo tareas claras e independientes monto el layout de tres.

La foto completa

flowchart LR
    subgraph Ghostty["   Ghostty   "]
        direction TB
        subgraph Splits["   Splits Cmd+D / Cmd+Shift+D   "]
            direction LR
            S1[" Split 1 \nClaude Code\nworktree A"]
            S2[" Split 2 \nClaude Code\nworktree B"]
            S3[" Split 3 \nmain\ntests + merges"]
        end
        QT[" Quick Terminal Ctrl+` \ngit status, linear, make validate"]
    end

    subgraph Git["   Git   "]
        direction TB
        G1[".git/\n(compartido)"]
        W1["worktree A\nfeature/x"]
        W2["worktree B\nchore/y"]
        W3["main"]
    end

    S1 --> W1
    S2 --> W2
    S3 --> W3
    W1 --> G1
    W2 --> G1
    W3 --> G1

    style Ghostty fill:#1a1a2e,stroke:#4a9eed,color:#fff
    style Git fill:#1a2e1a,stroke:#4aed5c,color:#fff
    style Splits fill:#2d3748,stroke:#4a9eed,color:#fff

Ghostty como multiplexor visual. Worktrees como multiplexor de git. Claude Code como la fuerza de trabajo. Cada pieza hace una cosa y la hace bien.

No necesito tmux porque Ghostty ya multiplexa. No necesito clonar repos porque los worktrees ya comparten. No necesito cambiar de rama porque cada split es un directorio distinto.

Es la primera vez en muchos años que siento que mi terminal no me estorba. Que el flujo de pensamiento — «quiero avanzar tres cosas a la vez» — se traduce directamente en acciones sin ceremonia, sin boilerplate, sin fricciones.

¿Es perfecto? No. La batería sigue siendo un problema. Cinco splits son demasiados. Y de vez en cuando un worktree se queda huérfano y tengo que hacer git worktree prune.

Pero de perfecciones no vive nadie. Vive de lo que funciona. Y esto funciona de cojones.


TL;DR: Ghostty para splits y Quick Terminal (sin tmux). Git worktrees para tener múltiples checkouts en paralelo (sin clonar). Claude Code en cada split, cada uno en su worktree. Cmd+D para partir, Cmd+Alt+Flechas para navegar, Cmd+Shift+Enter para zoom, `Ctrl+« para el terminal rápido. Tres splits es el máximo práctico en 27 pulgadas. Con batería, usa Terminal.app y olvídate de la GPU.


Read this article in English.

Noticias recientes del mundo tech


¡CONVOCATORIA ABIERTA!

Desarrollo de apps móviles ios & Android

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado

Descárgate también el informe de tendencias en el mercado laboral 2026.

Fórmate con planes adaptados a tus objetivos y logra resultados en tiempo récord.
KeepCoding Bootcamps
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.