Omnimind

Omnimind versão 0.2

Suas notas e o que a IA aprende com você, no mesmo lugar.

O Omnimind é a memória das suas IAs de código, em arquivos seus. Ele fica entre a IA e uma pasta do seu computador: entrega o que importa no início da sessão, registra o que você corrige e mostra tudo o que foi gravado, com desfazer.

  • 100% Rust
  • GPU nativa
  • local
  • sem nuvem
  • sem embeddings
Um universo de memórias Corpos em sete cores, uma por tema, agrupados por assunto e ligados por linhas finas. Uma luz viaja de um corpo ao seguinte, como a IA lendo o cofre. Arquitetura Rota Certa Como eu trabalho Saúde Leituras Marca Clientes Arquitetura Rota Certa Como eu trabalho Saúde Leituras Marca Clientes
Os temas de um cofre de exemplo. A luz é a IA lendo.

Uma pasta de Markdown que a sua IA lê e escreve.

Toda sessão de IA começa do zero. Você repete o gerenciador de pacotes, o formato do commit e aquela decisão de duas semanas atrás. O Omnimind guarda isso em arquivos seus e entrega o que importa quando a próxima sessão começa.

Nota
O que você escreve, em Markdown.
notes/
Memória
O que a IA aprende, com data, origem e autoridade.
memories/
Cofre
A pasta que guarda as duas. Uma pasta comum, sem conta e sem nuvem.
~/Omnimind

Três ideias sustentam o produto

  • A correção não depende da IA.Um hook guarda sua frase literal antes de o modelo decidir qualquer coisa.
  • A IA não fala por você sem prova.Só vira “disse a pessoa” o que uma citação literal, registrada no diário, sustenta.
  • Tudo é reversível.Cada mudança fica no diário, e uma sessão inteira se desfaz com um clique.

O cofre no disco

~/Omnimind/
├── brain.toml       nome e regras do cofre
├── notes/           suas notas em Markdown
├── memories/
│   ├── decision/    o que foi decidido
│   ├── preference/  como você gosta de trabalhar
│   ├── procedure/   como se faz
│   ├── concept/     o que algo significa
│   └── episode/     o que aconteceu
└── .omnimind/       privado e descartável
    ├── journal/     diário só de anexar
    └── snapshot.bin índice para abrir rápido

Uma sessão, do que você diz ao que fica no disco.

Dois caminhos saem da conversa. Os hooks anexam ao diário o que você disse, sem passar por modelo nenhum. O servidor MCP dá à IA quatro ferramentas para buscar, ler e gravar. Toda escrita de memória passa pelo mesmo portão.

Uma sessão por dentro Você conversa com a IA. Os hooks anexam sua frase ao diário. O servidor MCP manda as escritas da IA pelo portão. A memória vira um arquivo Markdown no cofre. O app mostra a mudança ao vivo. Na sessão seguinte, o resumo volta para a IA. só anexa ao diário próxima sessão: resumo inicial 1 Você conversa com a IA Claude Code ou GitHub Copilot 2 Hooks guardam sua frase literal, sem IA Servidor MCP 4 ferramentas, vive só na sessão 3 Portão de escrita recusa segredo, retém o suspeito 4 Cofre, uma pasta sua memories/ · um .md por memória .omnimind/journal/ · o diário 5 O app mostra ao vivo Atividade, com desfazer
  1. Você conversa com a IA.No Claude Code ou no GitHub Copilot, como já usa. No início da sessão, um hook entrega um resumo curto do que o cofre sabe.
  2. Hooks e MCP trabalham em paralelo.Quando você corrige algo, o hook grava a frase literal no diário. Ele só anexa e nunca bloqueia o cliente. O servidor MCP nasce com a sessão e morre com ela.
  3. O portão decide.Segredo é recusado. Texto que parece instrução para a IA fica em revisão. O resto entra com a autoridade que a citação sustenta.
  4. A memória vira um arquivo.Markdown comum, gravado por rename atômico. O evento vai para o diário com o texto de antes e o de depois.
  5. O app mostra na hora.A tela Atividade lista o que cada sessão mudou. Desfazer vale para um evento ou para a sessão inteira.
As quatro ferramentas que a IA recebe pelo MCP.
FerramentaPara quê
memory_searchBuscar em notas e memórias, com origem, estado e cobertura
memory_readAbrir o texto inteiro. Segredos saem redigidos
memory_writeGravar, editar, substituir, arquivar
memory_agendaListar o trabalho de consolidação pendente

O portão de escrita

App, CLI, MCP e hooks gravam memória por um único caminho, Brain::apply. As regras são código, não um pedido ao modelo.

