Was this page helpful?
Das Memory-Tool ermöglicht Claude, Informationen über Gespräche hinweg durch ein Memory-Dateiverzeichnis zu speichern und abzurufen. Claude kann Dateien erstellen, lesen, aktualisieren und löschen, die zwischen Sitzungen bestehen bleiben, sodass es Wissen im Laufe der Zeit aufbauen kann, ohne alles im Kontextfenster zu behalten.
Dies ist das Schlüsselelement für Just-in-Time-Kontextabruf: Anstatt alle relevanten Informationen im Voraus zu laden, speichern Agenten, was sie lernen, im Memory und rufen es bei Bedarf ab. Dies hält den aktiven Kontext auf das konzentriert, was derzeit relevant ist – entscheidend für langfristige Workflows, bei denen das gleichzeitige Laden aller Informationen das Kontextfenster überlasten würde. Siehe Effective context engineering für das umfassendere Muster.
Das Memory-Tool wird auf der Client-Seite ausgeführt: Sie kontrollieren, wo und wie die Daten durch Ihre eigene Infrastruktur gespeichert werden.
Kontaktieren Sie uns über das Feedback-Formular, um Ihr Feedback zu dieser Funktion zu teilen.
This feature is eligible for Zero Data Retention (ZDR). When your organization has a ZDR arrangement, data sent through this feature is not stored after the API response is returned.
Wenn aktiviert, prüft Claude automatisch sein Memory-Verzeichnis, bevor Aufgaben gestartet werden. Claude kann Dateien im /memories-Verzeichnis erstellen, lesen, aktualisieren und löschen, um zu speichern, was es während der Arbeit lernt, und dann diese Erinnerungen in zukünftigen Gesprächen referenzieren, um ähnliche Aufgaben effektiver zu bewältigen oder dort weiterzumachen, wo es aufgehört hat.
Da dies ein Client-seitiges Tool ist, führt Claude Tool-Aufrufe durch, um Memory-Operationen auszuführen, und Ihre Anwendung führt diese Operationen lokal aus. Dies gibt Ihnen vollständige Kontrolle darüber, wo und wie das Memory gespeichert wird. Aus Sicherheitsgründen sollten Sie alle Memory-Operationen auf das /memories-Verzeichnis beschränken.
Wenn Sie Claude bitten, bei einer Aufgabe zu helfen, prüft Claude automatisch zuerst sein Memory-Verzeichnis. Hier ist, wie eine typische Interaktion aussieht:
1. Benutzeranfrage:
"Hilf mir, auf dieses Kundenservice-Ticket zu antworten."2. Claude prüft das Memory-Verzeichnis:
"Ich helfe dir, auf das Kundenservice-Ticket zu antworten. Lass mich mein Memory auf vorherigen Kontext überprüfen."Claude ruft das Memory-Tool auf:
{
"type": "tool_use",
"id": "toolu_01C4D5E6F7G8H9I0J1K2L3M4",
"name": "memory",
"input": {
"command": "view",
"path": "/memories"
}
}3. Ihre Anwendung gibt den Verzeichnisinhalt zurück:
{
"type": "tool_result",
"tool_use_id": "toolu_01C4D5E6F7G8H9I0J1K2L3M4",
"content": "Here're the files and directories up to 2 levels deep in /memories, excluding hidden items and node_modules:\n4.0K\t/memories\n1.5K\t/memories/customer_service_guidelines.xml\n2.0K\t/memories/refund_policies.xml"
}4. Claude liest relevante Dateien:
{
"type": "tool_use",
"id": "toolu_01D5E6F7G8H9I0J1K2L3M4N5",
"name": "memory",
"input": {
"command": "view",
"path": "/memories/customer_service_guidelines.xml"
}
}5. Ihre Anwendung gibt den Dateiinhalt zurück:
{
"type": "tool_result",
"tool_use_id": "toolu_01D5E6F7G8H9I0J1K2L3M4N5",
"content": "Here's the content of /memories/customer_service_guidelines.xml with line numbers:\n 1\t<guidelines>\n 2\t<addressing_customers>\n 3\t- Always address customers by their first name\n 4\t- Use empathetic language\n..."
}6. Claude nutzt das Memory, um zu helfen:
"Basierend auf Ihren Kundenservice-Richtlinien kann ich Ihnen helfen, eine Antwort zu verfassen. Bitte teilen Sie die Ticket-Details mit..."Für Modellunterstützung siehe die Tool-Referenz.
Um das Memory-Tool zu verwenden:
Um Memory-Tool-Operationen in Ihrer Anwendung zu verarbeiten, müssen Sie Handler für jeden Memory-Befehl implementieren. Die SDKs bieten Memory-Tool-Helfer, die die Tool-Schnittstelle verarbeiten. Sie können BetaAbstractMemoryTool (Python) unterklassifizieren oder betaMemoryTool (TypeScript) verwenden, um Ihr eigenes Memory-Backend zu implementieren (dateibasiert, Datenbank, Cloud-Speicher, verschlüsselte Dateien usw.).
Für funktionierende Beispiele siehe:
Ihre Client-seitige Implementierung muss diese Memory-Tool-Befehle verarbeiten. Während diese Spezifikationen die empfohlenen Verhaltensweisen beschreiben, mit denen Claude am besten vertraut ist, können Sie Ihre Implementierung ändern und Zeichenketten nach Bedarf für Ihren Anwendungsfall zurückgeben.
Zeigt Verzeichnisinhalte oder Dateiinhalte mit optionalen Zeilenbereichen an:
{
"command": "view",
"path": "/memories",
"view_range": [1, 10] // Optional: spezifische Zeilen anzeigen
}Für Verzeichnisse: Geben Sie eine Auflistung zurück, die Dateien und Verzeichnisse mit ihren Größen zeigt:
Here're the files and directories up to 2 levels deep in {path}, excluding hidden items and node_modules:
{size} {path}
{size} {path}/{filename1}
{size} {path}/{filename2}5.5K, 1.2M). beginnen) und node_modules ausFür Dateien: Geben Sie Dateiinhalte mit einer Kopfzeile und Zeilennummern zurück:
Here's the content of {path} with line numbers:
{line_numbers}{tab}{content}Zeilennummernformatierung:
"File {path} exceeds maximum line limit of 999,999 lines."Beispielausgabe:
Here's the content of /memories/notes.txt with line numbers:
1 Hello World
2 This is line two
10 Line ten
100 Line one hundred"The path {path} does not exist. Please provide a valid path."Erstellen Sie eine neue Datei:
{
"command": "create",
"path": "/memories/notes.txt",
"file_text": "Meeting notes:\n- Discussed project timeline\n- Next steps defined\n"
}"File created successfully at: {path}""Error: File {path} already exists"Ersetzen Sie Text in einer Datei:
{
"command": "str_replace",
"path": "/memories/preferences.txt",
"old_str": "Favorite color: blue",
"new_str": "Favorite color: green"
}"The memory file has been edited." gefolgt von einem Ausschnitt der bearbeiteten Datei mit Zeilennummern"Error: The path {path} does not exist. Please provide a valid path.""No replacement was performed, old_str `\{old_str}` did not appear verbatim in {path}."old_str mehrmals vorkommt, geben Sie zurück: "No replacement was performed. Multiple occurrences of old_str `\{old_str}` in lines: {line_numbers}. Please ensure it is unique"Wenn der Pfad ein Verzeichnis ist, geben Sie einen Fehler „Datei existiert nicht" zurück.
Fügen Sie Text in einer bestimmten Zeile ein:
{
"command": "insert",
"path": "/memories/todo.txt",
"insert_line": 2,
"insert_text": "- Review memory tool documentation\n"
}"The file {path} has been edited.""Error: The path {path} does not exist""Error: Invalid `insert_line` parameter: {insert_line}. It should be within the range of lines of the file: [0, {n_lines}]"Wenn der Pfad ein Verzeichnis ist, geben Sie einen Fehler „Datei existiert nicht" zurück.
Löschen Sie eine Datei oder ein Verzeichnis:
{
"command": "delete",
"path": "/memories/old_file.txt"
}"Successfully deleted {path}""Error: The path {path} does not exist"Löscht das Verzeichnis und seinen gesamten Inhalt rekursiv.
Benennen Sie eine Datei/ein Verzeichnis um oder verschieben Sie sie:
{
"command": "rename",
"old_path": "/memories/draft.txt",
"new_path": "/memories/final.txt"
}"Successfully renamed {old_path} to {new_path}""Error: The path {old_path} does not exist""Error: The destination {new_path} already exists"Benennt das Verzeichnis um.
Diese Anweisung wird automatisch in die Systemaufforderung aufgenommen, wenn das Memory-Tool aktiviert ist:
IMPORTANT: ALWAYS VIEW YOUR MEMORY DIRECTORY BEFORE DOING ANYTHING ELSE.
MEMORY PROTOCOL:
1. Use the `view` command of your `memory` tool to check for earlier progress.
2. ... (work on the task) ...
- As you make progress, record status / progress / thoughts etc in your memory.
ASSUME INTERRUPTION: Your context window might be reset at any moment, so you risk losing any progress that is not recorded in your memory directory.Wenn Sie beobachten, dass Claude ungeordnete Memory-Dateien erstellt, können Sie diese Anweisung einbeziehen:
Hinweis: Versuchen Sie beim Bearbeiten Ihres Memory-Ordners, seinen Inhalt immer aktuell, kohärent und organisiert zu halten. Sie können Dateien umbenennen oder löschen, die nicht mehr relevant sind. Erstellen Sie keine neuen Dateien, wenn nicht nötig.
Sie können auch lenken, was Claude im Memory speichert. Zum Beispiel: „Schreiben Sie nur Informationen relevant zu <topic> in Ihr Memory-System."
Hier sind wichtige Sicherheitsbedenken bei der Implementierung Ihres Memory-Speichers:
Claude wird normalerweise ablehnen, sensible Informationen in Memory-Dateien zu schreiben. Sie möchten jedoch möglicherweise eine strengere Validierung implementieren, die potenziell sensible Informationen entfernt.
Erwägen Sie, Memory-Dateigrößen zu verfolgen und zu verhindern, dass Dateien zu groß werden. Erwägen Sie, eine maximale Anzahl von Zeichen hinzuzufügen, die der Memory-Lesbefehl zurückgeben kann, und lassen Sie Claude durch Inhalte paginieren.
Erwägen Sie, Memory-Dateien regelmäßig zu löschen, auf die über einen längeren Zeitraum nicht zugegriffen wurde.
Böswillige Pfadeingaben könnten versuchen, auf Dateien außerhalb des /memories-Verzeichnisses zuzugreifen. Ihre Implementierung MUSS alle Pfade validieren, um Directory-Traversal-Angriffe zu verhindern.
Erwägen Sie diese Schutzmaßnahmen:
/memories beginnen../, ..\\ oder andere Traversal-Muster enthalten%2e%2e%2f)pathlib.Path.resolve() und relative_to())Das Memory-Tool verwendet ähnliche Fehlerbehandlungsmuster wie das Text-Editor-Tool. Siehe die einzelnen Tool-Befehlsabschnitte oben für detaillierte Fehlermeldungen und Verhaltensweisen. Häufige Fehler sind Datei nicht gefunden, Berechtigungsfehler, ungültige Pfade und doppelte Text-Übereinstimmungen.
Das Memory-Tool wird mit Kontextbearbeitung gepaart, um lange Gespräche zu verwalten. Weitere Informationen finden Sie unter Kontextbearbeitung.
Das Memory-Tool kann auch mit Komprimierung gepaart werden, die serverseitige Zusammenfassung älterer Gesprächskontexte bietet. Während die Kontextbearbeitung spezifische Tool-Ergebnisse auf der Client-Seite löscht, fasst die Komprimierung automatisch das gesamte Gespräch auf der Server-Seite zusammen, wenn es sich dem Kontextfensterlimit nähert.
Für langfristige agentengesteuerte Workflows sollten Sie beide verwenden: Die Komprimierung hält den aktiven Kontext verwaltbar, ohne Client-seitige Buchführung, und Memory behält wichtige Informationen über Komprimierungsgrenzen hinweg bei, sodass nichts Kritisches in der Zusammenfassung verloren geht.
Für langfristige Softwareprojekte, die mehrere Agent-Sitzungen umfassen, müssen Memory-Dateien absichtlich initialisiert werden, nicht nur ad hoc geschrieben, während die Arbeit fortschreitet. Das folgende Muster verwandelt Memory in einen strukturierten Wiederherstellungsmechanismus, sodass jede neue Sitzung genau dort weitermachen kann, wo die letzte endete.
Initializer-Sitzung: Die erste Sitzung richtet die Memory-Artefakte ein, bevor substantielle Arbeit beginnt. Dies umfasst ein Fortschrittsprotokoll (Verfolgung, was getan wurde und was als nächstes kommt), eine Feature-Checkliste (Definition des Arbeitsumfangs) und einen Verweis auf jedes Startup- oder Initialisierungsskript, das das Projekt benötigt.
Nachfolgende Sitzungen: Jede neue Sitzung beginnt mit dem Lesen dieser Memory-Artefakte. Dies stellt den vollständigen Zustand des Projekts in Sekunden wieder her, ohne den Codebase neu erkunden oder frühere Entscheidungen zurückverfolgen zu müssen.
End-of-Session-Update: Bevor eine Sitzung endet, aktualisiert sie das Fortschrittsprotokoll mit dem, was abgeschlossen wurde und was bleibt. Dies stellt sicher, dass die nächste Sitzung einen genauen Ausgangspunkt hat.
Arbeiten Sie an einem Feature gleichzeitig. Markieren Sie ein Feature nur als abgeschlossen, nachdem eine End-to-End-Überprüfung bestätigt hat, dass es funktioniert, nicht nur nachdem der Code geschrieben wurde. Dies hält das Fortschrittsprotokoll zuverlässig und verhindert, dass Scope Creep sich über Sitzungen hinweg verstärkt.
Für eine detaillierte Fallstudie dieses Musters in der Praxis, einschließlich des Initializer-Skripts, der Fortschrittsdateistruktur und der Git-basierten Wiederherstellung, siehe Effective harnesses for long-running agents.
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 2048,
"messages": [
{
"role": "user",
"content": "I'\''m working on a Python web scraper that keeps crashing with a timeout error. Here'\''s the problematic function:\n\n```python\ndef fetch_page(url, retries=3):\n for i in range(retries):\n try:\n response = requests.get(url, timeout=5)\n return response.text\n except requests.exceptions.Timeout:\n if i == retries - 1:\n raise\n time.sleep(1)\n```\n\nPlease help me debug this."
}
],
"tools": [{
"type": "memory_20250818",
"name": "memory"
}]
}'