La herramienta de memoria permite que Claude almacene y recupere información entre conversaciones en un directorio de archivos de memoria. Claude puede crear, leer, actualizar y eliminar archivos que persisten entre sesiones, acumulando conocimiento con el tiempo sin mantener todo en la "context window" (ventana de contexto).
La memoria admite la recuperación de contexto justo a tiempo. En lugar de cargar toda la información relevante de antemano, un agente registra lo que aprende en archivos de memoria y los vuelve a leer cuando los necesita. Esto mantiene el contexto activo enfocado en la tarea actual, lo cual es importante para sesiones de larga duración que de otro modo saturarían la ventana de contexto. Consulta Effective context engineering para conocer el patrón más amplio.
La herramienta de memoria opera del lado del cliente: Claude solicita operaciones de archivo y tu aplicación las ejecuta. Tú controlas dónde y cómo se almacenan los datos a través de tu propia infraestructura.
Comunícate a través del formulario de comentarios para compartir tu opinión sobre esta función.
Esta función es elegible para Zero Data Retention (ZDR). Cuando tu organización tiene un acuerdo de ZDR, los datos enviados a través de esta función no se almacenan después de que se devuelve la respuesta de la API.
Cuando la herramienta de memoria está habilitada, Claude revisa automáticamente su directorio de memoria antes de comenzar una tarea. Mientras trabaja, Claude almacena lo que aprende en archivos bajo /memories y los vuelve a leer en conversaciones posteriores para continuar el trabajo anterior.
Dado que la herramienta de memoria es del lado del cliente, Claude solo solicita operaciones de memoria. Tu aplicación ejecuta cada solicitud contra el almacenamiento que controlas y devuelve el resultado en un bloque tool_result (consulta Manejar llamadas a herramientas). La ruta /memories es un prefijo que tu manejador asigna a almacenamiento real, como un directorio por usuario o claves en una base de datos. La memoria reside completamente en tu aplicación. Una conversación posterior continúa desde la misma memoria cuando envía la misma entrada de tools y tu manejador sirve el mismo almacén. Por seguridad, restringe todas las operaciones de memoria al directorio /memories (consulta Protección contra path traversal).
Una interacción típica se ve así:
1. Solicitud del usuario:
"Help me respond to this customer service ticket."2. Claude revisa el directorio de memoria:
"I'll help you respond to the customer service ticket. Let me check my memory for any previous context."Claude llama a la herramienta de memoria:
{
"type": "tool_use",
"id": "toolu_01C4D5E6F7G8H9I0J1K2L3M4",
"name": "memory",
"input": {
"command": "view",
"path": "/memories"
}
}3. Tu aplicación devuelve el contenido del directorio:
{
"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 lee los archivos relevantes:
{
"type": "tool_use",
"id": "toolu_01D5E6F7G8H9I0J1K2L3M4N5",
"name": "memory",
"input": {
"command": "view",
"path": "/memories/customer_service_guidelines.xml"
}
}5. Tu aplicación devuelve el contenido del archivo:
{
"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 usa la memoria para ayudar:
"Based on your customer service guidelines, I can help you craft a response. Please share the ticket details..."La herramienta de memoria está disponible en todos los modelos Claude 4 y posteriores. Para ver la lista completa de herramientas proporcionadas por Anthropic, consulta la Referencia de herramientas.
La herramienta de memoria está disponible de forma general en la API de Messages: no se requiere ningún encabezado beta. Usarla requiere dos pasos:
tools {"type": "memory_20250818", "name": "memory"} es toda la configuración: el name debe ser memory, y no defines un esquema de entrada para una herramienta proporcionada por Anthropic./memories, así que lee Protección contra path traversal antes de escribirlo.client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-4-8",
max_tokens=2048,
messages=[
{
"role": "user",
"content": "Help me respond to this customer service ticket.",
}
],
tools=[{"type": "memory_20250818", "name": "memory"}],
)
print(message)La respuesta de Claude a una solicitud como la anterior termina con un bloque tool_use que solicita una operación de memoria, como view /memories. Tu aplicación ejecuta la operación y devuelve el resultado en un bloque tool_result, luego envía la conversación de vuelta para que Claude pueda continuar: el bucle de uso de herramientas estándar.
Cuatro SDKs proporcionan helpers para la herramienta de memoria que manejan la interfaz de la herramienta y el bucle. Crea una subclase de BetaAbstractMemoryTool (Python y C#), usa betaMemoryTool (TypeScript) o implementa BetaMemoryToolHandler (Java) para respaldar la memoria con tu propio almacenamiento, como archivos en disco, una base de datos, almacenamiento en la nube o archivos cifrados. Python y TypeScript también incluyen una implementación lista para usar basada en el sistema de archivos local, BetaLocalFilesystemMemoryTool. Las interfaces del helper y del tool-runner residen en el espacio de nombres beta de cada SDK, aunque la herramienta de memoria en sí está disponible de forma general. Los SDKs de Go y Ruby no tienen helper de memoria, por lo que esos ejemplos ejecutan el bucle de uso de herramientas por sí mismos, y PHP envuelve tu closure de manejador en su BetaRunnableTool genérico. Los tres usan un almacén en memoria que debes reemplazar con tu propio almacenamiento.
import anthropic
from anthropic.tools import BetaLocalFilesystemMemoryTool
client = anthropic.Anthropic()
memory = BetaLocalFilesystemMemoryTool(base_path="./memory")
runner = client.beta.messages.tool_runner(
model="claude-opus-4-8",
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)Los almacenes en memoria de los ejemplos de Go, PHP y Ruby los mantienen autocontenidos: cada uno despacha según el campo command en el input del bloque tool_use y devuelve las cadenas descritas en Comandos de la herramienta. Un manejador de producción también necesita la validación de rutas que estos almacenes de demostración omiten. Para ver los ejemplos completos propios de los SDKs, consulta:
Tu implementación del lado del cliente debe manejar los siguientes comandos. Estas especificaciones describen los comportamientos y cadenas de retorno recomendados: Claude lee cualquier texto que contenga el resultado de tu herramienta, por lo que puedes devolver cadenas diferentes si tu aplicación lo necesita.
Muestra el contenido de un directorio o el contenido de un archivo con rangos de líneas opcionales:
{
"command": "view",
"path": "/memories/notes.txt",
"view_range": [1, 10]
}view_range es opcional y se aplica a las vistas de archivos de texto: [start_line, end_line] devuelve esas líneas, y [start_line, -1] devuelve todo desde start_line hasta el final del archivo.
Para directorios: Devuelve un listado que muestra archivos y directorios con sus tamaños:
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).) y node_modulesEl primer view de /memories en un almacén vacío no es un error. Las herramientas de memoria de sistema de archivos local de los SDKs (BetaLocalFilesystemMemoryTool) crean la raíz de memoria antes de la primera llamada de Claude y devuelven el encabezado del listado seguido de una sola línea de tamaño y ruta para el directorio vacío en sí.
Para archivos: Devuelve el contenido del archivo con un encabezado y números de línea:
Here's the content of {path} with line numbers:
{line_numbers}{tab}{content}Formato de números de línea:
"File {path} exceeds maximum line limit of 999,999 lines."Ejemplo de salida:
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 hundredLa descripción de la herramienta de Claude también indica que view muestra archivos de imagen (.jpg, .jpeg y .png) y trunca la vista de texto de archivos de más de 16,000 caracteres. Espera llamadas a view sobre rutas de imágenes y vistas de seguimiento con rangos para archivos largos.
"The path {path} does not exist. Please provide a valid path."Crea un nuevo archivo:
{
"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"La descripción de la herramienta de Claude indica que create "crea o sobrescribe" un archivo, así que espera llamadas a create sobre rutas que ya existen. Devolver el error es el comportamiento de referencia, y sobrescribir en su lugar es una opción de implementación válida.
Reemplaza texto en un archivo:
{
"command": "str_replace",
"path": "/memories/preferences.txt",
"old_str": "Favorite color: blue",
"new_str": "Favorite color: green"
}new_str es opcional para str_replace: cuando se omite, old_str se elimina sin reemplazo.
"The memory file has been edited." seguido de un fragmento del archivo editado con números de línea"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 aparece varias veces, devuelve: "No replacement was performed. Multiple occurrences of old_str `\{old_str}` in lines: {line_numbers}. Please ensure it is unique"Si la ruta es un directorio, devuelve un error de "el archivo no existe".
Inserta texto en una línea específica:
{
"command": "insert",
"path": "/memories/todo.txt",
"insert_line": 2,
"insert_text": "- Review memory tool documentation\n"
}insert_text se inserta después de la línea insert_line, y 0 inserta al principio del archivo.
"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}]"Si la ruta es un directorio, devuelve un error de "el archivo no existe".
Elimina un archivo o directorio:
{
"command": "delete",
"path": "/memories/old_file.txt"
}"Successfully deleted {path}""Error: The path {path} does not exist"Elimina el directorio y todo su contenido de forma recursiva. La descripción de la herramienta le indica a Claude que no puede eliminar el directorio /memories en sí, así que rechaza un delete cuya ruta sea la raíz de memoria.
Renombra o mueve un archivo o directorio:
{
"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"Renombra el directorio. La descripción de la herramienta le indica a Claude que no puede renombrar el directorio /memories en sí, así que rechaza un rename cuyo old_path sea la raíz de memoria.
Cuando la herramienta de memoria está presente en los tools de tu solicitud, la API agrega automáticamente esta instrucción a la indicación del sistema. No necesitas enviarla tú mismo:
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.La descripción de la herramienta de Claude ya le indica que mantenga el directorio de memoria organizado, por lo que no necesitas repetir esa instrucción. Si Claude aún crea archivos de memoria desordenados, puedes reforzarlo en tu prompt:
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.También puedes guiar lo que Claude escribe en la memoria. Por ejemplo: "Solo anota información relevante para <topic> en tu sistema de memoria."
Tu aplicación ejecuta cada operación de archivo que Claude solicita, por lo que estas salvaguardas son tu responsabilidad:
Claude generalmente se niega a escribir información sensible en archivos de memoria. Para garantías más sólidas, agrega validación que elimine datos sensibles antes de que tu manejador escriba el archivo.
Realiza un seguimiento de los tamaños de los archivos de memoria y limita cuánto puede crecer un archivo. Considera limitar cuántos caracteres devuelve el comando view y deja que Claude pagine el resto con view_range.
Elimina periódicamente los archivos de memoria a los que no se ha accedido en mucho tiempo.
Una ruta maliciosa como /memories/../../secrets.env puede alcanzar archivos fuera del directorio /memories. Tu implementación debe validar cada ruta en cada comando para prevenir ataques de "directory traversal" (recorrido de directorios).
Considera estas salvaguardas:
/memories../, ..\\ u otros patrones de recorrido%2e%2e%2f)pathlib.Path.resolve() y relative_to() de Python)La herramienta de memoria usa patrones de manejo de errores similares a los de la herramienta de editor de texto. Los mensajes de error de cada comando se listan en Comandos de la herramienta. Para devolver un error a Claude, establece is_error en true en el resultado de la herramienta y coloca el mensaje en content:
{
"type": "tool_result",
"tool_use_id": "toolu_01C4D5E6F7G8H9I0J1K2L3M4",
"content": "Error: The path /memories/notes.txt does not exist",
"is_error": true
}La herramienta de memoria se combina con la edición de contexto para gestionar conversaciones de larga duración. Para más detalles, consulta Edición de contexto.
La herramienta de memoria también puede combinarse con la compactación, que resume el contexto de conversación más antiguo del lado del servidor. La edición de contexto borra resultados de herramientas específicos en el cliente. La compactación resume automáticamente toda la conversación en el servidor cuando la conversación se acerca al límite de la ventana de contexto.
Para agentes de larga duración, considera usar ambas: la compactación mantiene el contexto activo pequeño sin contabilidad del lado del cliente, y la memoria preserva la información que debe sobrevivir al resumen.
Para proyectos de software que abarcan múltiples sesiones de agente, configura los archivos de memoria deliberadamente en lugar de escribirlos de forma improvisada a medida que avanza el trabajo. El siguiente patrón convierte la memoria en un mecanismo de recuperación: cada nueva sesión se reanuda desde el estado que registró la anterior.
Sesión inicializadora: La primera sesión configura los archivos de memoria antes de que comience cualquier trabajo sustantivo. Esto incluye un registro de progreso (que rastrea lo que se ha hecho y lo que viene después), una lista de verificación de funcionalidades (que define el alcance del trabajo) y una referencia a cualquier script de inicio o inicialización que el proyecto necesite.
Sesiones posteriores: Cada nueva sesión comienza leyendo esos archivos de memoria. Esto restaura el estado del proyecto sin volver a explorar la base de código ni retrazar decisiones anteriores.
Actualización al final de la sesión: Antes de que termine una sesión, actualiza el registro de progreso con lo que se completó y lo que queda pendiente. Esto asegura que la siguiente sesión tenga un punto de partida preciso.
Trabaja en una funcionalidad a la vez. Marca una funcionalidad como completa solo después de que la verificación de extremo a extremo confirme que funciona, no cuando el código esté escrito. Esto mantiene el registro de progreso preciso de sesión a sesión.
Para un estudio de caso detallado de este patrón en la práctica, incluyendo el script inicializador, la estructura del archivo de progreso y la recuperación basada en git, consulta Effective harnesses for long-running agents.
Ejecuta comandos de shell en una sesión de bash persistente.
Gestiona automáticamente el contexto de la conversación a medida que crece con la edición de contexto.
Compactación de contexto del lado del servidor para gestionar conversaciones largas que se acercan a los límites de la ventana de contexto.
Directorio de herramientas proporcionadas por Anthropic y referencia de propiedades opcionales de definición de herramientas.
Was this page helpful?