← Todos los artículos

Git worktrees: un solo cerebro, muchos agentes trabajando en paralelo

Imagina un único repositorio con varias áreas bien diferenciadas - un frontend, un backend, algo de infraestructura, el cableado de CI/CD - y varios agentes trabajándolo al mismo tiempo, cada uno en su propia branch. Quieres que avancen en paralelo sin pisarse, y quieres una inteligencia central capaz de ver todo su trabajo a la vez: revisar el diff de un agente, hacer merge del de otro, resolver un conflicto, mantener el conjunto coherente. Las respuestas obvias fallan ambas. Los worktrees de Git son la respuesta que no falla.

El problema: un checkout solo tiene una branch

Un clon normal solo puede tener una branch en checkout a la vez. Si el agente A cambia el directorio de trabajo a su branch, los ficheros del agente B cambian bajo sus pies - has serializado a todo el mundo en un único escritorio. La solución evidente es tener N clones completos, uno por agente. Funciona, pero cada clon es su propio .git: una copia completa del historial, sus propios remotes, su propio estado de fetch. No comparten objetos y localmente no se conocen entre sí, así que mover una branch de uno a otro implica un viaje de ida y vuelta a través del remote.

Dos formas de dar a cada agente su escritorio N clones completos - pesados, aislados remote (GitHub) clon A copia .git branch A clon B copia .git branch B clon C copia .git branch C historial duplicado · se sincronizan solo a través del remote Un repo + worktrees - compartido, local escritorio A branch A escritorio B branch B escritorio C branch C .git - un almacén de objetos todas las branches comparten un historial barato de crear · diff y merge dos branches cualesquiera en local
N clones duplican todo el historial y solo pueden intercambiar trabajo a través del remote. Los worktrees mantienen un único almacén de objetos compartido, así que las branches conviven y dos cualesquiera se pueden comparar o hacer merge localmente.

Los worktrees son el camino intermedio: un solo repositorio - un .git, un almacén de objetos, un conjunto de branches - con muchos directorios de trabajo, cada uno con checkout en una branch distinta, todos vivos al mismo tiempo. Aislamiento del estado de trabajo, compartición del historial.

Qué es realmente un worktree

Piensa en un repositorio como un cerebro y un escritorio. El cerebro es .git: la base de datos de objetos, las refs, la configuración. El escritorio es el directorio de trabajo: los ficheros que de verdad editas. Un clon normal atornilla exactamente un escritorio a un cerebro. Un worktree los desacopla - un cerebro, muchos escritorios.

Cada escritorio es un directorio real en disco, con checkout en alguna branch, con su propio HEAD y su propio index (área de preparación). Pero todos comparten el mismo almacén de objetos, así que no hay historial duplicado y el coste en disco de un escritorio extra es mínimo. Una regla mantiene a todos a salvo: la misma branch no puede estar en checkout en dos worktrees a la vez. Git sencillamente se niega - y esa negativa es justo lo que impide que dos agentes corrompan una misma branch.

Un repositorio, muchos directorios de trabajo .git un almacén de objetos todo el historial · todas las branches compartido por cada escritorio → main/ branch: main wt-frontend/ branch: feature/fe-redesign wt-backend/ branch: feature/be-auth cada escritorio: su HEAD, index y branch
Un único almacén de objetos .git guarda todo el historial y todas las branches; cada directorio de trabajo tiene en checkout una branch distinta con su propio HEAD e index. Añade o quita escritorios sin coste - el cerebro es compartido.

Cómo funciona

Toda la interfaz es un único subcomando. Desde dentro de tu repo principal añades un escritorio, lo apuntas a una branch (nueva o existente), y git crea el directorio y le hace el checkout:

# estás en el repo principal (el "worktree principal")
cd ~/work/app

# un escritorio para el agente de backend, en una branch nueva
git worktree add ../wt-backend -b feature/be-auth

# el agente de frontend, su propia branch nueva
git worktree add ../wt-frontend -b feature/fe-redesign

# el agente de infra, a partir de una branch existente
git worktree add ../wt-infra existing-infra-branch

git worktree list     # cada escritorio + la branch que sostiene
git worktree remove ../wt-backend   # limpiar al terminar
git worktree prune    # eliminar entradas administrativas obsoletas

