Saltar al contenido principal

Capitulo 10: Subagentes Avanzados y Sesiones Paralelas

El capitulo anterior introdujo los subagentes como instancias aisladas que ejecutan tareas individuales. Este capitulo lleva el concepto al siguiente nivel: multiples agentes trabajando en paralelo, sesiones en segundo plano, procesamiento por lotes y patrones de coordinacion que multiplican tu productividad. Estas tecnicas son las que distinguen a un usuario avanzado de uno que simplemente conversa con Claude.


10.1 Agent Teams​

Concepto​

Agent Teams es una capacidad en preview que permite que multiples agentes trabajen de forma coordinada, comunicandose entre si y dividiendo el trabajo de forma inteligente. A diferencia de los subagentes simples (donde el padre delega y espera), en un Agent Team cada agente (llamado teammate) opera de forma autonoma con su propio contexto y conjunto de herramientas.

Arquitectura conceptual​

┌──────────────────────────────────────────────────────┐
│ AGENT TEAM │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌────────────┐ │
│ │ Teammate A │ │ Teammate B │ │ Teammate C │ │
│ │ (Frontend) │ │ (Backend) │ │ (Tests) │ │
│ │ │ │ │ │ │ │
│ │ Contexto │ │ Contexto │ │ Contexto │ │
│ │ propio │ │ propio │ │ propio │ │
│ │ │ │ │ │ │ │
│ │ Tools: │ │ Tools: │ │ Tools: │ │
│ │ Read, Edit, │ │ Read, Edit, │ │ Read, │ │
│ │ Bash │ │ Bash, DB │ │ Bash │ │
│ └──────┬───────┘ └──────┬───────┘ └─────┬──────┘ │
│ │ │ │ │
│ └────────┬────────┘ │ │
│ │ Coordinacion │ │
│ └─────────────────────────┘ │
└──────────────────────────────────────────────────────┘

Caracteristicas clave​

  • Contexto independiente: cada teammate tiene su propia ventana de contexto, sin compartir historial con los demas.
  • Herramientas propias: cada teammate puede tener un conjunto diferente de herramientas habilitadas.
  • Comunicacion: los teammates pueden intercambiar mensajes para coordinar su trabajo.
  • Evento TeammateIdle: cuando un teammate termina su tarea y queda inactivo, se dispara un evento que permite a los hooks reaccionar (por ejemplo, asignar nueva tarea o notificar al equipo).

Caso de uso​

> Implementa la nueva funcionalidad de notificaciones push.
Necesito un teammate para el frontend (componente React + service worker),
otro para el backend (API endpoints + WebSocket) y un tercero
para escribir los tests de integracion.

En este escenario, cada teammate trabaja en su area sin interferir con los otros, pero pueden coordinarse: el teammate de tests espera a que frontend y backend terminen antes de escribir tests de integracion.

Preview de investigacion

Agent Teams esta actualmente en preview de investigacion. La API y comportamiento pueden cambiar. Consulta la documentacion oficial de Anthropic para el estado actual de esta funcionalidad.


10.2 Sesiones background​

Ejecutar tareas en segundo plano​

Las sesiones background te permiten lanzar tareas que se ejecutan independientemente mientras tu continuas trabajando en la terminal o en otra sesion de Claude Code.

# Lanzar una tarea en segundo plano
claude --bg "Revisa todos los archivos en src/ y genera un reporte
de deuda tecnica con prioridades"

# Claude responde inmediatamente con un ID de sesion:
# Background session started: sess_a7b3c9d2
# Use 'claude agents' to monitor progress

Monitorear sesiones activas​

El comando claude agents muestra el estado de todas las sesiones background:

claude agents

# Salida:
# ┌──────────────────────────────────────────────────────────┐
# │ Agent Sessions │
# ├──────────────┬───────────┬──────────────────────────────┤
# │ ID │ Status │ Task │
# ├──────────────┼───────────┼──────────────────────────────┤
# │ sess_a7b3c │ Active │ Reporte deuda tecnica │
# │ sess_f1e2d │ Blocked │ Migracion TypeScript │
# │ sess_x9y8z │ Done │ Revision seguridad │
# └──────────────┴───────────┴──────────────────────────────┘