O portão de escrita O pedido de escrita tem o texto bruto inspecionado. Com segredo, é recusado e nada é gravado. Se parece instrução e não veio de você, fica em revisão. O resto recebe autoridade, é gravado no disco e vira um evento no diário. sim sim não não Pedido de escrita app · CLI · MCP · hooks Inspeção do texto bruto, em todos os campos Tem segredo? chave, token ou senha Recusada nada é gravado Parece instrução? ordem para a IA, invisível ou origem externa Em revisão gravada, mas a IA não usa até você ver Autoridade sua, com citação literal; senão, da IA, com aviso Grava no disco temporário, sync e rename Diário e índice um evento; a busca já acha Daqui em diante, tudo tem evento no diário e pode ser desfeito.
ResultadoQuando
RecusadaO texto traz um segredo: formato conhecido de chave ou token, ou senha=. O conteúdo não vai nem para o diário.
Em revisãoNão foi você quem escreveu, e o texto traz caractere invisível, letra disfarçada ou algo que parece instrução: ignorar regras, esconder algo de você, comando de shell, envio de chaves. Também quando a origem é externa.
Memória da IAA escrita passou, mas sem uma citação sua que a sustente. Entra com aviso.
Memória suaUma citação literal sua, de ao menos 20 caracteres e registrada no diário, sustenta o texto.

A autoridade vem do transporte e do diário, nunca de um campo da requisição. Uma memória marcada à mão como sua perde esse status se o arquivo não tiver vindo de uma escrita do produto.

O portão é triagem, não garantia. Na última rodada de testes hostis, anterior ao redesenho, 5 de 108 variações passaram. Por isso a defesa principal é a origem: memória em revisão fica fora da busca, e só você pode liberar.

Três vistas do mesmo cofre.

O app abre no Grafo. As três vistas usam os mesmos dados e as mesmas sete cores de tema, sempre com o nome do tema ao lado. Quando a IA lê algo, você vê na hora.

Grafo em Feixes: sete temas ao redor de um círculo, cada um com sua cor e seu nome, e as ligações entre itens agrupadas em feixes que cruzam o centro.

Feixes

Temas ao redor de um círculo, com as ligações agrupadas por tema. Mostra como os assuntos se relacionam sem virar novelo.

Hierarchical edge bundling, Holten 2006
Grafo em Raízes: cada tema cresce do centro como uma raiz colorida, com ramos mais grossos onde há mais uso.

Raízes

Cada tema cresce do centro. Os ramos engrossam com o uso, e a leitura da IA acende o caminho.

Space colonization, Runions 2007

Universo novo

O cofre em três dimensões. Cada corpo é uma nota ou uma memória. Assuntos parecidos ficam perto, e as linhas de constelação são as ligações.

Quando a IA lê, uma luz viaja de um corpo ao seguinte.

  • Arrastargira o universo
  • Rolaraproxima e afasta
Grafo na vista Universo: notas e memórias como corpos num espaço em três dimensões, agrupados por assunto, em sete cores de tema, ligados por linhas finas de constelação.
O cofre inteiro, com cada tema no seu canto do espaço.
Vista Universo durante uma leitura da IA: uma luz percorre a linha entre dois corpos, e o caminho lido fica aceso.
Durante uma leitura: a luz liga um corpo ao seguinte.

Rust do disco à GPU. Nada roda com o app fechado.

Seis crates num workspace. A interface é própria: winit na janela, wgpu na GPU e cosmic-text no texto, sem framework de UI e sem WebView. Não há banco de dados nem processo em segundo plano.

Crates e dependências O crate app depende de gfx, graph, ed e core. O crate cli depende de core. O core lê e grava o cofre no disco. Os crates graph, ed e core não conhecem janela nem GPU. casca miolo lê e grava app janela, telas e vista do grafo cli CLI, MCP e hooks gfx GPU, cena e glifos graph geometria pura ed texto e Markdown core cofre, diário, busca e ciclo de vida um único caminho de escrita Cofre no disco notes/ · memories/ · .omnimind/ casca: janela, GPU, stdio e processos miolo: sem janela e sem GPU

Casca fina, miolo testável

As regras moram em crates que não conhecem janela nem GPU. O core concentra cofre, diário, busca e o único caminho de escrita. O graph recebe itens e ligações e devolve fitas de triângulos. O ed é o modelo do editor, feito para cada tecla ser testada contra um oráculo.

A casca liga isso ao mundo. O app cuida da janela e das telas. O cli é o binário omnimind: linha de comando, servidor MCP por stdio e hooks. Os dois usam o mesmo core, então o app e a IA seguem as mesmas regras.

core
Cofre, diário, busca, ciclo de vida e portão de escrita. Sem tokio e sem SQLite.
cli
CLI, servidor MCP e hooks num binário só.
app
Telas, vista do grafo e janela nativa.
gfx
GPU, cena instanciada e texto com atlas de glifos. Não sabe o que é uma nota.
graph
Geometria das vistas do grafo. Roda fora do quadro.
ed
Texto, seleção, desfazer e Markdown linha a linha.
Thread principal e thread de dados A thread principal só desenha quadros quando chega um evento. A thread de dados faz o trabalho de disco e avisa por mensagem. Entre um evento e outro, o app não desenha nenhum quadro. Thread principal eventos, quadro, GPU tecla salvo o grafo acende 0 quadros Cmd Msg Msg grava a nota lê o diário Thread de dados única dona do cofre
Cada risco é um quadro. Sem evento, não há risco.

