Saltar al contenido
Lección 9 de 14

Checkpoints y Experimentacion 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 codigo funcional te detiene. El control de versiones ayuda, pero gestionar ramas experimentales para cada pequena idea agrega friccion. Terminas jugando a lo seguro cuando deberias estar explorando.

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

Que Son los Checkpoints

Un checkpoint es un snapshot que captura dos cosas simultaneamente: el estado de tu conversacion con Claude y el estado de tu codigo en disco. Cada vez que Claude usa una herramienta -- edita un archivo, ejecuta un comando, crea un archivo nuevo -- se crea un checkpoint automaticamente. Esto significa que siempre tienes una linea de tiempo completa de cada cambio que Claude ha realizado durante tu sesion.

No necesitas hacer nada para crear estos checkpoints automaticos. Ocurren en segundo plano cada vez que Claude realiza una accion. Sin embargo, tambien puedes pensar en momentos especificos de tu flujo de trabajo como limites naturales de checkpoint: antes de comenzar un refactor, antes de cambiar de enfoque, antes de fusionar codigo experimental.

Visualizando y Restaurando Checkpoints

Para ver tu linea de tiempo de checkpoints, usa el comando /rewind (que tambien tiene el alias /checkpoint):

/rewind

Esto te muestra una linea de tiempo de todos los checkpoints en tu sesion actual, cada uno etiquetado con una descripcion de que accion se realizo. Puedes desplazarte por la linea de tiempo y seleccionar cualquier punto para restaurar.

Cuando seleccionas un checkpoint, Claude Code ofrece dos opciones de restauracion:

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

Restaurar codigo y conversacion. Esto revierte tanto tus archivos como tu conversacion a ese checkpoint. Usa esto cuando quieres empezar de nuevo completamente desde un punto especifico, como si todo lo posterior a ese checkpoint nunca hubiera ocurrido.

Prueba esto: inicia una sesion, pidele a Claude que haga algunos cambios en un archivo, luego ejecuta /rewind para ver la linea de tiempo. Selecciona un checkpoint anterior y elige "Restaurar solo codigo" para ver como tus archivos se revierten mientras mantienes la conversacion.

El Flujo de Trabajo de Experimentacion

Los checkpoints desbloquean un patron 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, necesitarias rastrear mentalmente que cambio, deshacer ediciones manualmente o gestionar Git stashes. Con checkpoints, toda la operacion de deshacer es un solo comando.

Aqui tienes un ejemplo concreto. Supongamos que quieres refactorizar un componente React de basado en clases a funcional con hooks, pero no estas 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 (tambien con alias /fork) crea una nueva sesion que comienza desde tu punto actual pero diverge a partir de ahi:

/branch

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

Usa ramificacion cuando quieras:

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

Gestion de Sesiones

Claude Code proporciona varios comandos para gestionar tus sesiones a traves del tiempo:

Reanudar una sesion 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 sesion actual para encontrarla mas facilmente despues:

/rename refactor-auth-module

Listar sesiones recientes para ver que esta disponible para reanudar:

/resume

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

Prueba esto: nombra tu sesion actual con /rename, sal de Claude Code, luego reanudala con claude --resume para verificar que la sesion se restaura completamente.

Combinando Checkpoints con Subagentes

En la leccion anterior aprendiste sobre subagentes -- agentes de IA enfocados que trabajan en aislamiento. Combinar subagentes con checkpoints te da la maxima 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, asi que tu codebase principal nunca estuvo en riesgo. Cuando intentaste aplicar los cambios y cambiaste de opinion, un solo /rewind restauro todo. Conservaste el conocimiento pero descartaste los cambios de codigo.

Cuando los Checkpoints Te Salvan

Direccion de refactor equivocada. Le pediste a Claude que reestructurara un modulo y tomo 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 despues de cambios. Claude hizo una serie de cambios que parecian correctos pero rompieron tu suite de tests de formas inesperadas. Restaura el checkpoint, analiza que salio mal e intenta de nuevo con mejores restricciones.

Mala resolucion de merge. Le pediste a Claude que resolviera conflictos de merge y eligio el lado equivocado en varios conflictos. Retrocede y da instrucciones mas especificas sobre que cambios conservar.

Intercambio experimental de dependencia. Querias probar reemplazar una libreria 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 provoco 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 Practicos

Nombra tus sesiones. Cuando comiences a trabajar en algo significativo, ejecuta /rename con un nombre descriptivo. Tu yo del futuro agradecera poder encontrar la sesion rapidamente.

Usa ramificacion para comparaciones A/B. Cuando quieras comparar dos enfoques, ramifica la sesion 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 iteracion rapida dentro de una sesion, y commits de Git para los cambios que quieras mantener permanentemente. Una vez que estes satisfecho con el resultado de un experimento, haz commit.

No le temas al rewind. Todo el proposito de los checkpoints es eliminar el costo de la experimentacion. Si te encuentras dudando antes de pedirle a Claude que pruebe algo, esa es una senal de que deberias estar usando checkpoints mas agresivamente.

Revisa la linea de tiempo. Periodicamente revisa /rewind para ver la linea de tiempo de cambios en tu sesion. Sirve como un registro de todo lo que Claude hizo, lo cual es util para entender la historia de una sesion 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.