Zum Hauptinhalt springen
File Checkpointing verfolgt Dateiänderungen, die während einer Agent-Sitzung durch die Tools Write, Edit und NotebookEdit vorgenommen werden, und ermöglicht es Ihnen, Dateien in jeden vorherigen Zustand zurückzusetzen. Möchten Sie es ausprobieren? Springen Sie zum interaktiven Beispiel. Mit Checkpointing können Sie:
  • Unerwünschte Änderungen rückgängig machen, indem Sie Dateien in einen bekannten guten Zustand zurücksetzen
  • Alternativen erkunden, indem Sie zu einem Checkpoint zurückkehren und einen anderen Ansatz versuchen
  • Von Fehlern wiederherstellen, wenn der Agent fehlerhafte Änderungen vornimmt
Nur Änderungen, die durch die Tools Write, Edit und NotebookEdit vorgenommen werden, werden verfolgt. Änderungen, die durch Bash-Befehle vorgenommen werden (wie echo > file.txt oder sed -i), werden vom Checkpoint-System nicht erfasst.

Wie Checkpointing funktioniert

Wenn Sie File Checkpointing aktivieren, erstellt das SDK Sicherungen von Dateien, bevor diese durch die Tools Write, Edit oder NotebookEdit geändert werden. Benutzermeldungen im Response-Stream enthalten eine Checkpoint-UUID, die Sie als Wiederherstellungspunkt verwenden können. Checkpointing funktioniert mit diesen integrierten Tools, die der Agent zum Ändern von Dateien verwendet:
File Rewinding stellt Dateien auf der Festplatte in einen vorherigen Zustand wieder her. Es setzt das Gespräch selbst nicht zurück. Der Gesprächsverlauf und der Kontext bleiben nach dem Aufrufen von rewindFiles() (TypeScript) oder rewind_files() (Python) intakt.
Das Checkpoint-System verfolgt:
  • Dateien, die während der Sitzung erstellt wurden
  • Dateien, die während der Sitzung geändert wurden
  • Den ursprünglichen Inhalt geänderter Dateien
Wenn Sie zu einem Checkpoint zurückspulen, werden erstellte Dateien gelöscht und geänderte Dateien auf ihren Inhalt an diesem Punkt zurückgesetzt.

Checkpointing implementieren

Um File Checkpointing zu verwenden, aktivieren Sie es in Ihren Optionen, erfassen Sie Checkpoint-UUIDs aus dem Response-Stream und rufen Sie rewindFiles() (TypeScript) oder rewind_files() (Python) auf, wenn Sie Dateien wiederherstellen müssen. Das folgende Beispiel zeigt den vollständigen Ablauf: Aktivieren Sie Checkpointing, erfassen Sie die Checkpoint-UUID und Session-ID aus dem Response-Stream, und setzen Sie die Sitzung später fort, um Dateien zurückzuspulen. Jeder Schritt wird unten im Detail erläutert. Die Beispiele in diesem Abschnitt verwenden die Eingabeaufforderung „Refactor the authentication module”. Führen Sie sie in einem Projekt aus, das ein Authentifizierungsmodul enthält, oder ändern Sie die Eingabeaufforderung, um Dateien zu benennen, die in Ihrem Projekt vorhanden sind, damit Sie Dateiänderungen beobachten und sehen können, wie das Zurückspulen sie wiederherstellt.
1

Checkpointing aktivieren

Konfigurieren Sie Ihre SDK-Optionen, um Checkpointing zu aktivieren und Checkpoint-UUIDs zu erhalten:
2

Checkpoint-UUID und Session-ID erfassen

Mit der oben gezeigten Option replay-user-messages hat jede Benutzermeldung im Response-Stream eine UUID, die als Checkpoint dient.Für die meisten Anwendungsfälle erfassen Sie die UUID der ersten Benutzermeldung (message.uuid); das Zurückspulen zu ihr stellt alle Dateien in ihren ursprünglichen Zustand wieder her. Um mehrere Checkpoints zu speichern und zu Zwischenzuständen zurückzuspulen, siehe Mehrere Wiederherstellungspunkte.Das Erfassen der Session-ID (message.session_id) ist optional; Sie benötigen sie nur, wenn Sie später zurückspulen möchten, nachdem der Stream abgeschlossen ist. Wenn Sie rewindFiles() sofort aufrufen, während Sie noch Meldungen verarbeiten (wie das Beispiel in Checkpoint vor riskanten Operationen zeigt), können Sie das Erfassen der Session-ID überspringen.
3

Dateien zurückspulen