Los estados posibles son:

EstadoSignificado
ActiveEl agente esta ejecutando tareas
BlockedEl agente necesita una decision o permiso
DoneLa tarea se completo

Reconectarse a una sesion​

Para ver el resultado de una sesion completada o intervenir en una bloqueada:

# Reconectarse a una sesion especifica
claude --resume sess_a7b3c

# Claude muestra el estado actual y el resultado (si esta completada)

Modelos diferentes por sesion​

Cada sesion background puede usar un modelo diferente, optimizando costo y capacidad:

# Sesion background con Opus para tarea compleja
claude --bg --model claude-opus-4-8 "Disena la arquitectura
del nuevo sistema de permisos con RBAC"

# Sesion background con Haiku para tarea simple
claude --bg --model claude-haiku-4-5 "Lista todos los TODOs
y FIXMEs del proyecto con su ubicacion"

Flujo de trabajo tipico​

# 1. Lanzar varias tareas en paralelo
claude --bg "Revisa la seguridad del modulo auth"
claude --bg "Genera tests para el modulo payments"
claude --bg "Documenta la API de users"

# 2. Continuar trabajando en tu terminal normalmente
npm run dev

# 3. Verificar progreso periodicamente
claude agents

# 4. Revisar resultados cuando esten listos
claude --resume sess_xxx
Productividad con sesiones background

Las sesiones background son ideales para tareas que no necesitan tu atencion inmediata: revisiones de codigo, generacion de documentacion, analisis de rendimiento. Lanzalas y continua con tu trabajo principal.


10.3 Fan-out con claude -p​

Procesamiento por lotes con pipes​

El flag -p (pipe) permite enviar un prompt a Claude Code de forma no interactiva, lo que abre la puerta a procesamiento masivo mediante scripts de shell.

Iterar sobre archivos modificados​

# Revisar cada archivo modificado en el ultimo commit
git diff --name-only HEAD~1 | while read file; do
claude -p "Revisa este archivo buscando bugs: $file" \
--allowedTools Read,Grep
done

Restriccion de herramientas​

El flag --allowedTools limita que herramientas puede usar Claude en modo no interactivo, proporcionando una capa de seguridad:

# Solo lectura: Claude puede leer y buscar, pero no modificar
claude -p "Analiza src/auth/login.ts" --allowedTools Read,Grep,Glob

# Lectura y ejecucion: puede correr tests pero no editar
claude -p "Ejecuta los tests y reporta fallos" --allowedTools Read,Bash

Salida estructurada con JSON​

Para integrar resultados en pipelines automatizados, usa --output-format json:

# Obtener resultado en formato JSON
claude -p "Lista las dependencias desactualizadas" \
--output-format json

# Salida:
# {
# "result": "...",
# "cost_usd": 0.023,
# "duration_ms": 4521,
# "model": "claude-sonnet-4-6"
# }

Paralelizacion con shell​

Para acelerar el procesamiento, ejecuta multiples instancias en paralelo:

