Saltar al contenido principal
El checkpointing de archivos rastrea las modificaciones de archivos realizadas a través de las herramientas Write, Edit y NotebookEdit durante una sesión de agente, lo que le permite revertir archivos a cualquier estado anterior. ¿Desea probarlo? Salte al ejemplo interactivo. Con checkpointing, puede:
  • Deshacer cambios no deseados restaurando archivos a un estado conocido y bueno
  • Explorar alternativas restaurando a un checkpoint e intentando un enfoque diferente
  • Recuperarse de errores cuando el agente realiza modificaciones incorrectas
Solo se rastrean los cambios realizados a través de las herramientas Write, Edit y NotebookEdit. Los cambios realizados a través de comandos Bash (como echo > file.txt o sed -i) no se capturan en el sistema de checkpoint.

Cómo funciona el checkpointing

Cuando habilita el checkpointing de archivos, el SDK crea copias de seguridad de archivos antes de modificarlos a través de las herramientas Write, Edit o NotebookEdit. Los mensajes de usuario en el flujo de respuesta incluyen un UUID de checkpoint que puede usar como punto de restauración. Checkpoint funciona con estas herramientas integradas que el agente usa para modificar archivos:
La reversión de archivos restaura archivos en disco a un estado anterior. No revierte la conversación en sí. El historial de conversación y el contexto permanecen intactos después de llamar a rewindFiles() (TypeScript) o rewind_files() (Python).
El sistema de checkpoint rastrea:
  • Archivos creados durante la sesión
  • Archivos modificados durante la sesión
  • El contenido original de archivos modificados
Cuando revierte a un checkpoint, los archivos creados se eliminan y los archivos modificados se restauran a su contenido en ese punto.

Implementar checkpointing

Para usar el checkpointing de archivos, habilítelo en sus opciones, capture UUIDs de checkpoint del flujo de respuesta, luego llame a rewindFiles() (TypeScript) o rewind_files() (Python) cuando necesite restaurar. El siguiente ejemplo muestra el flujo completo: habilitar checkpointing, capturar el UUID de checkpoint y el ID de sesión del flujo de respuesta, luego reanudar la sesión más tarde para revertir archivos. Cada paso se explica en detalle a continuación. Los ejemplos en esta sección utilizan el mensaje “Refactor the authentication module”. Ejecútelos en un proyecto que contenga un módulo de autenticación, o cambie el mensaje para nombrar archivos que existan en su proyecto, para que pueda ver cambios de archivos y ver cómo la reversión los restaura.
1

Habilitar checkpointing

Configure sus opciones de SDK para habilitar checkpointing y recibir UUIDs de checkpoint:
2

Capturar UUID de checkpoint e ID de sesión

Con la opción replay-user-messages establecida (mostrada arriba), cada mensaje de usuario en el flujo de respuesta tiene un UUID que sirve como checkpoint.Para la mayoría de los casos de uso, capture el UUID del primer mensaje de usuario (message.uuid); revertir a él restaura todos los archivos a su estado original. Para almacenar múltiples checkpoints y revertir a estados intermedios, consulte Múltiples puntos de restauración.Capturar el ID de sesión (message.session_id) es opcional; solo lo necesita si desea revertir más tarde, después de que se complete el flujo. Si está llamando a rewindFiles() inmediatamente mientras aún procesa mensajes (como lo hace el ejemplo en Checkpoint antes de operaciones arriesgadas), puede omitir la captura del ID de sesión.
3

Revertir archivos

Para revertir después de que se complete el flujo, reanude la sesión con un mensaje vacío y llame a rewind_files() (Python) o rewindFiles() (TypeScript) con su UUID de checkpoint. También puede revertir durante el flujo; consulte Checkpoint antes de operaciones arriesgadas para ese patrón.
Si captura el ID de sesión y el ID de checkpoint, también puede revertir desde la CLI. Este comando requiere el ejecutable claude, que viene de instalar Claude Code y no está instalado por el paquete SDK. El SDK habilita checkpointing para usted, pero cuando ejecuta claude -p directamente debe establecer la variable de entorno CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING:
La bandera --rewind-files no aparece en la salida de claude --help, pero la CLI la acepta como se muestra.

Patrones comunes

Estos patrones muestran diferentes formas de capturar y usar UUIDs de checkpoint según su caso de uso.

Checkpoint antes de operaciones arriesgadas

Este patrón mantiene solo el UUID de checkpoint más reciente, actualizándolo antes de cada turno del agente. Si algo sale mal durante el procesamiento, puede revertir inmediatamente al último estado seguro y salir del bucle. Antes de ejecutar este ejemplo, reemplace your_revert_condition (Python) o yourRevertCondition (TypeScript) con su propia verificación, como detección de errores o un fallo de validación; el marcador de posición no está definido en el ejemplo.

Múltiples puntos de restauración

Si Claude realiza cambios en múltiples turnos, es posible que desee revertir a un punto específico en lugar de volver completamente. Por ejemplo, si Claude refactoriza un archivo en el turno uno y agrega pruebas en el turno dos, es posible que desee mantener la refactorización pero deshacer las pruebas. Este patrón almacena todos los UUIDs de checkpoint en una matriz con metadatos. Después de que se complete la sesión, puede revertir a cualquier checkpoint anterior:

