Recursos
AutomatizaciónPara técnicos

Agentes en paralelo con git worktrees

Cómo correr varios agentes de Claude Code a la vez sobre el mismo repositorio sin que se pisen, y cuándo vale la pena hacerlo.

Por Carlos Pérez8 min de lectura
01

El cuello de botella no es el modelo

Cuando trabajas con un solo agente, las tareas hacen fila: tú revisas una, le das la siguiente, esperas, revisas otra. La última tarea de la cola puede esperar horas para ejecutar 30 minutos de trabajo real.

Un modelo más rápido ayuda poco con eso. Lo que ayuda es tener más carriles en paralelo: varios agentes, cada uno con su tarea, trabajando al mismo tiempo sobre el mismo proyecto. El problema es que, si todos comparten una sola carpeta, se estorban. Esta guía explica cómo evitarlo con git worktree.

Qué necesitas

Claude Code instalado, un repositorio git con tests y algo de comodidad con la terminal. Si tu proyecto es pequeño o no tiene tests, lee primero la sección de cuándo no hacerlo.

02

Cuatro roles con fronteras claras

La idea es partir una funcionalidad en roles y abrir una sesión de Claude Code por rol. La regla de oro: ninguna carpeta pertenece a dos roles.

Frontend

Rama `feat/frontend`. Interfaz y llamadas a la API. Solo toca `web/` o tus carpetas de componentes y páginas.

Backend

Rama `feat/backend`. Endpoints, lógica y validación. Solo toca `api/` y `tests/api/`.

Docs

Rama `docs/api`. Documentación de la API y de la funcionalidad. Solo toca `docs/`.

Revisor

Rama `review/contract`. No escribe código: compara frontend y backend contra el contrato y deja un `REPORTE-REVISION.md`. Reporta errores, no los corrige.

El revisor es la pieza que más se subestima. El fallo típico del trabajo en paralelo no es un bug de código sino un desacuerdo: el frontend manda email y el backend espera correo.

03

Por qué es mejor, no solo más rápido

  • Contexto limpio: cada agente tiene su propia ventana de contexto y no arrastra ruido de las otras tareas.
  • Revisión independiente: quien escribe el código es mal revisor de su propio trabajo.
  • Diseño por interfaces: trabajar en paralelo te obliga a definir el contrato antes de empezar, y eso mejora el diseño.
  • De ejecutor a director: tu trabajo pasa a ser decidir qué se construye y en qué orden.
  • Costos honestos: ahorras tiempo de reloj, pero gastas más tokens, porque cada agente carga su propio contexto.

Cuatro agentes no son cuatro veces más rápido

Escribir el contrato, revisar y hacer el merge son pasos secuenciales, y la tarea más larga marca el ritmo. Con la ley de Amdahl, mejora = 1 / ((1 − p) + p / n): si el 80% del trabajo es paralelizable (p = 0.8) y usas 4 agentes, la mejora es de 2.5x, y con infinitos agentes el techo es 5x. Para ir más rápido, equilibra el tamaño de las tareas y reduce la parte secuencial en lugar de sumar agentes.

04

Primero el contrato

Antes de lanzar a nadie, escribe un CONTRATO-API.md y haz commit en la rama principal, para que todos los worktrees partan de la misma versión. Es el documento que evita que frontend y backend se desencuentren. Un ejemplo para un endpoint de login debería incluir:

  • Endpoint: POST /api/auth/login.
  • Request: email (texto, obligatorio, formato válido, máximo 254 caracteres) y password (texto, obligatorio, entre 8 y 128 caracteres).
  • Respuesta 200: token (JWT), expiresIn (3600) y user con id y name.
  • Formato único de error: { "error": { "code": ..., "message": ... } }.
  • Códigos de error: 400 VALIDATION_ERROR, 401 INVALID_CREDENTIALS (el mismo mensaje para correo o contraseña incorrectos, por seguridad) y 429 TOO_MANY_ATTEMPTS (más de 5 intentos fallidos en 15 minutos por IP).
  • Decisiones abiertas: por ejemplo, 'recordarme' con sesiones de 30 días queda fuera de esta versión.
Prompt para redactar el contrato

Voy a repartir esta funcionalidad entre agentes en paralelo: [describe la funcionalidad]. Antes de eso, ayúdame a redactar CONTRATO-API.md: endpoints, campos de request y response con tipos y límites, un único formato de error, códigos de error con su causa y una sección de decisiones abiertas. Hazme las preguntas que necesites y no asumas nada que no esté definido.