# Paralelizar con & (background de shell)
for file in src/controllers/*.ts; do
claude -p "Revisa $file buscando queries SQL sin parametrizar" \
--allowedTools Read,Grep &
done
wait # Esperar a que todas terminen
echo "Revision completada"
# Paralelizar con xargs para control de concurrencia
git diff --name-only HEAD~1 | xargs -P 4 -I {} \
claude -p "Analiza {} buscando problemas de rendimiento" \
--allowedTools Read,Grep,Glob

Script completo de revision de PR​

#!/bin/bash
# review-pr.sh - Revisa cada archivo cambiado en un PR

BRANCH="${1:-HEAD}"
OUTPUT_DIR="./reviews"
mkdir -p "$OUTPUT_DIR"

echo "Revisando cambios en $BRANCH..."

git diff --name-only main..."$BRANCH" | while read file; do
echo "Revisando: $file"
claude -p "Revisa el archivo $file buscando:
1. Bugs potenciales
2. Problemas de seguridad
3. Violaciones de estilo
Formato: lista con severidad (ALTA/MEDIA/BAJA)" \
--allowedTools Read,Grep,Glob \
--output-format json > "$OUTPUT_DIR/$(basename $file).json"
done

echo "Revisiones guardadas en $OUTPUT_DIR/"
Costos en fan-out

Cada invocacion de claude -p es una sesion independiente con su propio costo. Si iteras sobre 100 archivos, son 100 sesiones. Monitorea tu consumo de tokens, especialmente con modelos costosos.


10.4 Worktrees con --worktree​

Concepto​

El flag --worktree lanza una sesion de Claude Code en un git worktree dedicado: una copia de trabajo separada del repositorio con su propia rama. Los cambios que realice Claude quedan aislados de tu directorio principal.

Diferencia con subagentes fork​

Mientras que isolation: worktree en Agent() es para subagentes dentro de una sesion, --worktree se usa desde la linea de comandos para crear una sesion completa en un worktree aislado.

Uso basico​

# Crear una sesion en worktree para refactorizar
claude --worktree "Refactoriza el modulo de autenticacion
para usar el patron Repository en lugar de acceso directo a DB"

# Claude crea automaticamente:
# - Un worktree en un directorio temporal
# - Una rama nueva (ej: worktree/refactor-auth-repo)
# - Trabaja alli sin afectar tu rama actual

Combinacion con background​

La combinacion --worktree + --bg es especialmente potente para lanzar multiples refactorizaciones en paralelo:

# Lanzar tres refactorizaciones en paralelo, cada una en su worktree
claude --worktree --bg "Migra src/auth/ de callbacks a async/await"
claude --worktree --bg "Extrae constantes magicas en src/payments/"
claude --worktree --bg "Convierte src/utils/ de CommonJS a ESM"

# Cada sesion trabaja en su propia rama sin conflictos
claude agents

# Cuando terminen, revisar cada rama:
# git diff main..worktree/migrate-auth-async
# git diff main..worktree/extract-payment-constants
# git diff main..worktree/convert-utils-esm

Flujo de trabajo completo​

# 1. Lanzar refactorizacion en worktree
claude --worktree "Actualiza todos los componentes React de clase
a componentes funcionales con hooks"

# 2. Claude trabaja en su worktree aislado...
# Edita archivos, ejecuta tests, itera

# 3. Al terminar, Claude reporta:
# Worktree: /tmp/claude-wt-r4nd0m
# Rama: worktree/react-class-to-hooks
# Archivos modificados: 23
# Tests: todos pasando

# 4. Revisar cambios
git log main..worktree/react-class-to-hooks
git diff main..worktree/react-class-to-hooks

# 5. Si estas satisfecho, integrar
git merge worktree/react-class-to-hooks
Worktrees para experimentacion

Usa --worktree cuando quieras explorar una solucion sin comprometer tu rama actual. Si el resultado no te convence, simplemente no integras la rama y el worktree se puede eliminar sin consecuencias.


10.5 Batch: cambios a gran escala​

Que es /batch​

El skill /batch esta disenado para cambios que afectan a muchos archivos simultaneamente: migraciones, renombramientos masivos, actualizaciones de API, cambios de patron. En lugar de editar archivo por archivo, /batch automatiza todo el proceso.

Flujo de trabajo​

El proceso de /batch tiene cuatro fases:

┌──────────────────────────────────────────────────────┐
│ Fase 1: INVESTIGACION │
│ Claude analiza el codebase para entender el alcance │
│ del cambio. Identifica todos los archivos afectados.│
├──────────────────────────────────────────────────────┤
│ Fase 2: PLANIFICACION │
│ Divide el trabajo en unidades independientes. │
│ Presenta el plan para tu aprobacion. │
├──────────────────────────────────────────────────────┤
│ Fase 3: EJECUCION PARALELA │
│ Crea un worktree por unidad de trabajo. │
│ Implementa cambios y ejecuta tests en paralelo. │
├──────────────────────────────────────────────────────┤
│ Fase 4: INTEGRACION │
│ Abre un PR por unidad (o uno consolidado). │
│ Reporta resultados de tests por unidad. │
└──────────────────────────────────────────────────────┘

Casos de uso ideales​

EscenarioEjemplo
Migracion de APIActualizar todas las llamadas de fetch a un nuevo wrapper apiClient
Renombramiento masivoCambiar el namespace de @old-company a @new-company
Actualizacion de patronMigrar de class components a hooks en todo el proyecto
Cambio de dependenciaReemplazar moment.js por date-fns en todo el codebase
Actualizacion de esquemaPropagar un cambio de modelo a todos los controladores y tests

Ejemplo de uso​

> /batch Migra todas las llamadas a la API legacy (v1) al nuevo
cliente (v2). Los endpoints cambiaron de /api/v1/* a /api/v2/*
y el formato de respuesta ahora usa camelCase en lugar de
snake_case.

# Claude responde:
#
# Investigacion completada. He identificado:
# - 47 archivos con llamadas a /api/v1/
# - 12 modulos de servicios
# - 8 archivos de tests
#
# Plan propuesto (5 unidades de trabajo):
#
# Unidad 1: Servicios de usuario (8 archivos)
# - src/services/user*.ts
# - tests/services/user*.test.ts
#
# Unidad 2: Servicios de productos (11 archivos)
# - src/services/product*.ts
# - tests/services/product*.test.ts
#
# Unidad 3: Servicios de ordenes (9 archivos)
# - src/services/order*.ts
# - tests/services/order*.test.ts
#
# Unidad 4: Componentes frontend (12 archivos)
# - src/components/**/*Api*.tsx
#
# Unidad 5: Utilidades compartidas (7 archivos)
# - src/utils/api*.ts
# - src/lib/client.ts
#
# ¿Apruebas este plan? (si/no/modificar)