Pruébelo

Este ejemplo completo crea un pequeño archivo de utilidad, hace que el agente agregue comentarios de documentación, le muestra los cambios, luego pregunta si desea revertir. Antes de comenzar, asegúrese de tener el Claude Agent SDK instalado.
1

Crear un archivo de prueba

Cree un nuevo archivo llamado utils.py (Python) o utils.ts (TypeScript) y pegue el siguiente código:
2

Ejecutar el ejemplo interactivo

Cree un nuevo archivo llamado try_checkpointing.py (Python) o try_checkpointing.ts (TypeScript) en el mismo directorio que su archivo de utilidad, y pegue el siguiente código.Este script le pide a Claude que agregue comentarios de documentación a su archivo de utilidad, luego le da la opción de revertir y restaurar el original.
Este ejemplo demuestra el flujo de trabajo completo de checkpointing:
  1. Habilitar checkpointing: configure el SDK con enable_file_checkpointing=True y permission_mode="acceptEdits" para aprobar automáticamente ediciones de archivos
  2. Capturar datos de checkpoint: mientras el agente se ejecuta, almacene el UUID del primer mensaje de usuario (su punto de restauración) y el ID de sesión
  3. Solicitar reversión: después de que el agente termine, verifique su archivo de utilidad para ver los comentarios de documentación, luego decida si desea deshacer los cambios
  4. Reanudar y revertir: si es así, reanude la sesión con un mensaje vacío y llame a rewind_files() para restaurar el archivo original
3

Ejecutar el ejemplo

Ejecute el script desde el mismo directorio que su archivo de utilidad.
Abra su archivo de utilidad (utils.py o utils.ts) en su IDE o editor antes de ejecutar el script. Verá que el archivo se actualiza en tiempo real mientras el agente agrega comentarios de documentación, luego revierte al original cuando elige revertir.
Verá que el agente agrega comentarios de documentación, luego un mensaje preguntando si desea revertir. Si elige sí, el archivo se restaura a su estado original.

Limitaciones

El checkpointing de archivos tiene las siguientes limitaciones:

Solución de problemas

Las opciones de checkpointing no se reconocen

Si enableFileCheckpointing o rewindFiles() no está disponible, es posible que esté en una versión anterior del SDK. Solución: Actualice a la última versión del SDK:
  • Python: pip install --upgrade claude-agent-sdk
  • TypeScript: npm install @anthropic-ai/claude-agent-sdk@latest

Los mensajes de usuario no tienen UUIDs

Si message.uuid es undefined o está faltando, no está recibiendo UUIDs de checkpoint. Causa: La opción replay-user-messages no está establecida. Solución: Agregue extra_args={"replay-user-messages": None} (Python) o extraArgs: { 'replay-user-messages': null } (TypeScript) a sus opciones.

Error “No file checkpoint found for message”

Este error ocurre cuando los datos de checkpoint no existen para el UUID de mensaje de usuario especificado. Causas comunes:
  • El checkpointing de archivos no estaba habilitado en la sesión original (enable_file_checkpointing o enableFileCheckpointing no estaba establecido en true)
  • La sesión no se completó correctamente antes de intentar reanudar y revertir
Solución: Asegúrese de que enable_file_checkpointing=True (Python) o enableFileCheckpointing: true (TypeScript) estuviera establecido en la sesión original, luego use el patrón mostrado en los ejemplos: capture el UUID del primer mensaje de usuario, complete la sesión completamente, luego reanude con un mensaje vacío y llame a rewindFiles() una sola vez.

Error “File rewinding is not enabled”

Este error ocurre cuando intenta una reversión no interactiva sin checkpointing habilitado: ejecutar claude -p simple con --rewind-files, o ejecutar una sesión del SDK, incluida una reanudada, cuyas opciones no habilitan checkpointing. El SDK establece la variable de entorno CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING internamente solo cuando enable_file_checkpointing (Python) o enableFileCheckpointing (TypeScript) está habilitado en la sesión que realiza la reversión; la CLI simple nunca la establece. Solución: Para la CLI simple, establezca la variable de entorno al ejecutar el comando:
Para el SDK, establezca enable_file_checkpointing=True (Python) o enableFileCheckpointing: true (TypeScript) en la sesión reanudada, como lo hacen los ejemplos en esta página.

Error “ProcessTransport is not ready for writing”

Este error ocurre cuando llama a rewindFiles() o rewind_files() después de haber terminado de iterar a través de la respuesta. La conexión al proceso de CLI se cierra cuando se completa el bucle. Solución: Reanude la sesión con un mensaje vacío, luego llame a rewind en la nueva consulta:

Próximos pasos

  • Sessions: aprenda cómo reanudar sesiones, que es necesario para revertir después de que se complete el flujo. Cubre IDs de sesión, reanudación de conversaciones y bifurcación de sesiones.
  • Permissions: configure qué herramientas puede usar Claude y cómo se aprueban las modificaciones de archivos. Útil si desea más control sobre cuándo ocurren las ediciones.
  • TypeScript SDK reference: referencia completa de API incluyendo todas las opciones para query() y el método rewindFiles().
  • Python SDK reference: referencia completa de API incluyendo todas las opciones para ClaudeAgentOptions y el método rewind_files().