05

La solución: git worktrees

Si dejas a cuatro agentes en la misma carpeta y la misma rama, aparecen archivos a medio escribir, tests que fallan por código de otro agente, checkouts que cambian los archivos bajo los pies de los demás y commits mezclados por un git add ..

Un repositorio tiene una base de historial (.git) y una carpeta de trabajo. Un worktree te da varias carpetas de trabajo que comparten el mismo historial. Una rama no puede estar activa en dos worktrees a la vez, y eso es justo lo que necesitas.

Terminal
# Una carpeta hermana por rol, cada una con su rama nueva
git worktree add ../app-frontend -b feat/frontend
git worktree add ../app-backend  -b feat/backend
git worktree add ../app-docs     -b docs/api
git worktree add ../app-review   -b review/contract

# Ver todas las carpetas de trabajo y su rama
git worktree list

# Al terminar: quitar una carpeta y limpiar referencias
git worktree remove ../app-frontend
git worktree prune

Misma carpeta, ramas distintas

Casi no usa disco y comparte historial, pero no hay trabajo simultáneo real.

Cuatro clones

Paralelismo real, pero cuatro copias completas del historial que solo se sincronizan con push y pull.

Worktrees

Paralelismo real, un único historial, commits visibles al instante y merges locales.

06

Anatomía del prompt de cada rol

Cada agente arranca con un archivo de instrucciones propio, por ejemplo en una carpeta agentes/. Estas son las partes que no deben faltar, con el backend como ejemplo:

  • Misión: implementar POST /api/auth/login tal como está en el contrato.
  • Dónde trabajas: worktree ../app-backend, rama feat/backend. No cambiar de rama, no hacer merge ni push. Si levantas un servidor, usa el puerto 3002.
  • Carpetas permitidas: api/ y tests/api/.
  • Prohibido: web/, docs/, CONTRATO-API.md, agentes/, y package.json con su lockfile. Preguntar antes de añadir una dependencia.
  • Regla del contrato: CONTRATO-API.md es la fuente de verdad. Si algo no encaja, detenerse y reportarlo.
  • Terminado: un test por cada caso del contrato (200, 400, 401, 429), los tests de la carpeta pasan y todo está commiteado con git status limpio.
  • Reporte: cerrar con un mensaje que empiece con TERMINADO: e indique qué se construyó, qué archivos cambiaron, cómo se probó y cualquier diferencia con el contrato.
Prompt para generar los prompts de rol

Lee CONTRATO-API.md y genera cuatro archivos de instrucciones en agentes/: frontend.md, backend.md, docs.md y revisor.md. Cada uno debe incluir: misión, worktree y rama donde trabaja, puerto asignado, carpetas permitidas, carpetas prohibidas, la regla de que el contrato es la fuente de verdad, el criterio de terminado y el formato de reporte que empieza con 'TERMINADO:'. El revisor no escribe código: solo genera REPORTE-REVISION.md.

07

Errores que nadie te cuenta

1

Falta el .env

Git no versiona secretos, así que cada worktree nace sin él. Cópialo a mano a cada carpeta y nunca lo subas al repositorio.

2

Choques de puerto

Dos servidores en el mismo puerto se pelean. Asigna un puerto por rol (3001, 3002...) dentro de cada prompt.

3

Dependencias que no se comparten

node_modules o .venv hay que instalarlos en cada worktree, o usar pnpm o uv con caché compartida.

4

Conflictos de lockfile

Un solo rol es dueño de las dependencias, o las acuerdas de antemano en el contrato.

5

Migraciones que chocan

Solo el backend crea migraciones. Si hace falta, una base de datos o esquema por worktree.

6

'La rama ya está en uso en otro lado'

Es una rama por worktree. Para ver el trabajo de otra rama sin cambiarte, usa git diff main...feat/backend.

7

Limpieza olvidada

Al terminar, quita los worktrees, ejecuta git worktree prune y borra las ramas ya integradas.

08

Cuándo sí y cuándo no

Paraleliza cuando las tareas son independientes, las fronteras entre carpetas son claras, el contrato se puede escribir de antemano, las tareas tienen tamaño parecido y duran más de una hora, y existen tests.