Despues de tu aprobacion, Claude crea un worktree por unidad, implementa los cambios en paralelo, ejecuta tests en cada uno y abre PRs cuando todo pasa.

Revision obligatoria

Aunque /batch automatiza el proceso, siempre revisa los PRs generados antes de hacer merge. Los cambios masivos automatizados requieren supervision humana, especialmente en transformaciones de formato o actualizaciones de API.


10.6 Patron Writer/Reviewer​

El problema de la contaminacion contextual​

Cuando una sola sesion de Claude escribe codigo y luego lo revisa, existe un sesgo: el reviewer "recuerda" las decisiones del writer y tiende a validarlas en lugar de cuestionarlas. Esto se llama contaminacion contextual.

La solucion: dos sesiones separadas​

El patron Writer/Reviewer usa dos sesiones completamente independientes:

  1. Writer: implementa la solucion en una sesion fresca.
  2. Reviewer: revisa la implementacion en otra sesion fresca, sin conocer el razonamiento del Writer.

Flujo paso a paso​

Paso 1: WRITER
─────────────────────────────────
Sesion nueva. Contexto limpio.

claude --worktree "Implementa un sistema de rate limiting
para la API usando Redis. Debe soportar limites por
usuario, por IP y por endpoint."

→ Writer implementa la solucion en su worktree
→ Commits en rama: worktree/rate-limiting


Paso 2: REVIEWER
─────────────────────────────────
Sesion nueva. Contexto limpio.
El Reviewer NO sabe como ni por que el Writer
tomo sus decisiones.

claude -p "Revisa los cambios en la rama worktree/rate-limiting
comparados con main. Busca:
1. Bugs logicos
2. Problemas de seguridad
3. Race conditions con Redis
4. Casos limite no cubiertos
5. Tests faltantes
Reporta cada hallazgo con severidad y sugerencia." \
--allowedTools Read,Grep,Glob,Bash