En disco tienes ahora hermanos - el repo principal más wt-backend, wt-frontend, wt-infra - cada uno en una branch distinta. Por debajo, los escritorios secundarios no cargan con un directorio .git completo; contienen un diminuto fichero .git que apunta de vuelta al .git/worktrees/<name>/ del repo principal. Sigue habiendo un solo almacén de objetos. Una branch creada en un escritorio es visible al instante desde cualquier otro, porque solo hay un repositorio.

Por qué es el sustrato adecuado para muchos agentes

El almacén de objetos compartido es lo importante de todo esto. Como cada branch vive en una sola base de datos, un agente coordinador situado en el worktree principal puede operar sobre el trabajo de todos sin tocar un remote: git log --all lo ve todo, puede hacer diff entre las branches de dos agentes cualesquiera, cherry-pick entre ellas, merge, resolver conflictos - todo localmente, al instante.

Ese último punto es fácil de infravalorar. Directorios de trabajo separados implican estado de compilación separado, así que un agente de frontend puede ejecutar su servidor de desarrollo mientras el agente de infra aplica Terraform en un sandbox y el agente de backend ejecuta su batería de pruebas - sin que ninguno pelee por los mismos ficheros.

Formas de trabajar

Los worktrees son un sustrato, no un método. Unos cuantos patrones encajan limpiamente con equipos reales y flotas de agentes reales.

Orquestador y trabajadores

El worktree principal es el cerebro central. Lanza un trabajador por worktree, cada uno en su propia branch. Los trabajadores hacen commit en sus branches; el orquestador integra - merge, rebase, cherry-pick entre ellas localmente - luego hace push y abre los pull requests. Este es el encaje más próximo a "una inteligencia, muchos agentes".

Inteligencia central, muchos agentes - una branch cada uno orquestador worktree principal ve todas las branches diff · merge · revisión agente · frontend wt-frontend · feature/fe agente · backend wt-backend · feature/be agente · infra wt-infra · feature/infra cada uno hace commit en su branch integrar → push · abrir PRs
El orquestador vive en el worktree principal y puede ver todas las branches a la vez. Cada agente trabaja en su propio escritorio sobre su propia branch; el orquestador revisa, hace merge localmente, luego hace push y abre los PR.
  1. Un worktree por área (de larga duración) - wt-fe, wt-be, wt-infra, wt-cicd como escritorios semipermanentes que reflejan tus aplicaciones. Lo mejor cuando agentes o equipos encajan limpiamente con subsistemas.
  2. Un worktree por tarea (efímero) - levanta un escritorio nuevo para cada feature o bug, y deséchalo al hacer merge. Lo mejor cuando el trabajo tiene forma de tarea más que de equipo.
  3. Un worktree de integración - un escritorio dedicado donde el orquestador hace merge continuamente del trabajo de todos, para detectar conflictos pronto. Tu canario de "¿sigue encajando todo?".

En Claude Code esto viene de serie

Si manejas agentes con Claude Code, el patrón de worktree es nativo en lugar de algo que cableas a mano. Un subagente se puede lanzar con aislamiento por worktree - se ejecuta en su propio worktree creado automáticamente y el escritorio se limpia después, que es el patrón efímero automatizado. También hay herramientas para mover la sesión actual hacia dentro y fuera de un worktree. Así que "una inteligencia central orquestando N agentes sobre N branches" se convierte en: esta sesión es el cerebro en el worktree principal, cada agente lanzado obtiene su propio worktree aislado, y la integración sucede de vuelta en el escritorio principal.

Detalles que conviene conocer

El modelo mental es todo el truco: un cerebro, muchos escritorios. Deja de pensar en un repositorio como una carpeta dentro de la cual cambias de branch, y empieza a pensarlo como un único historial compartido del que cualquier cantidad de directorios de trabajo puede leer a la vez. Eso es lo que permite a una inteligencia central coordinar una flota de agentes - cada uno con confianza en su propia branch - mientras el historial que todos comparten sigue siendo la única fuente de verdad.

Todos los artículos

¿Tiene un sistema como este?

Póngase en contacto

Encuéntreme en las redes sociales