Memória e Edição de Contexto
Um agente de execução longa tem dois inimigos: ele esquece o que aprendeu no momento em que a conversa termina, e sua janela de contexto enche com saídas de ferramentas obsoletas até transbordar. A Anthropic fornece uma primitiva para cada um — a memory tool (persistência) e a edição de contexto (poda) — e elas são projetadas para serem usadas juntas.
- O que é a memory tool — um armazenamento de arquivos do lado do cliente em /memories que você implementa, não a Anthropic
- Os seis comandos que seu handler deve responder: view, create, str_replace, insert, delete, rename
- Por que a validação de path-traversal é inegociável quando você a integra
- Como a edição de contexto limpa automaticamente resultados de ferramentas antigos quando o contexto ultrapassa um limite de tokens
- Como combinar ambos sob um único cabeçalho beta, e as armadilhas com caching e ordenação
Dois problemas, duas ferramentas
Mantenha as duas ideias separadas na sua cabeça:
- Memory tool = persistência entre sessões. Claude lê e escreve arquivos; você os armazena.
- Edição de contexto = poda dentro de uma sessão. A API descarta resultados de ferramentas obsoletos do prompt antes que ele chegue ao Claude.
Esta página combina com Prompt Caching e com a economia de tokens para o lado de custo, e com Engenharia de Contexto e harnesses de agentes de execução longa para o porquê.
A memory tool é uma ferramenta que você implementa
Isto confunde as pessoas: habilitar a memory tool não lhe dá armazenamento hospedado pela Anthropic. É uma ferramenta do lado do cliente. Claude emite chamadas de ferramenta como view ou create; sua aplicação as executa contra qualquer backend que você escolher — arquivos locais, um banco de dados, blobs criptografados, armazenamento em nuvem — e retorna o resultado. Você é dono de onde os bytes ficam (e é também por isso que ela é elegível para Zero-Data-Retention).
Quando a ferramenta está habilitada, a Anthropic injeta uma instrução de sistema dizendo ao Claude para verificar seu diretório de memória antes de fazer qualquer outra coisa, e para registrar o progresso enquanto trabalha, de modo que nada se perca se o contexto for reiniciado.
Passo 1 — habilitar a ferramenta
Adicione a ferramenta à sua requisição. A string de tipo é a versão datada memory_20250818.
- Python
- TypeScript
import anthropic
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-5",
max_tokens=2048,
messages=[{"role": "user", "content": "Help me respond to this support ticket."}],
tools=[{"type": "memory_20250818", "name": "memory"}],
)
print(message)
import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic();
const message = await anthropic.messages.create({
model: "claude-opus-5",
max_tokens: 2048,
messages: [{ role: "user", content: "Help me respond to this support ticket." }],
tools: [{ type: "memory_20250818", name: "memory" }],
});
console.log(message);
Os SDKs oficiais incluem helpers de memória para que você não precise montar a interface da ferramenta na mão — faça subclasse de BetaAbstractMemoryTool (Python, C#), use betaMemoryTool (TypeScript), ou implemente BetaMemoryToolHandler (Java). Eles lhe entregam um hook limpo onde você pluga seu armazenamento.
Passo 2 — responder aos seis comandos
Seu handler deve implementar estes. As strings que o Claude espera de volta são específicas — combine com elas para que o modelo interprete os resultados corretamente.
- Liste um diretório (arquivos até 2 níveis de profundidade, com tamanhos legíveis por humanos) ou retorne o conteúdo de um arquivo com números de linha indexados a partir de 1. view_range opcional para ler uma fatia.
- Escreva um novo arquivo a partir de file_text. Gere erro se ele já existir em vez de sobrescrever silenciosamente.
- Substitua um old_str exato por new_str. Recuse se old_str estiver ausente, ou aparecer mais de uma vez (ambíguo) — reporte os números de linha.
- Insira insert_text em insert_line. Valide que a linha está dentro de [0, n_lines].
- Remova um arquivo, ou um diretório e seu conteúdo recursivamente.
- Mova/renomeie um path. Recuse se o destino já existir — nunca sobrescreva.
Um view real do diretório retorna algo como isto — note o cabeçalho literal e os tamanhos separados por tabulação, que o modelo é treinado para parsear:
Here're the files and directories up to 2 levels deep in /memories, excluding hidden items and node_modules:
4.0K /memories
1.5K /memories/customer_service_guidelines.xml
2.0K /memories/refund_policies.xml
Passo 3 — proteja os paths (não pule isto)
A memory tool permite que um modelo emita strings de path arbitrárias. Uma conversa envenenada ou um payload de prompt-injection pode tentar escapar de /memories e ler ou sobrescrever arquivos em outro lugar da sua máquina. Trate todo path recebido como hostil.
- Rejeite qualquer path que não resolva para dentro de /memories.
- Canonicalize antes de verificar — em Python, Path(p).resolve() e então verifique que .relative_to(memories_root) não levanta exceção.
- Bloqueie ../, ..\, e traversal codificado em URL como %2e%2e%2f.
- Limite os tamanhos de arquivo e o comprimento de leitura para que um agente desgovernado não possa esgotar o disco ou explodir o próximo prompt.
Este validador é o jogo inteiro — fixe-o e teste-o antes de qualquer outra coisa entrar em produção:
Guarda contra path-traversal (Python)
from pathlib import Path
MEMORY_ROOT = Path("/srv/agent/memories").resolve()
def safe_path(requested: str) -> Path:
# Map the model's /memories/... onto your real root, then prove containment.
rel = requested.removeprefix("/memories").lstrip("/")
candidate = (MEMORY_ROOT / rel).resolve()
candidate.relative_to(MEMORY_ROOT) # raises ValueError if it escaped
return candidateA edição de contexto evita que a janela transborde
A memória resolve o esquecimento. O problema oposto — uma janela de contexto entupida com blocos tool_result antigos de 40 buscas web atrás — é o que a edição de contexto resolve. Assim que o prompt ultrapassa um limite de tokens, a API limpa os resultados de ferramentas mais antigos (substituindo-os por um placeholder curto para que o Claude saiba que foram removidos) antes que o prompt seja enviado ao modelo. Seu cliente mantém o histórico completo e não editado; apenas o que chega ao modelo é aparado.
Ela depende de um cabeçalho beta:
anthropic-beta: context-management-2025-06-27
Você a configura com um array context_management.edits. A estratégia principal é clear_tool_uses_20250919:
- Python
- TypeScript
message = client.beta.messages.create(
model="claude-opus-5",
max_tokens=2048,
betas=["context-management-2025-06-27"],
messages=[...],
tools=[{"type": "memory_20250818", "name": "memory"}],
context_management={
"edits": [
{
"type": "clear_tool_uses_20250919",
"trigger": {"type": "input_tokens", "value": 30000}, # start clearing past 30k
"keep": {"type": "tool_uses", "value": 3}, # always keep the last 3
"clear_at_least": {"type": "input_tokens", "value": 5000},
"exclude_tools": ["memory"], # never clear memory calls
"clear_tool_inputs": False, # keep the call args, drop results
}
]
},
)
const message = await anthropic.beta.messages.create({
model: "claude-opus-5",
max_tokens: 2048,
betas: ["context-management-2025-06-27"],
messages: [...],
tools: [{ type: "memory_20250818", name: "memory" }],
context_management: {
edits: [
{
type: "clear_tool_uses_20250919",
trigger: { type: "input_tokens", value: 30000 },
keep: { type: "tool_uses", value: 3 },
clear_at_least: { type: "input_tokens", value: 5000 },
exclude_tools: ["memory"],
clear_tool_inputs: false,
},
],
},
});
O que os botões significam:
| Parâmetro | Padrão | O que controla |
|---|---|---|
trigger | 100.000 tokens de entrada | Quando a limpeza entra em ação |
keep | 3 usos de ferramenta | Quantos pares recentes de uso/resultado de ferramenta são sempre preservados |
clear_at_least | nenhum | Mínimo de tokens liberados por ativação — use-o para que uma invalidação de cache realmente valha a pena |
exclude_tools | nenhum | Ferramentas nunca limpas (ex.: memory, web_search) |
clear_tool_inputs | false | Se também deve descartar os argumentos da chamada da ferramenta, não apenas o resultado |
A resposta lhe diz o que ela fez, sob context_management.applied_edits — ex.: cleared_tool_uses e cleared_input_tokens — para que você possa registrar quanto foi recuperado.
Há uma estratégia irmã, clear_thinking_20251015, que poda blocos antigos de extended-thinking. Se você usar ambas, liste clear_thinking_20251015 primeiro no array edits.
- Limpar resultados de ferramentas invalida qualquer prefixo de prompt-cache no ponto de limpeza — combine-o com clear_at_least para que você só pague essa invalidação quando estiver liberando um pedaço significativo.
- exclude_tools: ["memory"] é a jogada usual: você quer que as próprias anotações do agente persistam, não que sejam varridas junto com resultados de busca obsoletos.
- Edição de contexto (corte do lado do cliente) e compactação (sumarização do lado do servidor) são recursos diferentes — para execuções muito longas você pode combinar os dois.
Por que combiná-los — os números
Usados juntos, os dois recursos permitem que um agente execute muito além de uma única janela de contexto: a edição de contexto mantém a janela viva enxuta, e tudo o que importa é escrito na memória antes de ser limpo. A Anthropic relata que combinar memória com edição de contexto deu uma melhoria de 39% em uma avaliação de busca agêntica, e que a edição de contexto sozinha cortou o uso de tokens em 84% em um teste de busca web de 100 turnos.
Um padrão que funciona: o log de projeto multi-sessão
O uso mais limpo da memória é inicializá-la deliberadamente em vez de escrever arquivos de forma improvisada:
- Antes de qualquer trabalho real, escreva um log de progresso, um checklist de funcionalidades, e uma nota apontando para qualquer script de inicialização que o projeto precise.
- Ela recupera o estado completo do projeto em segundos — sem necessidade de re-explorar o código ou refazer decisões.
- Registre o que foi feito e o que vem a seguir, para que a próxima sessão tenha um ponto de partida preciso.
- Só marque uma funcionalidade como completa após verificação ponta a ponta — não apenas após o código ser escrito — para que o log permaneça confiável.
Teste seu entendimento
Check yourself
0/3Fontes e leitura adicional
- Memory tool — documentação da Claude API — tipo de ferramenta
memory_20250818, os seis comandos e orientação de segurança. - Edição de contexto — documentação da Claude API — o beta
context-management-2025-06-27, os campos de estratégia e os padrões. - Gerenciando contexto na Claude Developer Platform — o anúncio com as cifras de benchmark de 39% / 84%.
- Engenharia de contexto eficaz para agentes de IA — o padrão de recuperação just-in-time para o qual a memória foi construída.
- Harnesses eficazes para agentes de execução longa — o estudo de caso do log de projeto multi-sessão.
- Relacionado no AILmanac: Engenharia de Contexto · Harnesses de agentes de execução longa · Prompt Caching · Tool Use