Um nach Abschluss des Streams zurückzuspulen, setzen Sie die Sitzung mit einer leeren Eingabeaufforderung fort und rufen Sie rewind_files() (Python) oder rewindFiles() (TypeScript) mit Ihrer Checkpoint-UUID auf. Sie können auch während des Streams zurückspulen; siehe Checkpoint vor riskanten Operationen für dieses Muster.
Wenn Sie die Session-ID und Checkpoint-ID erfassen, können Sie auch von der CLI aus zurückspulen. Dieser Befehl erfordert die ausführbare Datei claude, die von der Installation von Claude Code stammt und nicht vom SDK-Paket installiert wird. Das SDK aktiviert Checkpointing für Sie, aber wenn Sie claude -p direkt ausführen, müssen Sie die Umgebungsvariable CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING setzen:
Das Flag --rewind-files wird nicht in der Ausgabe von claude --help angezeigt, aber die CLI akzeptiert es wie gezeigt.

Häufige Muster

Diese Muster zeigen verschiedene Möglichkeiten, Checkpoint-UUIDs je nach Ihrem Anwendungsfall zu erfassen und zu verwenden.

Checkpoint vor riskanten Operationen

Dieses Muster behält nur die neueste Checkpoint-UUID, aktualisiert sie vor jedem Agent-Turn. Wenn während der Verarbeitung etwas schief geht, können Sie sofort zum letzten sicheren Zustand zurückspulen und die Schleife unterbrechen. Ersetzen Sie vor dem Ausführen dieses Beispiels your_revert_condition (Python) oder yourRevertCondition (TypeScript) durch Ihre eigene Überprüfung, z. B. Fehlererkennung oder ein Validierungsfehler; der Platzhalter ist im Beispiel nicht definiert.

Mehrere Wiederherstellungspunkte

Wenn Claude Änderungen über mehrere Turns hinweg vornimmt, möchten Sie möglicherweise zu einem bestimmten Punkt zurückspulen, anstatt ganz nach hinten zu gehen. Wenn Claude beispielsweise eine Datei in Turn eins umgestaltet und Tests in Turn zwei hinzufügt, möchten Sie möglicherweise die Umgestaltung behalten, aber die Tests rückgängig machen. Dieses Muster speichert alle Checkpoint-UUIDs in einem Array mit Metadaten. Nach Abschluss der Sitzung können Sie zu jedem vorherigen Checkpoint zurückspulen:

Ausprobieren

Dieses vollständige Beispiel erstellt eine kleine Utility-Datei, lässt den Agent Dokumentationskommentare hinzufügen, zeigt Ihnen die Änderungen und fragt dann, ob Sie zurückspulen möchten. Bevor Sie beginnen, stellen Sie sicher, dass Sie das Claude Agent SDK installiert haben.
1

Testdatei erstellen

Erstellen Sie eine neue Datei namens utils.py (Python) oder utils.ts (TypeScript) und fügen Sie den folgenden Code ein:
2

Interaktives Beispiel ausführen

Erstellen Sie eine neue Datei namens try_checkpointing.py (Python) oder try_checkpointing.ts (TypeScript) im selben Verzeichnis wie Ihre Utility-Datei und fügen Sie den folgenden Code ein.Dieses Skript fordert Claude auf, Dokumentationskommentare zu Ihrer Utility-Datei hinzuzufügen, und gibt Ihnen dann die Möglichkeit, zurückzuspulen und das Original wiederherzustellen.
Dieses Beispiel demonstriert den vollständigen Checkpointing-Workflow:
  1. Checkpointing aktivieren: Konfigurieren Sie das SDK mit enable_file_checkpointing=True und permission_mode="acceptEdits", um Dateiänderungen automatisch zu genehmigen
  2. Checkpoint-Daten erfassen: Während der Agent läuft, speichern Sie die UUID der ersten Benutzermeldung (Ihr Wiederherstellungspunkt) und die Session-ID
  3. Zur Rückspulung auffordern: Nachdem der Agent fertig ist, überprüfen Sie Ihre Utility-Datei, um die Dokumentationskommentare zu sehen, und entscheiden Sie dann, ob Sie die Änderungen rückgängig machen möchten
  4. Sitzung fortsetzen und zurückspulen: Wenn ja, setzen Sie die Sitzung mit einer leeren Eingabeaufforderung fort und rufen Sie rewind_files() auf, um die ursprüngliche Datei wiederherzustellen
3

Beispiel ausführen

