Saltar al contenido
Lección 9 de 14

Checkpoints y Experimentación Segura

8 min read

El Miedo a Romper Cosas

Todo desarrollador lo ha sentido: quieres intentar un refactor arriesgado, experimentar con una nueva arquitectura o eliminar una dependencia, pero el miedo a romper tu código funcional te detiene. El control de versiones ayuda, pero gestionar ramas experimentales para cada pequeña idea agrega fricción. Terminas jugando a lo seguro cuando deberías estar explorando.

Claude Code resuelve esto con checkpoints -- snapshots ligeros tanto de tu conversación como del estado de tu código que te permiten retroceder a cualquier punto anterior en segundos. Con checkpoints, la experimentación se vuelve gratuita. Prueba cualquier cosa, y si no funciona, revierte al instante.

Qué Son los Checkpoints

Un checkpoint es un snapshot que captura dos cosas simultáneamente: el estado de tu conversación con Claude y el estado de tu código en disco. Cada vez que Claude usa una herramienta -- edita un archivo, ejecuta un comando, crea un archivo nuevo -- se crea un checkpoint automáticamente. Esto significa que siempre tienes una línea de tiempo completa de cada cambio que Claude ha realizado durante tu sesión.

No necesitas hacer nada para crear estos checkpoints automáticos. Ocurren en segundo plano cada vez que Claude realiza una acción. Sin embargo, también puedes pensar en momentos específicos de tu flujo de trabajo como límites naturales de checkpoint: antes de comenzar un refactor, antes de cambiar de enfoque, antes de fusionar código experimental.

Visualizando y Restaurando Checkpoints

Para ver tu línea de tiempo de checkpoints, usa el comando /rewind (que también tiene el alias /checkpoint):

/rewind

Esto te muestra una línea de tiempo de todos los checkpoints en tu sesión actual, cada uno etiquetado con una descripción de qué acción se realizó. Puedes desplazarte por la línea de tiempo y seleccionar cualquier punto para restaurar.

Cuando seleccionas un checkpoint, Claude Code ofrece dos opciones de restauración:

Restaurar solo código. Esto revierte tus archivos en disco al estado en que estaban en ese checkpoint, pero mantiene tu conversación actual intacta. Usa esto cuando la conversación sigue siendo valiosa y solo quieres deshacer cambios en archivos.

Restaurar código y conversación. Esto revierte tanto tus archivos como tu conversación a ese checkpoint. Usa esto cuando quieres empezar de nuevo completamente desde un punto específico, como si todo lo posterior a ese checkpoint nunca hubiera ocurrido.

Prueba esto: inicia una sesión, pídele a Claude que haga algunos cambios en un archivo, luego ejecuta /rewind para ver la línea de tiempo. Selecciona un checkpoint anterior y elige "Restaurar solo código" para ver cómo tus archivos se revierten mientras mantienes la conversación.

El Flujo de Trabajo de Experimentación

Los checkpoints desbloquean un patrón de flujo de trabajo poderoso:

1. Nota tu estado actual (el checkpoint existe automaticamente)
2. Pidele a Claude que intente un cambio arriesgado
3. Evalua el resultado
4. Si esta bien → mantenlo y continua
5. Si esta mal → /rewind al checkpoint antes del cambio
6. Intenta un enfoque diferente desde el mismo punto de partida

Esto es fundamentalmente diferente a trabajar sin checkpoints. Sin ellos, necesitarías rastrear mentalmente qué cambió, deshacer ediciones manualmente o gestionar Git stashes. Con checkpoints, toda la operación de deshacer es un solo comando.

Aquí tienes un ejemplo concreto. Supongamos que quieres refactorizar un componente React de basado en clases a funcional con hooks, pero no estás seguro del mejor enfoque:

Tu: Refactoriza UserProfile de un componente de clase a un componente funcional
    usando hooks. Usa useState para estado local y useEffect para la llamada API.

Claude: [hace los cambios — checkpoint creado automaticamente]

Tu: Hmm, el array de dependencias del useEffect parece incorrecto y los tests estan
    fallando. /rewind

[Aparece la linea de tiempo, seleccionas el checkpoint antes del refactor]

Tu: Intentemos un enfoque diferente. Refactoriza UserProfile a un componente funcional,
    pero usa React Query en lugar de useEffect para la llamada API.

Claude: [hace cambios diferentes desde el mismo punto de partida limpio]

Acabas de probar dos enfoques completamente diferentes desde el mismo punto de partida, sin ninguna limpieza manual.

Ramificando Conversaciones

A veces no quieres retroceder -- quieres ir hacia un lado. El comando /branch (también con alias /fork) crea una nueva sesión que comienza desde tu punto actual pero diverge a partir de ahí:

/branch

Esto es como crear una rama Git pero para toda tu sesión de Claude Code. La sesión original permanece intacta, y obtienes una nueva sesión donde puedes explorar una dirección completamente diferente. Ambas sesiones comparten el mismo estado inicial pero evolucionan de forma independiente.

