↓ Ir para o conteúdo principal

A memória do Zeca

Versão documentada: v0.1.8

Tradução da página original em inglês, que é a referência se algo estiver diferente.

O Zeca pode lembrar de você, dos seus projetos e do que os seus agentes fizeram. Essa memória fica desligada até você ligá-la, é guardada neste computador, e só você a escreve.

Ligando
#

Ligue em Settings → Chat & voice → Memory → Zeca’s memory. O app então mantém um diário no vults.sqlite local por 90 dias: o tempo, os passos e as mudanças de cada turno dos agentes, a resposta de cada card com o comando ou caminho, e as linhas do chat do Zeca, com os segredos redigidos antes de qualquer coisa ser escrita. Os outros interruptores da seção aparecem quando este está ligado.

Desligada, nada da memória chega a um modelo (nenhum fato, nenhuma lembrança, nenhum diário): a Memory ao lado do Chat do Nest mostra só Zeca’s memory is off…, By project não mostra fatos da memória, e o /remember é recusado. Desligá-la para a escrita e mantém o que já foi escrito.

O que o Zeca lembra é um repositório git de pequenos arquivos Markdown em ~/.local/share/vults/memory/, cada mudança um commit. Settings → Activity → Clear history apaga o diário e o que vem dele, mas não essa pasta (o que ele apaga): para apagar os fatos dele, apague-a.

O que entra numa conversa
#

Quando uma conversa começa, a memória dele entra nela depois das instruções dele: quem você é, o que ele aprendeu, como falar com você, e a memória do projeto em que ela trabalha. Ela fica fixa a conversa toda; um fato adicionado nesse meio-tempo entra na próxima. Desligar a memória não a tira de uma conversa já em andamento; reaberta depois pela lista, ela começa sem os fatos dele.

Antes de cada mensagem, o app procura no diário e nos resumos dos dias o que as suas palavras tratam, neste computador, e até três trechos entram na mensagem como o bloco <memories>, contexto e nunca instruções. O chat de hoje fica de fora, e também tudo o que uma conversa disse depois de ler conteúdo de fora. Os trechos vão para o provedor do chat junto com a sua mensagem. O chat por API também pode pedir mais com a ferramenta recall, e sugerir um fato com o memory_propose, que só escreve uma proposta.

Escrevendo a memória dele
#

  • /remember <fato> no chat, com a memória ligada, guarda um fato no que o Zeca aprendeu; /remember project: <fato> no projeto em que a conversa está. /forget <palavras> remove o único fato que as contém (com vários, ele os lista).
  • O que o Zeca propõe espera na Memory ao lado do Chat do Nest, com para onde vai (um projeto pelo nome e pela pasta) e a mudança como um diff: Remember guarda, Turn down descarta.
  • A Memory também lista o que ele lembra, arquivo por arquivo com o quanto cada um está cheio, e o histórico: quem escreveu cada mudança (você, ou o Zeca com o seu sim) e Undo, que a desfaz numa mudança nova (recusado quando uma mudança depois mexeu no mesmo arquivo; nunca oferecido numa que o Vults não escreveu).

Um fato nunca entra duas vezes: o /remember e toda proposta são recusados quando outro fato já diz isso, sem contar maiúsculas, espaços e o ponto final, e o mesmo fato decidido no último mês não é proposto de novo. Uma proposta passa pela verificação da memória (nada de caracteres escondidos, palavras que falam com um modelo ou formatos de chave).

O que ele faz sozinho
#

Cada um é um interruptor em Settings → Chat & voice → Memory, desligado até você ligá-lo. O Haiku é o menor modelo do Claude Code, pelo seu claude e pela sua assinatura, sem ferramentas e sem nenhuma das suas configurações; cada chamada passa pelo portão de rede e pelo rastro local (Segurança).

RecursoInterruptorO que lêModeloRequisições por dia
Um resumo de cada dia passado (no máximo 2.000 bytes)A summary of each dayUm dia do diário, só os dias desde que você ligouHaiku8
Até três fatos para lembrar, quando você começa ou abre outra conversaSuggest what to rememberA conversa que você deixou, redigida, com pelo menos 2 mensagens suas e nenhum conteúdo de foraHaiku20
Junções, e um resumo da volta mostrado como While you were awayLet Zeca sleep on itO que ele lembra sobre você e entre projetos, e os resumos dos últimos 7 diasHaiku4
Lembrar pelo sentido, não só pelas palavrasRecall by meaningCada resumo, e cada mensagem que você mandanomic-embed-text num Ollama em 127.0.0.1nenhuma sai do computador

O resumo roda numa passada de hora em hora: cada dia passado sem resumo, até três por passada (ele alcança o atraso depois de dias fora), três tentativas por dia enquanto o app roda. Os embeddings rodam nessa passada, para cada resumo sem um, e antes de cada mensagem do chat (rode antes ollama pull nomic-embed-text).

O sono vem uma vez por dia, a partir das duas da manhã e enquanto nada está trabalhando. Mesmo sem o interruptor dele, ele propõe remover um fato que repete outro na mesma seção, sem modelo. Com ele, também propõe junções e escreve o resumo da volta, no seu idioma, marcado como a leitura dele dos resumos. Toda mudança espera o seu sim.

Memória de projeto
#

Activity → By project do Nest tem um card para cada repositório em que uma sessão trabalha: as pastas e os branches dele, as sessões, os seus pull requests e checks (do card do GitHub), e o que o Zeca lembra do projeto. Ele só lê este computador. Uma conversa que começa num repositório leva essa memória junto.

Compartilhando o AGENTS.md com o Claude
#

Quando um repositório tem um AGENTS.md (a memória de projeto que o Codex lê) que o CLAUDE.md dele não importa, o card dele oferece Share it with Claude…. Ele mostra a mudança (@AGENTS.md adicionado no fim do CLAUDE.md, @../AGENTS.md no fim do .claude/CLAUDE.md, ou um CLAUDE.md novo) e só a escreve quando você clica em Apply, sobre o mesmo arquivo que você viu, depois de um backup datado em ~/.local/share/vults/backups/. Aí o Claude Code e o Codex leem a mesma memória de projeto.

Pelo Claude Code
#

O chat entrega ao Claude Code o próprio servidor MCP do Zeca, vults-zeca, com --mcp-config (a sua configuração do Claude nunca é tocada): flock_list (as suas sessões agora), recall e journal_day (o diário dele), roost_memory (a memória do projeto) e memory_propose; só o flock_list com a memória desligada. O Claude Code pergunta com um card antes de cada chamada que as suas regras não permitem, e uma proposta ainda espera na aba Memory. Essas chamadas não marcam a conversa como tendo lido conteúdo de fora. O servidor é este app rodando de novo (vults --zeca-mcp), e não envia nada a lugar nenhum: o flock_list lê um retrato redigido das sessões da ilha que o app mantém enquanto roda e apaga quando fecha, e as chamadas do diário leem o vults.sqlite sem nunca atualizá-lo. O Codex só lê servidores MCP da própria configuração, então não os recebe.