Paso 3: EVALUACION
─────────────────────────────────
Tu revisas los hallazgos del Reviewer.
Si hay problemas criticos, puedes:
a) Corregir manualmente
b) Lanzar un nuevo Writer con los hallazgos
c) Iterar el ciclo

Implementacion con script​

#!/bin/bash
# writer-reviewer.sh
# Patron Writer/Reviewer automatizado

TASK="$1"
BRANCH_NAME="$2"

echo "=== FASE WRITER ==="
claude --worktree "$TASK"
# Obtener la rama creada
WRITER_BRANCH=$(git branch --list "worktree/$BRANCH_NAME*" | head -1 | tr -d ' ')

echo ""
echo "=== FASE REVIEWER ==="
echo "Revisando rama: $WRITER_BRANCH"
claude -p "Revisa exhaustivamente los cambios en la rama $WRITER_BRANCH
comparados con main. Busca bugs, problemas de seguridad, casos limite,
y violaciones de las convenciones del proyecto.
Para cada hallazgo indica: severidad, archivo, linea y sugerencia." \
--allowedTools Read,Grep,Glob,Bash \
--output-format json > review-results.json

echo ""
echo "=== RESULTADOS ==="
echo "Revision guardada en review-results.json"

Por que funciona​

AspectoSesion unicaWriter/Reviewer
ContextoCompartido: writer y reviewer ven lo mismoSeparado: reviewer no conoce el razonamiento
SesgoAlto: tendencia a validar propias decisionesBajo: revision genuinamente independiente
CoberturaLimitada por fatiga contextualMayor: cada sesion empieza fresca
CostoUna sesionDos sesiones (mayor costo de tokens)
CalidadBuenaSuperior para cambios criticos
Cuando usar Writer/Reviewer

Reserva este patron para cambios criticos: sistemas de seguridad, logica de pagos, migraciones de datos, cambios en autenticacion. Para cambios menores o de bajo riesgo, una sola sesion es suficiente.


Resumen del capitulo​

Conceptos clave
  • Agent Teams (preview) permite que multiples agentes cooperen con contextos independientes y comunicacion directa.
  • Sesiones background (claude --bg) ejecutan tareas en segundo plano mientras continuas trabajando. Monitorea con claude agents y reconecta con --resume.
  • Fan-out con claude -p permite procesamiento masivo no interactivo, paralelizable con herramientas de shell y con salida JSON estructurada.
  • Worktrees (claude --worktree) crean copias de trabajo aisladas con ramas propias, combinables con --bg para refactorizacion paralela.
  • /batch investiga, planifica, ejecuta en paralelo y abre PRs para cambios a gran escala. Siempre requiere aprobacion del plan.
  • Patron Writer/Reviewer elimina la contaminacion contextual usando dos sesiones independientes para implementar y revisar.

Preguntas de autoevaluacion​

  1. Explica la diferencia entre un subagente background (run_in_background: true) y una sesion background (claude --bg). Cuando usarias cada uno?

  2. Tienes un monorepo con 200 archivos TypeScript y necesitas migrar todos de una version de API a otra. Describe paso a paso como usarias /batch para esta tarea. Que haces si una unidad de trabajo falla los tests?

  3. Disena un script de fan-out que revise la seguridad de todos los archivos modificados en un PR. Incluye restriccion de herramientas, salida JSON y paralelizacion controlada.

  4. Compara --worktree con isolation: worktree en Agent(). En que nivel opera cada uno y cuando elegirías uno sobre otro?

  5. Un colega argumenta que el patron Writer/Reviewer es un desperdicio de tokens porque Claude puede revisar su propio codigo. Redacta una respuesta explicando el problema de contaminacion contextual con un ejemplo concreto.


Laboratorio asociado​

Los conceptos de este capitulo se practican en el Laboratorio L10.1: Sesiones paralelas y procesamiento por lotes, donde lanzaras sesiones background, construiras scripts de fan-out y aplicaras el patron Writer/Reviewer en un proyecto real.

Dirigete a la seccion de Laboratorios para acceder al ejercicio.