Führen Sie das Skript aus dem selben Verzeichnis wie Ihre Utility-Datei aus.
Öffnen Sie Ihre Utility-Datei (utils.py oder utils.ts) in Ihrer IDE oder Ihrem Editor, bevor Sie das Skript ausführen. Sie sehen, wie die Datei in Echtzeit aktualisiert wird, während der Agent Dokumentationskommentare hinzufügt, und dann zum Original zurückkehrt, wenn Sie sich zum Zurückspulen entscheiden.
Sie sehen, dass der Agent Dokumentationskommentare hinzufügt, dann eine Eingabeaufforderung, die fragt, ob Sie zurückspulen möchten. Wenn Sie ja wählen, wird die Datei in ihren ursprünglichen Zustand zurückgesetzt.

Einschränkungen

File Checkpointing hat die folgenden Einschränkungen:

Troubleshooting

Checkpointing-Optionen nicht erkannt

Wenn enableFileCheckpointing oder rewindFiles() nicht verfügbar ist, verwenden Sie möglicherweise eine ältere SDK-Version. Lösung: Aktualisieren Sie auf die neueste SDK-Version:
  • Python: pip install --upgrade claude-agent-sdk
  • TypeScript: npm install @anthropic-ai/claude-agent-sdk@latest

Benutzermeldungen haben keine UUIDs

Wenn message.uuid undefined oder fehlend ist, erhalten Sie keine Checkpoint-UUIDs. Ursache: Die Option replay-user-messages ist nicht gesetzt. Lösung: Fügen Sie extra_args={"replay-user-messages": None} (Python) oder extraArgs: { 'replay-user-messages': null } (TypeScript) zu Ihren Optionen hinzu.

Fehler „No file checkpoint found for message”

Dieser Fehler tritt auf, wenn die Checkpoint-Daten für die angegebene Benutzermeldungs-UUID nicht vorhanden sind. Häufige Ursachen:
  • File Checkpointing war in der ursprünglichen Sitzung nicht aktiviert (enable_file_checkpointing oder enableFileCheckpointing war nicht auf true gesetzt)
  • Die Sitzung wurde nicht vollständig abgeschlossen, bevor versucht wurde, sie fortzusetzen und zurückzuspulen
Lösung: Stellen Sie sicher, dass enable_file_checkpointing=True (Python) oder enableFileCheckpointing: true (TypeScript) in der ursprünglichen Sitzung gesetzt war, verwenden Sie dann das in den Beispielen gezeigte Muster: Erfassen Sie die UUID der ersten Benutzermeldung, schließen Sie die Sitzung vollständig ab, setzen Sie sie dann mit einer leeren Eingabeaufforderung fort und rufen Sie rewindFiles() einmal auf.

Fehler „File rewinding is not enabled”

Dieser Fehler tritt auf, wenn Sie versuchen, ein nicht-interaktives Zurückspulen ohne aktiviertes Checkpointing durchzuführen: Ausführung von bare claude -p mit --rewind-files, oder Ausführung einer SDK-Sitzung, einschließlich einer fortgesetzten, deren Optionen Checkpointing nicht aktivieren. Das SDK setzt die Umgebungsvariable CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING intern nur dann, wenn enable_file_checkpointing (Python) oder enableFileCheckpointing (TypeScript) in der Sitzung aktiviert ist, die das Zurückspulen durchführt; die bare CLI setzt sie nie. Lösung: Für die bare CLI setzen Sie die Umgebungsvariable beim Ausführen des Befehls:
Für das SDK setzen Sie enable_file_checkpointing=True (Python) oder enableFileCheckpointing: true (TypeScript) in der fortgesetzten Sitzung, wie die Beispiele auf dieser Seite zeigen.

Fehler „ProcessTransport is not ready for writing”

Dieser Fehler tritt auf, wenn Sie rewindFiles() oder rewind_files() aufrufen, nachdem Sie die Iteration durch die Antwort abgeschlossen haben. Die Verbindung zum CLI-Prozess wird geschlossen, wenn die Schleife abgeschlossen ist. Lösung: Setzen Sie die Sitzung mit einer leeren Eingabeaufforderung fort und rufen Sie dann rewind auf der neuen Abfrage auf:

Nächste Schritte

  • Sessions: Erfahren Sie, wie Sie Sitzungen fortsetzen, was zum Zurückspulen nach Abschluss des Streams erforderlich ist. Behandelt Session-IDs, Fortsetzen von Gesprächen und Session-Forking.
  • Berechtigungen: Konfigurieren Sie, welche Tools Claude verwenden kann und wie Dateiänderungen genehmigt werden. Nützlich, wenn Sie mehr Kontrolle darüber haben möchten, wann Änderungen vorgenommen werden.
  • TypeScript SDK-Referenz: Vollständige API-Referenz einschließlich aller Optionen für query() und die Methode rewindFiles().
  • Python SDK-Referenz: Vollständige API-Referenz einschließlich aller Optionen für ClaudeAgentOptions und die Methode rewind_files().