Nerso
Um assistente só serve se eu confiar nele. Então a confiança virou arquitetura: ele lembra com nível de certeza, avisa sem encher e pede permissão antes de escrever.
- papel
- autor único
- período
- abr–out 2026
- partes
- bot no Telegram · app de voz no Mac
- status
- em uso diário
- código
- privado
- Node.js
- Claude Agent SDK
- MCP
- Electron
01O problema
Minha vida roda em três frentes e numa dúzia de apps: tarefa no TickTick, documento no Notion, agenda, notas no Obsidian. O custo não era fazer as coisas. Era trocar de app e lembrar onde cada coisa estava.
Eu queria um lugar só para falar, de onde cada coisa fosse parar no lugar certo. Mas um assistente que esquece, inventa ou manda mensagem demais não ajuda: vira mais uma coisa para administrar.
O requisito de verdade era confiança.
02 · Arquitetura
Arquitetura.
O caminho de uma mensagem. Em vermelho, o ponto que nenhuma escrita externa atravessa sem regra.
03 · Decisões
O que eu decidi.
-
Uma fila, um turno por vez.
Dois agentes escrevendo no mesmo vault geram conflito de git. A fila FIFO resolve antes do problema existir. Pelo mesmo motivo, o bot e o Mac gravam observações em arquivos separados.
-
Hook, não instrução.
Escrita destrutiva e escrita em sistema externo passam por hooks
PreToolUse. Para o mundo de fora o padrão é propor e executar só depois da confirmação. O modelo pode esquecer uma linha do prompt; o hook não esquece. -
Captura sem modelo, destilação à noite.
Durante o dia, observações são gravadas de forma determinística. Às 23h10 um modelo destila tudo em JSON validado por schema: ou grava tudo, ou não grava nada. Duas falhas seguidas disparam alarme.
-
Silêncio é resposta válida.
As rotinas de vigia respondem
NADAquando não há o que dizer, e um coordenador limita quantas mensagens proativas chegam por dia. Assistente bom é o que não precisa ser silenciado. -
Custo como métrica.
Duas economias separadas. Primeiro, registro mecânico vai para o modelo rápido: o turno cai de US$ 0,47 para US$ 0,047. Segundo, retomar a sessão em vez de começar do zero corta o turno de US$ 0,51 para US$ 0,04. Cada turno tem teto de gasto e vai para um log de custo.
-
Conflito resolvido com rede de segurança.
Quando o vault diverge, o modelo faz o merge. Antes, os dois lados vão para backup; depois, uma checagem confirma que o resultado cresceu em vez de perder conteúdo.
04 · Memória
Memória com nível de confiança.
Cada fato é um arquivo Markdown com tipo (estado, decisão, preferência, precedente, princípio), domínio, confiança e data de revisão. Um índice gerado decide o pedaço da memória que entra em cada conversa nova.
05 · Rotinas
Sete rotinas.
As rotinas ficam declaradas numa nota do próprio vault. Mudo um horário pelo celular e o servidor obedece.
- 06:00
briefing do dia
agenda, tarefas e prazos numa mensagem só
- 7h–21h
vigia de prazos
a cada 30 minutos; responde NADA quando não há nada
- 19:00
follow-up
o que ficou aberto hoje
- contínuo
sinais vitais
lê só as datas dos arquivos. Sem modelo, sem token
- 23:00
índice do dia
o que entrou no vault
- 23:10
destilação da memória
JSON validado por schema; grava tudo ou nada
- dom 23:30
consolidação
decaimento, fusão de duplicados, teto de 300 fatos
06 · Nerso Voz
O mesmo Nerso, por voz, no Mac, e dá para ver ele trabalhando.
Wake word local (“Ei, Nerso”), detecção de fala, transcrição, resposta do Claude em streaming cortada por frase e voz sintetizada frase a frase. Dá para interromper no meio. São quatro níveis de operação (conversa, assistente, operador e dev), cada um com modelo, permissões e pasta próprios, e o nível volta sozinho quando a tarefa termina.
Um barramento de eventos tipado é a única fonte da interface, e cada dia fica gravado em JSONL reproduzível. O app foi construído por um loop de agentes: um orquestrador e até três subagentes em worktrees git temporárias. Nada entra sem passar, nesta ordem, por lint, typecheck, teste, build, smoke, teste de mutação, regressão de voz e auditoria de privacidade.
07 · Resultado
O que mudou.
2,0 s
do fim da minha fala ao primeiro áudio, na mediana (4,0 s no p95)
US$ 0,047
por turno de registro mecânico no modelo rápido, contra US$ 0,47 no modelo padrão
7
rotinas automáticas, declaradas numa nota editável pelo celular
301
commits do app de voz em 5 dias, todos passando pelos 8 gates
Sobre este caso
- O conteúdo do vault não aparece aqui. É a minha vida pessoal; o que interessa é a arquitetura.
- Custos medidos no log de custo do próprio Nerso, em outubro de 2026.
stack completa · código privado
- Node.js
- Express
- Claude Agent SDK
- MCP
- node-cron
- Whisper
- ElevenLabs
- Electron
- xterm.js