Cap 5: Sesiones, Resumption y Forking

Por: Artiko
claudesesionesforkresumedecomposition

Sesiones, Resumption y Forking

Gestionar sesiones de forma inteligente permite continuar trabajo previo, explorar alternativas y dividir tareas grandes en passes manejables.


—resume para continuar sesiones nombradas

Cada sesión de Claude Code puede tener un nombre. Para retomarla:

# Iniciar una sesión con nombre
claude --session "auth-refactor"

# Retomarla después
claude --resume "auth-refactor"

Al resumir, Claude recupera el historial de la sesión y puede continuar donde se quedó. El contexto previo (mensajes, tool results, archivos leídos) está disponible.

Sesiones recientes sin nombre

# Listar sesiones recientes
claude --resume

# Retomar la más reciente
claude --continue

Cuándo resumir vs empezar fresco

SituaciónAcción
El contexto previo sigue siendo mayormente válidoResumir
Han cambiado muchos archivos desde la última sesiónEmpezar fresco con summary
La tarea es continuación directa de la anteriorResumir
El context window estaba casi llenoEmpezar fresco
Quieres un approach completamente diferenteEmpezar fresco

Informar sobre cambios al resumir

Si entre sesiones cambiaron archivos relevantes, informa a Claude al inicio:

> Desde la última sesión:
> - Se actualizó src/auth/token.ts (nuevo campo refresh_token)
> - Se eliminó src/utils/deprecated.ts
> - Se agregaron tests en tests/auth/token.test.ts
> Continúa el refactoring del módulo de autenticación.

Sin esta información, Claude podría razonar sobre un estado de archivos que ya no existe.

fork_session para exploración divergente

fork_session crea una rama de exploración a partir del estado actual. El fork comparte el baseline (filesystem, historial hasta el punto de fork) pero opera de forma independiente.

Sesión principal ──────────────────────────►

    ├── fork_session("approach-sql-raw")  ──►

    └── fork_session("approach-orm")  ──────►

Casos de uso

Exploración de diseño: probar 2-3 approaches antes de comprometerse con uno.

# Desde la sesión principal
fork_session("caching-redis")
# → explora implementación con Redis

fork_session("caching-memcached")
# → explora implementación con Memcached

Cambios riesgosos: probar una refactorización sin afectar el trabajo estable.

Pruebas de concepto rápidas: validar una idea antes de invertir tiempo en la implementación completa.

Fork vs spawning paralelo

Aspectofork_sessionSpawning paralelo (Task)
EstadoHereda filesystem completoContexto aislado
PropósitoExplorar alternativesDividir trabajo
ResultadoUn approach ganadorMúltiples outputs combinados
HistorialHereda hasta punto de forkLimpio

Task decomposition: fijo vs dinámico

Prompt chaining fijo

Una secuencia predefinida de pasos donde cada paso alimenta al siguiente:

Paso 1: Extraer esquema →
Paso 2: Generar tipos TypeScript →
Paso 3: Crear validadores Zod →
Paso 4: Generar tests

Cada paso es un prompt diferente. La salida del paso N es la entrada del paso N+1. El flujo siempre es el mismo.

Ventajas: predecible, fácil de debuggear, cada paso es testeable.

Desventajas: no se adapta a casos inesperados, desperdicia pasos si la tarea es simple.

Descomposición dinámica adaptativa

El coordinator analiza la tarea y decide en runtime qué subtareas crear:

Coordinator analiza: "Migrar módulo de pagos a nuevo proveedor"

    ├── Complejidad alta detectada
    │   ├── Subtarea: Mapear API del nuevo proveedor
    │   ├── Subtarea: Adaptar interfaces existentes
    │   ├── Subtarea: Migrar tests
    │   └── Subtarea: Actualizar documentación

    vs.

    └── Complejidad baja detectada
        └── Subtarea única: Actualizar endpoint y credenciales

Ventajas: se adapta a la complejidad real, no desperdicia recursos.

Desventajas: el coordinator debe tener buen juicio para descomponer correctamente.

Cuándo usar cada uno

SituaciónApproach
Pipeline bien definido que no cambiaPrompt chaining fijo
Tareas con complejidad variableDescomposición dinámica
Procesos regulatorios con pasos obligatoriosPrompt chaining fijo
Solicitudes de usuario abiertasDescomposición dinámica

Splitting large code reviews

Las revisiones de código grandes se benefician de un approach en dos passes:

Pass 1: Per-file review

Cada archivo se revisa individualmente por un subagente:

Subagente A: Revisa src/auth/login.ts
  → Issues encontrados: 2 (input validation, error handling)

Subagente B: Revisa src/auth/token.ts
  → Issues encontrados: 1 (token expiration check)

Subagente C: Revisa src/auth/middleware.ts
  → Issues encontrados: 0

Cada subagente se enfoca en la calidad interna del archivo: estilo, bugs, seguridad, performance.

Pass 2: Integration review (cross-file)

Un subagente o el coordinator revisa las interacciones entre archivos:

Integration review:
  - ¿login.ts y token.ts usan el mismo formato de token? ✓
  - ¿middleware.ts maneja todos los errores que login.ts puede lanzar? ✗
  - ¿Las interfaces compartidas son consistentes? ✓
  - ¿Los imports están correctos y no hay dependencias circulares? ✓

Por qué dos passes

Un solo pass que revise todo simultáneamente puede:

Dos passes garantizan cobertura completa: profundidad per-file + amplitud cross-file.

Combinar resultados

El coordinator agrega los findings de ambos passes:

interface CodeReviewResult {
  per_file_issues: FileIssue[];      // Del pass 1
  integration_issues: IntegrationIssue[];  // Del pass 2
  summary: string;
  severity_breakdown: {
    critical: number;
    high: number;
    medium: number;
    low: number;
  };
}

Resumen

ConceptoDetalle
—resumeRetomar sesiones nombradas con contexto previo
fork_sessionExploración divergente desde baseline compartido
Cambios entre sesionesInformar explícitamente a Claude
Prompt chainingPipeline fijo para procesos predefinidos
Decomposición dinámicaAdaptativa según complejidad
Code reviewPass per-file + pass integration cross-file

Anterior: Workflows, Hooks y Handoffs | Índice: Índice | Siguiente: Diseño de Tools