Memória e persona
Uma camada de arquivos sempre ativa + um backend externo por vez, ambos seguindo um ciclo de vida comum. O que é frequente e durável mora nos arquivos; o resto é re…
Camada de arquivos (sempre injetada)
Estes .md entram no system prompt a cada tarefa, nesta ordem de prioridade, cada um com um limite de caracteres configurável:
| arquivo | papel | limite |
|---|---|---|
| SOUL.md | valores, princípios (slot #1) | 6000 |
| VOICE.md | tom, estilo, léxico | 6000 |
| PERSONA.md | self-model: traços, expertise | 6000 |
| AGENTS.md | contexto do projeto | 4000 |
| USER.md | modelo do usuário | 4000 |
| MEMORY.md | fatos duráveis | 4000 |
Ciclo de vida do backend
Todo backend implementa o mesmo fluxo automático, espelhando o do Hermes:
- inject — contexto no system prompt.
- prefetch — antes de cada turno.
- sync — grava o turno depois da resposta.
- extract — destila fatos no fim da sessão.
- mirror — espelha as escritas do built-in.
- tools — busca/gestão próprias do backend.
Backends
| backend | como funciona |
|---|---|
| sqlite-fts5 | default híbrido: BM25 (insensível a acento) + recência + importância · embeddings opcionais |
| honcho | modela usuário e agente ao longo do tempo · remoto via Tailscale |
| holographic | HRR/VSA em numpy local (dim 1024) · sem servidor de embedding |
Busca híbrida e política de escrita
O recall no backend default não é só full-text. Cada item é pontuado por três sinais combinados: relevância léxica (BM25, insensível a acento), recência e importância (a categoria do fato). Quando o embedder está disponível, a similaridade semântica entra na mistura; quando não está, a busca degrada para BM25 puro sem mudar a interface. Toda memória injetada no prompt vem com uma citação [categoria · origem · confiança], então o modelo sabe de onde o fato veio.
Na escrita, uma política classifica cada fato (fato · preferência · decisão · skill · erro) e barra o efêmero/trivial antes de persistir — é o que evita o acúmulo de lixo que apodrece o contexto (context-rot). O okami memory add força a escrita (você é explícito), mas o fato ainda passa pela classificação.
O threshold é por modelo: comprime em ~72% da janela. Antes de comprimir, os fatos duráveis são promovidos para a memória de longo prazo (e voltam via recall). Compaction = promover + apontar, nunca esquecer — mesmo num modelo de 32K a conversa não perde contexto.
Identidade que evolui
Um observador lê cada fala sua e deduz traços de estilo (registro técnico, apelido, sarcasmo, pedidos explícitos). VOICE e PERSONA evoluem sozinhos quando o padrão cruza o limiar (min_count: explícito=1, inferido=2+). SOUL fica protegido como âncora anti-drift. Tudo com changelog append-only e /undo.

