Memory tool (alat memori) memungkinkan Claude menyimpan dan mengambil informasi di seluruh percakapan dalam sebuah direktori file memori. Claude dapat membuat, membaca, memperbarui, dan menghapus file yang bertahan di antara sesi, membangun pengetahuan dari waktu ke waktu tanpa menyimpan semuanya di jendela konteks.
Memori mendukung pengambilan konteks just-in-time. Alih-alih memuat semua informasi yang relevan di awal, sebuah agen mencatat apa yang dipelajarinya dalam file memori dan membacanya kembali sesuai kebutuhan. Ini menjaga konteks aktif tetap fokus pada tugas saat ini, yang penting untuk sesi yang berjalan lama yang jika tidak akan membebani jendela konteks. Lihat Effective context engineering untuk pola yang lebih luas.
Memory tool beroperasi di sisi klien: Claude meminta operasi file, dan aplikasi Anda mengeksekusinya. Anda mengontrol di mana dan bagaimana data disimpan melalui infrastruktur Anda sendiri.
Ketika memory tool diaktifkan, Claude secara otomatis memeriksa direktori memorinya sebelum memulai tugas. Saat bekerja, Claude menyimpan apa yang dipelajarinya dalam file di bawah /memories dan membacanya kembali di percakapan selanjutnya untuk melanjutkan pekerjaan sebelumnya.
Karena memory tool berada di sisi klien, Claude hanya meminta operasi memori. Aplikasi Anda mengeksekusi setiap permintaan terhadap penyimpanan yang Anda kontrol dan mengembalikan hasilnya dalam blok tool_result (lihat Menangani panggilan alat). Path /memories adalah prefiks yang dipetakan oleh handler Anda ke penyimpanan nyata, seperti direktori per pengguna atau kunci dalam database. Memori sepenuhnya berada di aplikasi Anda. Percakapan selanjutnya melanjutkan dari memori yang sama ketika mengirimkan entri tools yang sama dan handler Anda melayani penyimpanan yang sama. Untuk keamanan, batasi semua operasi memori ke direktori /memories (lihat Perlindungan path traversal).
Interaksi yang umum terlihat seperti ini:
1. Permintaan pengguna:
"Help me respond to this customer service ticket."2. Claude memeriksa direktori memori:
"I'll help you respond to the customer service ticket. Let me check my memory for any previous context."Claude memanggil memory tool:
{
"type": "tool_use",
"id": "toolu_01C4D5E6F7G8H9I0J1K2L3M4",
"name": "memory",
"input": {
"command": "view",
"path": "/memories"
}
}3. Aplikasi Anda mengembalikan isi direktori:
{
"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 membaca file yang relevan:
{
"type": "tool_use",
"id": "toolu_01D5E6F7G8H9I0J1K2L3M4N5",
"name": "memory",
"input": {
"command": "view",
"path": "/memories/customer_service_guidelines.xml"
}
}5. Aplikasi Anda mengembalikan isi file:
{
"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 menggunakan memori untuk membantu:
"Based on your customer service guidelines, I can help you craft a response. Please share the ticket details..."Memory tool tersedia di semua model Claude 4 dan yang lebih baru. Untuk daftar lengkap alat yang disediakan Anthropic, lihat Referensi alat.
Memory tool tersedia secara umum di Messages API: tidak diperlukan header beta. Menggunakannya memerlukan dua langkah:
tools {"type": "memory_20250818", "name": "memory"} adalah keseluruhan konfigurasinya: name harus memory, dan Anda tidak mendefinisikan skema input untuk alat yang disediakan Anthropic./memories, jadi baca Perlindungan path traversal sebelum Anda menulisnya.client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-5",
max_tokens=2048,
messages=[
{
"role": "user",
"content": "Help me respond to this customer service ticket.",
}
],
tools=[{"type": "memory_20250818", "name": "memory"}],
)
print(message)Balasan Claude terhadap permintaan seperti sebelumnya diakhiri dengan blok tool_use yang meminta operasi memori, seperti view /memories. Aplikasi Anda mengeksekusi operasi tersebut dan mengembalikan hasilnya dalam blok tool_result, lalu mengirimkan kembali percakapan agar Claude dapat melanjutkan: loop penggunaan alat standar.
Empat SDK menyediakan helper memory tool yang menangani antarmuka alat dan loop tersebut. Buat subclass BetaAbstractMemoryTool (Python dan C#), gunakan betaMemoryTool (TypeScript), atau implementasikan BetaMemoryToolHandler (Java) untuk mendukung memori dengan penyimpanan Anda sendiri, seperti file di disk, database, penyimpanan cloud, atau file terenkripsi. Python dan TypeScript juga menyertakan implementasi sistem file lokal yang siap pakai, BetaLocalFilesystemMemoryTool. Permukaan helper dan tool-runner berada di namespace beta masing-masing SDK meskipun memory tool itu sendiri tersedia secara umum. SDK Go dan Ruby tidak memiliki helper memori, jadi contoh-contoh tersebut menjalankan loop penggunaan alat sendiri, dan PHP membungkus closure handler Anda dalam BetaRunnableTool generiknya. Ketiganya menggunakan penyimpanan in-memory yang Anda ganti dengan penyimpanan Anda sendiri.
import anthropic
from anthropic.tools import BetaLocalFilesystemMemoryTool
client = anthropic.Anthropic()
memory = BetaLocalFilesystemMemoryTool(base_path="./memory")
runner = client.beta.messages.tool_runner(
model="claude-opus-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Remember that customer Acme Corp prefers email follow-ups.",
}
],
tools=[memory],
)
final_message = runner.until_done()
print(final_message.content)Penyimpanan in-memory dalam contoh Go, PHP, dan Ruby membuatnya mandiri: masing-masing melakukan dispatch pada field command di input blok tool_use dan mengembalikan string yang dijelaskan di bagian Perintah alat. Handler produksi juga memerlukan validasi path yang dilewati oleh penyimpanan demonstrasi ini. Untuk contoh lengkap dari SDK itu sendiri, lihat:
Implementasi sisi klien Anda harus menangani perintah-perintah berikut. Spesifikasi ini menjelaskan perilaku dan string pengembalian yang direkomendasikan: Claude membaca teks apa pun yang terkandung dalam hasil alat Anda, jadi Anda dapat mengembalikan string yang berbeda jika aplikasi Anda memerlukannya.
Menampilkan isi direktori atau isi file dengan rentang baris opsional:
{
"command": "view",
"path": "/memories/notes.txt",
"view_range": [1, 10]
}view_range bersifat opsional dan berlaku untuk tampilan file teks: [start_line, end_line] mengembalikan baris-baris tersebut, dan [start_line, -1] mengembalikan semuanya dari start_line hingga akhir file.
Untuk direktori: Kembalikan daftar yang menampilkan file dan direktori beserta ukurannya:
Here're the files and directories up to 2 levels deep in {path}, excluding hidden items and node_modules:
{size}\t{path}
{size}\t{path}/{filename1}
{size}\t{path}/{filename2}5.5K, 1.2M).) dan node_modulesview pertama pada /memories di penyimpanan kosong bukanlah error. Memory tool sistem file lokal dari SDK (BetaLocalFilesystemMemoryTool) membuat root memori sebelum panggilan pertama Claude dan mengembalikan header daftar diikuti oleh satu baris ukuran-dan-path untuk direktori kosong itu sendiri.
Untuk file: Kembalikan isi file dengan header dan nomor baris:
Here's the content of {path} with line numbers:
{line_numbers}{tab}{content}Format nomor baris:
"File {path} exceeds maximum line limit of 999,999 lines."Contoh output:
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 hundredDeskripsi alat Claude juga menyatakan bahwa view menampilkan file gambar (.jpg, .jpeg, dan .png) dan memotong tampilan teks file yang lebih panjang dari 16.000 karakter. Antisipasi panggilan view pada path gambar dan tampilan berentang lanjutan untuk file yang panjang.
"The path {path} does not exist. Please provide a valid path."Membuat file baru:
{
"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"Deskripsi alat Claude menyatakan create "membuat atau menimpa" file, jadi antisipasi panggilan create pada path yang sudah ada. Mengembalikan error adalah perilaku referensi, dan menimpa sebagai gantinya adalah pilihan implementasi yang valid.
Mengganti teks dalam file:
{
"command": "str_replace",
"path": "/memories/preferences.txt",
"old_str": "Favorite color: blue",
"new_str": "Favorite color: green"
}new_str bersifat opsional untuk str_replace: ketika dihilangkan, old_str dihapus tanpa pengganti.
"The memory file has been edited." diikuti oleh cuplikan file yang diedit dengan nomor baris"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 muncul beberapa kali, kembalikan: "No replacement was performed. Multiple occurrences of old_str `\{old_str}` in lines: {line_numbers}. Please ensure it is unique"Jika path adalah direktori, kembalikan error "file tidak ada".
Menyisipkan teks pada baris tertentu:
{
"command": "insert",
"path": "/memories/todo.txt",
"insert_line": 2,
"insert_text": "- Review memory tool documentation\n"
}insert_text disisipkan setelah baris insert_line, dan 0 menyisipkan di awal file.
"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}]"Jika path adalah direktori, kembalikan error "file tidak ada".
Menghapus file atau direktori:
{
"command": "delete",
"path": "/memories/old_file.txt"
}"Successfully deleted {path}""Error: The path {path} does not exist"Menghapus direktori dan semua isinya secara rekursif. Deskripsi alat memberi tahu Claude bahwa ia tidak dapat menghapus direktori /memories itu sendiri, jadi tolak delete yang path-nya adalah root memori.
Mengganti nama atau memindahkan file atau direktori:
{
"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"Mengganti nama direktori. Deskripsi alat memberi tahu Claude bahwa ia tidak dapat mengganti nama direktori /memories itu sendiri, jadi tolak rename yang old_path-nya adalah root memori.
Ketika memory tool ada di tools permintaan Anda, API secara otomatis menambahkan instruksi ini ke prompt sistem. Anda tidak perlu mengirimkannya sendiri:
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.Deskripsi alat Claude sudah memberitahunya untuk menjaga direktori memori tetap terorganisir, jadi Anda tidak perlu mengulangi instruksi tersebut. Jika Claude masih membuat file memori yang berantakan, Anda dapat memperkuatnya di prompt Anda:
Note: when editing your memory folder, always try to keep its content up-to-date, coherent and organized. You can rename or delete files that are no longer relevant. Do not create new files unless necessary.Anda juga dapat memandu apa yang ditulis Claude ke memori. Misalnya: "Only write down information relevant to <topic> in your memory system."
Aplikasi Anda mengeksekusi setiap operasi file yang diminta Claude, jadi pengamanan berikut adalah tanggung jawab Anda:
Claude biasanya menolak menulis informasi sensitif ke file memori. Untuk jaminan yang lebih kuat, tambahkan validasi yang menghapus data sensitif sebelum handler Anda menulis file.
Lacak ukuran file memori dan batasi seberapa besar file dapat tumbuh. Pertimbangkan untuk membatasi berapa banyak karakter yang dikembalikan perintah view, dan biarkan Claude menelusuri sisanya dengan view_range.
Hapus secara berkala file memori yang sudah lama tidak diakses.
Pertimbangkan pengamanan berikut:
/memories../, ..\\, atau pola traversal lainnya%2e%2e%2f)pathlib.Path.resolve() dan relative_to() di Python)Memory tool menggunakan pola penanganan error yang mirip dengan text editor tool. Pesan error setiap perintah tercantum di bagian Perintah alat. Untuk mengembalikan error ke Claude, atur is_error ke true pada hasil alat dan letakkan pesannya di content:
{
"type": "tool_result",
"tool_use_id": "toolu_01C4D5E6F7G8H9I0J1K2L3M4",
"content": "Error: The path /memories/notes.txt does not exist",
"is_error": true
}Memory tool berpasangan dengan pengeditan konteks untuk mengelola percakapan yang berjalan lama. Untuk detailnya, lihat Pengeditan konteks.
Memory tool juga dapat dipasangkan dengan compaction, yang merangkum konteks percakapan yang lebih lama di sisi server. Pengeditan konteks menghapus hasil alat tertentu di klien. Compaction secara otomatis merangkum seluruh percakapan di server ketika percakapan mendekati batas jendela konteks.
Untuk agen yang berjalan lama, pertimbangkan untuk menggunakan keduanya: compaction menjaga konteks aktif tetap kecil tanpa pembukuan di sisi klien, dan memori mempertahankan informasi yang harus bertahan dari perangkuman.
Untuk proyek perangkat lunak yang mencakup beberapa sesi agen, siapkan file memori secara terencana alih-alih menulisnya secara ad hoc seiring berjalannya pekerjaan. Pola berikut mengubah memori menjadi mekanisme pemulihan: setiap sesi baru melanjutkan dari keadaan yang dicatat oleh sesi terakhir.
Sesi inisialisasi: Sesi pertama menyiapkan file memori sebelum pekerjaan substantif dimulai. Ini mencakup log kemajuan (melacak apa yang telah dilakukan dan apa yang berikutnya), daftar periksa fitur (mendefinisikan cakupan pekerjaan), dan referensi ke skrip startup atau inisialisasi apa pun yang dibutuhkan proyek.
Sesi berikutnya: Setiap sesi baru dimulai dengan membaca file memori tersebut. Ini memulihkan keadaan proyek tanpa menjelajahi ulang basis kode atau menelusuri kembali keputusan sebelumnya.
Pembaruan akhir sesi: Sebelum sesi berakhir, sesi tersebut memperbarui log kemajuan dengan apa yang telah diselesaikan dan apa yang tersisa. Ini memastikan sesi berikutnya memiliki titik awal yang akurat.
Kerjakan satu fitur pada satu waktu. Tandai fitur sebagai selesai hanya setelah verifikasi end-to-end mengonfirmasi bahwa fitur tersebut berfungsi, bukan ketika kodenya ditulis. Ini menjaga log kemajuan tetap akurat dari sesi ke sesi.
Jalankan perintah shell dalam sesi bash yang persisten.
Kelola konteks percakapan secara otomatis seiring pertumbuhannya dengan pengeditan konteks.
Compaction konteks di sisi server untuk mengelola percakapan panjang yang mendekati batas jendela konteks.
Direktori alat yang disediakan Anthropic dan referensi untuk properti definisi alat opsional.
Was this page helpful?