O quadro nunca espera o disco

A thread principal só trata eventos e desenha. Uma thread de dados é a única dona do cofre: lê o diário, grava notas e devolve instantâneos prontos para desenhar. As duas conversam por canais.

O app redesenha sob demanda. Parado, ele não gasta um quadro: nem o cursor pisca. A geometria do grafo é montada em outra thread e desenhada numa textura que só muda quando os dados mudam.

A busca usa um índice invertido em memória, com BM25F e stemming em português e inglês, sem embeddings. Cada processo tem o seu, e o arquivo de instantâneo é descartável.

Números medidos

Medido num MacBook Air M2, com cofre fictício de 5.000 notas e 800 memórias. Fonte: docs/qa/limits.md, no repositório. O grafo foi medido sem janela, em Feixes e Raízes. Feixes com 10.000 itens passa do orçamento de 16,67 ms: p99 de 21,10 ms.
MedidaLimiteMedido
App instalado100 MB12 MB
Abrir o app, até o primeiro quadro2 s0,59 s
Memória do app em uso500 MB143 MB
Servidor da IA em repouso150 MB102,6 MB
Busca, p95100 ms32,8 ms
Escrita de memória, p9532,2 ms
Janela real, 300 quadros, intervalo p9960 Hz17,05 ms
Quadros em repouso, em 4 s00
Grafo com 2.000 itens, Feixes, p9916,67 ms7,28 ms
Grafo com 2.000 itens, Raízes, p9916,67 ms5,24 ms

A IA grava. Você vê, corrige e desfaz.

Em vez de pedir aprovação antes de cada memória, o Omnimind deixa a IA gravar e mostra tudo o que mudou. O que não serve, você desfaz.

O disco é a verdade
Notas e memórias são arquivos .md e valem por si. Dá para ler, editar e versionar com qualquer ferramenta. Apagar a pasta .omnimind/ perde histórico e índice, nunca conhecimento.
Desfazer por evento ou por sessão
Cada mudança de memória vira um evento no diário, com o texto de antes e o de depois. Desfaça um evento ou a sessão inteira, pelo app ou com omnimind undo.
Fila de revisão
Memória suspeita fica em revisão: está no disco, mas a IA ainda não usa. Só você libera, pelo app ou pela linha de comando.
Nada sai da máquina
Sem conta, sem nuvem e sem serviço ligado com o app fechado. O servidor MCP nunca chama um modelo. O que a IA lê do cofre entra no contexto da sessão dela, como qualquer arquivo do projeto.
Tela Atividade do Omnimind: sessões do Claude Code e do GitHub Copilot em ordem de data, com o que cada uma adicionou, atualizou, mesclou ou arquivou, e o botão Desfazer sessão ao lado de cada sessão.
Atividade: o que cada sessão mudou, com Desfazer sessão ao lado. Dados de um cofre de exemplo.

Baixe, abra e conecte.

Você precisa do Omnimind e de uma IA de código: Claude Code ou GitHub Copilot.

  1. Baixe o pacote do seu sistema.

    Os binários ficam na página de releases.

    SistemaEstado
    macOSPlataforma de referência, em Mac com Apple Silicon. É onde o app foi medido e testado.
    WindowsNovo. Gerado pelo GitHub Actions, ainda sem teste em máquina real.
    LinuxNovo. Gerado pelo GitHub Actions, ainda sem teste em máquina real.
  2. Abra o app e clique em Começar.

    No Mac, arraste Omnimind.app para Aplicativos antes de conectar: a conexão guarda o caminho do app. O cofre nasce em ~/Omnimind.

  3. Ligue o Claude Code.

    Em todos os projetos de uma vez:

    /Applications/Omnimind.app/Contents/MacOS/omnimind connect claude-code --global --brain ~/Omnimind

    Ou só no projeto da pasta atual:

    /Applications/Omnimind.app/Contents/MacOS/omnimind connect claude-code --brain ~/Omnimind --project .
  4. Ou ligue o GitHub Copilot.

    Na pasta do projeto:

    /Applications/Omnimind.app/Contents/MacOS/omnimind connect copilot --brain ~/Omnimind --project .

    Use --print para ver o que mudaria sem gravar nada. Cada arquivo alterado ganha uma cópia de segurança ao lado. No Windows e no Linux, troque o caminho pelo do binário omnimind que veio no pacote.

  5. Para desligar.

    Sai só o que o Omnimind colocou. O cofre não muda.

    /Applications/Omnimind.app/Contents/MacOS/omnimind disconnect claude-code --global