Usa ramificación cuando quieras:

  • Explorar dos enfoques competidores en paralelo
  • Mantener una sesión funcional estable mientras pruebas algo experimental
  • Dejar que un subagente investigue un problema sin afectar tu flujo de trabajo principal

Gestión de Sesiones

Claude Code proporciona varios comandos para gestionar tus sesiones a través del tiempo:

Reanudar una sesión anterior. Si cierras tu terminal y quieres retomar donde lo dejaste:

# Reanudar la sesion mas reciente
claude --resume

# Reanudar una sesion especifica con nombre
claude -r "refactor-auth"

Renombrar tu sesión actual para encontrarla más fácilmente después:

/rename refactor-auth-module

Listar sesiones recientes para ver qué está disponible para reanudar:

/resume

Esto muestra tus sesiones recientes con sus nombres, fechas y descripciones breves. Puedes seleccionar cualquier sesión para saltar de vuelta a ella con contexto completo.

Prueba esto: nombra tu sesión actual con /rename, sal de Claude Code, luego reanúdala con claude --resume para verificar que la sesión se restaura completamente.

Combinando Checkpoints con Subagentes

En la lección anterior aprendiste sobre subagentes -- agentes de IA enfocados que trabajan en aislamiento. Combinar subagentes con checkpoints te da la máxima seguridad para trabajo experimental:

Tu: Crea un subagente en un worktree para experimentar con reemplazar
    Express por Fastify. Prueba la migracion y reporta las diferencias
    de rendimiento.

Claude: [crea subagente en worktree aislado]
        [el subagente hace cambios, ejecuta benchmarks]
        [el subagente reporta: Fastify es 2.3x mas rapido pero requiere
         reescribir 4 funciones de middleware]

Tu: Interesante. Esos resultados lucen prometedores. Aplica la migracion
    a Fastify al codebase principal.

Claude: [aplica los cambios — checkpoint creado]

Tu: En realidad, la reescritura de middleware es demasiado trabajo por ahora.
    /rewind

[Los archivos revierten al estado pre-migracion, pero conservas los datos
 de rendimiento del reporte del subagente]

El subagente hizo todo el trabajo exploratorio en un worktree aislado, así que tu codebase principal nunca estuvo en riesgo. Cuando intentaste aplicar los cambios y cambiaste de opinión, un solo /rewind restauró todo. Conservaste el conocimiento pero descartaste los cambios de código.

Cuándo los Checkpoints Te Salvan

Dirección de refactor equivocada. Le pediste a Claude que reestructurara un módulo y tomó un enfoque que no encaja con tu arquitectura. En lugar de deshacer manualmente docenas de cambios en archivos, un /rewind te devuelve al estado pre-refactor.

Tests rotos después de cambios. Claude hizo una serie de cambios que parecían correctos pero rompieron tu suite de tests de formas inesperadas. Restaura el checkpoint, analiza qué salió mal e intenta de nuevo con mejores restricciones.

Mala resolución de merge. Le pediste a Claude que resolviera conflictos de merge y eligió el lado equivocado en varios conflictos. Retrocede y da instrucciones más específicas sobre qué cambios conservar.

Intercambio experimental de dependencia. Querías probar reemplazar una librería por otra. El intercambio introdujo bugs sutiles. Retrocede al instante en lugar de intentar depurar cada problema.

Ediciones en cascada que salieron mal. Un cambio en un archivo provocó que Claude actualizara otros diez archivos, y algunas de esas actualizaciones introdujeron errores. El rewind te lleva de vuelta antes de que la cascada comenzara.

Consejos Prácticos

Nombra tus sesiones. Cuando comiences a trabajar en algo significativo, ejecuta /rename con un nombre descriptivo. Tu yo del futuro agradecerá poder encontrar la sesión rápidamente.

Usa ramificación para comparaciones A/B. Cuando quieras comparar dos enfoques, ramifica la sesión e intenta un enfoque en cada una. Compara resultados sin ninguna limpieza.

Combina con Git. Los checkpoints operan de forma independiente a Git. Usa checkpoints para iteración rápida dentro de una sesión, y commits de Git para los cambios que quieras mantener permanentemente. Una vez que estés satisfecho con el resultado de un experimento, haz commit.

No le temas al rewind. Todo el propósito de los checkpoints es eliminar el costo de la experimentación. Si te encuentras dudando antes de pedirle a Claude que pruebe algo, esa es una señal de que deberías estar usando checkpoints más agresivamente.

Revisa la línea de tiempo. Periódicamente revisa /rewind para ver la línea de tiempo de cambios en tu sesión. Sirve como un registro de todo lo que Claude hizo, lo cual es útil para entender la historia de una sesión larga.

Los checkpoints transforman Claude Code de una herramienta que usas con cautela en una que usas con audacia. Cada experimento es reversible, cada enfoque es testeable y el costo de probar algo nuevo es efectivamente cero.