Como usar a tag private do Claude-Mem para manter dados sensíveis fora da memória

A tag private Claude-Mem é o controle de privacidade do plugin de memória persistente: você envolve o trecho sensível em <private> ... </private> e ele some antes de ser gravado. O Claude enxerga o conteúdo durante a sessão, mas os hooks limpam o texto na borda: UserPromptSubmit limpa os prompts do usuário e PostToolUse limpa tool_input e tool_response antes de virar observação. Resultado: chave de API, credencial e dado de cliente não chegam ao banco, aos índices de busca nem ao agente de memória. Funciona só se o Claude-Mem estiver instalado como plugin, com os hooks registrados.
Fala aí, beleza? Memória persistente é maravilhoso até o dia em que você cola um erro de produção no chat e cai a ficha: aquilo ali virou histórico
Host do banco, usuário, porta, chave de API do cliente, aquela lógica proprietária que nem devia sair da sua cabeça… tudo passando por uma ferramenta que existe justamente pra LEMBRAR das coisas
O Claude-Mem é um plugin de contexto persistente pro Claude Code: ele captura o que acontece na sessão, comprime com IA e injeta o contexto relevante nas sessões seguintes. Ele também funciona com outros agentes (Gemini CLI, OpenClaw, Codex, Copilot, OpenCode)
E o controle de privacidade dele é uma tag só: <private>
A ideia é elegante: o Claude VÊ o conteúdo dentro da tag durante a sessão, mas ele é removido na hora de persistir. Ou seja, o modelo trabalha com o erro completo e o banco fica só com a sua pergunta
Bora ver na prática?
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
O que você precisa antes de usar a tag private
Um pré-requisito só, mas é o pré-requisito que derruba geral: o Claude-Mem precisa estar instalado como plugin
Os dois caminhos oficiais:
npx claude-mem install
Ou, de dentro do próprio Claude Code:
/plugin marketplace add thedotmack/claude-mem
/plugin install claude-mem
Tome cuidado com isso: rodar npm install -g claude-mem instala apenas o SDK/biblioteca. Não registra os hooks do plugin e não sobe o serviço worker
E aqui tá o ponto crítico do post inteiro: a filtragem da tag private acontece na camada de hooks. Sem hook, não tem filtragem. Você escreve <private>, a tag aparece bonitinha na tela e o conteúdo vai pro banco do mesmo jeito
Pontos de contexto do projeto:
- versão mais recente publicada no npm: 13.15.2 (a 13.15.1 chegou a ser marcada mas nunca foi publicada, a 13.15.2 substitui ela)
- licença Apache 2.0
- repositório
thedotmack/claude-mem, mantido pelo Alex Newman (thedotmack)
Se você tá numa instalação mais antiga, relaxa: a versão 13 trouxe o runtime Server Beta como serviço independente, com ciclo de vida próprio, e ele é opt-in (claude-mem server start, status, stop). Quem continua no plugin baseado em worker segue funcionando sem quebra, na mesma porta e no mesmo SQLite
Ah, e o sqlite3 é opcional aqui: você só vai precisar dele no passo 5, pra conferir com os próprios olhos que o segredo não foi gravado 🙂
Como usar a tag private passo a passo
1. Identifique o trecho sensível ANTES de colar
Parece besteira, mas é o passo que exige a única disciplina real do processo: olhar pro que você tá prestes a colar e separar o que é sensível
A documentação lista as categorias: chaves de API, credenciais, dados de cliente e lógica proprietária que você precisa usar na sessão mas não quer registrada
O erro comum deste passo: colar primeiro e lembrar depois. A proteção é opt-in, ela age no momento em que a mensagem é processada. Depois que foi, foi
2. Envolva o trecho com a tag
A sintaxe é literalmente uma tag de abertura e uma de fechamento em volta do conteúdo:
Por que essa conexão tá falhando?
<private>
Error: Database connection failed
Host: internal-db-prod.company.com
Port: 5432
User: admin_user
</private>
Nesse exemplo (que é o da própria documentação), o Claude enxerga o erro completo, com host, porta e usuário, e responde em cima disso normalmente
Mas só a pergunta é armazenada
O erro comum deste passo: esquecer de fechar a tag. Fechou errado, o bloco não é reconhecido como bloco
3. Use as capacidades da tag a seu favor
A tag não é limitada a uma linha nem a um bloco por mensagem:
- ela envolve múltiplas linhas sem problema
- você pode usar vários blocos private na mesma mensagem
- tags aninhadas são removidas junto com a externa
Ou seja, dá pra intercalar contexto público e trecho sensível numa mensagem só, sem picotar a conversa em várias mensagens
O erro comum deste passo: o oposto disso, marcar a mensagem inteira porque tem uma linha sensível no meio. Isso funciona, mas você joga fora todo o resto do contexto
4. Entenda ONDE o filtro age
Esse é o passo que não tem comando, mas é o que constrói o modelo mental certo
A limpeza acontece na borda (edge processing), antes de qualquer armazenamento, em dois hooks:
- o hook
UserPromptSubmitlimpa os prompts do usuário antes de salvar na tabelauser_prompts - o hook
PostToolUselimpa otool_inpute otool_responseserializados antes de criar a observação
O conteúdo marcado como private não chega ao banco de dados, não chega aos índices de busca e não chega ao agente de memória. A filtragem ocorre antes de os dados chegarem ao serviço worker
O erro comum deste passo: instalar por npm install -g e achar que tá protegido. Vale repetir porque é o furo silencioso: sem hook registrado, não existe camada de filtragem
5. Verifique que ficou de fora mesmo
Essa é a parte boa: não precisa acreditar, dá pra conferir
O Claude-Mem guarda o banco estruturado em ~/.claude-mem/claude-mem.db (SQLite) e os embeddings vetoriais em ~/.claude-mem/chroma/
Os dois comandos da documentação:
sqlite3 ~/.claude-mem/claude-mem.db "SELECT prompt_text FROM user_prompts ORDER BY created_at_epoch DESC LIMIT 1;"
sqlite3 ~/.claude-mem/claude-mem.db "SELECT narrative FROM observations ORDER BY created_at_epoch DESC LIMIT 1;"
O primeiro mostra o último prompt que foi gravado, o segundo mostra a última narrativa de observação
Se você marcou certo, o host e o usuário do exemplo não aparecem em nenhum dos dois
Faça o teste na primeira vez! É o tipo de coisa que a gente confia MUITO mais depois de ver com o próprio olho
Quando marcar como private (e quando não marcar)
A tag é ótima, mas ela tem um custo e a documentação é honesta sobre isso
| Marque como private | Pense duas vezes antes de marcar |
|---|---|
| Chaves de API | Contexto técnico comum da sessão |
| Credenciais | Descrição do problema que você quer que o Claude lembre |
| Dados de cliente | Decisões de arquitetura do projeto |
| Lógica proprietária | A mensagem inteira por causa de uma linha |
O critério é simples: private é pro que você precisa usar na sessão mas não quer registrado
O lado B é que o uso excessivo cobra o preço na qualidade. Marcar demais reduz a qualidade do contexto futuro, porque o Claude-Mem fica sem material pra comprimir e injetar nas próximas sessões
É um trade-off direto: cada bloco private é uma memória que não vai existir amanhã
Quando o assunto é dado de cliente, o raciocínio é o mesmo que vale em qualquer pipeline: vale olhar também pra segurança e compliance LGPD em automações, porque a régua do que pode ou não ser armazenado não muda só porque a ferramenta é um agente de código
E aí vem o limite honesto, que a própria documentação faz questão de deixar claro: a tag impede o armazenamento, mas ela NÃO substitui gestão de segredos adequada
Chave de API continua tendo que viver em variável de ambiente, cofre, gerenciador de segredos, o que for. Os mesmos cuidados de proteger dados sensíveis com autenticação e criptografia seguem valendo por fora
private é higiene de memória, não é cofre
Pra quem tá começando com ferramentas de IA no desenvolvimento
Se você quer ver esse tipo de ferramenta em ação antes de mexer em configuração, esse vídeo do canal mostra o novo Google AI Studio montando um app fullstack com banco de dados
Conclusão
O modelo mental que resolve tudo aqui cabe numa frase: o Claude vê, o banco não guarda
O conteúdo dentro de <private> fica disponível pro modelo trabalhar durante a sessão e é removido pelos hooks antes de chegar no SQLite, nos índices de busca e no agente de memória
Seu próximo passo, na ordem:
- instale pelo caminho de plugin, nunca por
npm install -g: rodenpx claude-mem installno terminal, ou, de dentro do Claude Code,/plugin marketplace add thedotmack/claude-meme depois/plugin install claude-mem - marque um trecho sensível de verdade na próxima sessão, abrindo com
<private>e fechando com</private>em volta do trecho - rode
sqlite3 ~/.claude-mem/claude-mem.db "SELECT prompt_text FROM user_prompts ORDER BY created_at_epoch DESC LIMIT 1;"e confirme com o próprio olho que o trecho não foi gravado
É rapidinho e você passa a confiar na ferramenta por evidência, não por fé 😀
E guarda essa: private é higiene de memória, não é cofre de segredos. Segredo bom continua sendo aquele que nem chega perto do chat
até o próximo post!
Perguntas frequentes
A tag private do Claude-Mem funciona em qualquer forma de instalação?
Não. A filtragem só existe se o Claude-Mem estiver instalado como plugin, via npx claude-mem install ou pelos comandos /plugin marketplace add thedotmack/claude-mem e /plugin install claude-mem. Rodar npm install -g claude-mem instala só o SDK/biblioteca, sem registrar os hooks nem subir o serviço worker, então a tag private não tem efeito nenhum nesse cenário.
O Claude deixa de enxergar o conteúdo dentro da tag private durante a sessão?
Não, ele continua vendo normalmente. A tag <private> só age no momento da persistência: o conteúdo fica visível pro modelo durante a conversa e é removido antes de ser gravado no banco. É por isso que dá pra colar um erro completo com host e credenciais e ainda assim receber uma resposta útil.
Dá pra usar a tag private várias vezes na mesma mensagem?
Sim. Ela aceita múltiplas linhas, permite vários blocos private na mesma mensagem e, se houver tags aninhadas, elas são removidas junto com a externa. Isso evita ter que picotar a conversa em várias mensagens só pra isolar um trecho sensível.
A tag private substitui o uso de um gerenciador de senhas ou de segredos?
Não, e a própria documentação é clara nesse ponto. A tag impede que aquele conteúdo seja armazenado pelo Claude-Mem, mas dado sensível de verdade ainda deve passar por uma gestão de segredos adequada, como um vault ou gerenciador de credenciais.
Como saber se o que eu marquei como private realmente não foi salvo?
Consultando o SQLite do Claude-Mem, que fica em ~/.claude-mem/claude-mem.db. Os comandos sqlite3 ~/.claude-mem/claude-mem.db "SELECT prompt_text FROM user_prompts ORDER BY created_at_epoch DESC LIMIT 1;" e o equivalente na tabela observations mostram o último prompt e a última narrativa gravados, e o trecho sensível não deve aparecer em nenhum dos dois.
Marcar tudo como private na sessão é uma boa prática?
Não, a documentação recomenda uso moderado. Marcar demais reduz a qualidade do contexto que o Claude-Mem consegue injetar em sessões futuras, então o ideal é reservar a tag só pro que realmente não pode ser guardado, como chaves de API, credenciais, dados de cliente e lógica proprietária.
Formações
Formação SAAS com IA
Tire usas ideias do papel criando softwares com IA, integre pagamentos e lance seu projeto!
- 291 aulas
- 18 projetos
- 24h 17min
Blog | Mais populares
As diferenças de var, let e const
Como fazer redirecionamento com PHP
Neste artigo você vai aprender a como fazer redirecionamento com PHP, utilizaremos abordagens fáceis de entender e de aplicar Fala programador(a), beleza? Bora aprender mais […]
ChatGPT: o que é, como usar, dicas e como acessar login
ChatGPT é uma ferramenta de processamento de linguagem natural (NLP) baseada na arquitetura GPT-3.5, desenvolvida pela OpenAI. Sua criação representa um marco significativo no campo […]