No lo hagas cuando los roles tocan los mismos archivos, los cambios están muy acoplados, todavía estás explorando, el proyecto es diminuto o no hay tests (sin ellos no puedes comprobar que el merge no rompió nada).

Regla práctica

Si no puedes escribir el contrato en 15 minutos, usa un solo agente. Esto no es una solución universal, y para trabajo pequeño o muy acoplado un agente suele ser la mejor opción.

09

Ejemplo completo: un login con cuatro agentes

El escenario: tienes una app con frontend y API y necesitas añadir el login con email y contraseña. Quieres que frontend, backend y documentación avancen a la vez, con un revisor que verifique que encajan. Este es el flujo de punta a punta, un prompt por paso.

Paso 1 — Contrato: define el acuerdo antes de lanzar a nadie

Necesito añadir login con email y contraseña. Ayúdame a redactar CONTRATO-API.md para POST /api/auth/login: campos con tipos y límites, respuesta 200, un único formato de error y los códigos 400, 401 (mismo mensaje para email o contraseña incorrectos) y 429 (más de 5 intentos fallidos en 15 minutos por IP). Anota como decisión abierta que 'recordarme' queda fuera de esta versión.

Revisa el contrato tú mismo y haz commit en la rama principal. Todo lo que se decida aquí te ahorra discusiones después.

Paso 2 — Prompts de rol: un archivo por agente

Con base en CONTRATO-API.md, crea en agentes/ los archivos frontend.md, backend.md, docs.md y revisor.md. Asigna los puertos 3001, 3002, 3003 y 3004. Cada rol debe tener carpetas permitidas y prohibidas, no puede hacer merge ni push, y debe terminar con un mensaje 'TERMINADO:'. El revisor solo escribe REPORTE-REVISION.md.

Paso 3 — Worktrees: una carpeta por rol

Crea cuatro worktrees como carpetas hermanas de este repositorio: ../app-frontend (rama feat/frontend), ../app-backend (rama feat/backend), ../app-docs (rama docs/api) y ../app-review (rama review/contract). Copia el .env a cada uno sin commitearlo, instala las dependencias en los que las necesiten y muéstrame el resultado de git worktree list.

Ahora abre una terminal por carpeta (o usa tmux) e inicia Claude Code en cada una pasándole su archivo, por ejemplo claude "$(cat agentes/backend.md)".

Paso 4 — Revisión: el revisor compara contra el contrato

Cuando frontend y backend hayan terminado, compara sus ramas contra CONTRATO-API.md usando git diff main...feat/frontend y git diff main...feat/backend. Revisa nombres de campos, códigos de error y límites. No corrijas nada: escribe cada diferencia en REPORTE-REVISION.md con archivo y línea.

Paso 5 — Merge y limpieza: en orden y con confirmación

Integra las ramas a main con git merge --no-ff en este orden: docs/api, feat/backend y feat/frontend. La rama review/contract no se integra. Corre los tests después de cada merge. Cuando todo pase, quita los worktrees, ejecuta git worktree prune y pídeme confirmación antes de borrar cualquier rama. No hagas push.

Fíjate en el orden del merge: primero la documentación, luego el backend y al final el frontend, para que cada integración se apoye en lo anterior ya probado.

10

Si ya usas Claude Code, que lo monte por ti

Atajo

Puedes pedirle a Claude Code que haga el diagnóstico y prepare todo el flujo. Está pensado para que se detenga en cada fase y no haga push ni borre nada sin tu confirmación.

Prompt para montar el flujo completo

Quiero trabajar en paralelo con git worktrees en este repositorio. Hazlo por fases y detente al final de cada una para que yo apruebe: (0) diagnostica el repo: estructura de carpetas, tests, .env y si la tarea se puede paralelizar; (1) redacta CONTRATO-API.md conmigo; (2) genera los prompts de rol en agentes/; (3) crea los worktrees; (4) dime cómo lanzar un agente por carpeta; (5) revisa los resultados contra el contrato; (6) integra con git merge --no-ff; (7) limpia. Nunca hagas push y nunca borres nada sin mi confirmación explícita. Si ves que no vale la pena paralelizar, dímelo y propón usar un solo agente.

¿Prefieres que lo haga por ti?

Puedo evaluar si tu proyecto se beneficia de agentes en paralelo, escribir el contrato, preparar los prompts de rol y dejarte el flujo funcionando en tu repositorio, para que tú solo dirijas.

Hablemos por WhatsApp