Pular para o conteúdo

Memória capturada por voz · busca vetorial no DynamoDB

EchoBrain

The Second Brain for Developers

Aperte ⌥Espaço e fale — ou salve dados por meio de agentes como Claude CLI, Codex CLI e Antigravity CLI. Três semanas depois, pergunte usando palavras que você nunca usou — e a recupere.

Ainda não há release publicada — o botão abre a página de releases. Os builds têm assinatura ad-hoc, sem notarização.

Fale

⌥Espaço abre o microfone. A fala é transcrita na sua máquina, por whisper.cpp sobre Metal — o áudio nunca sai dela.

O problema

O contexto morre junto com a sessão

Gemini para Mac, os apps de desktop do Claude e do ChatGPT, e as ferramentas de terminal Claude CLI, Codex CLI e Antigravity CLI compartilham a mesma limitação: você conta algo hoje e amanhã eles não sabem nada a respeito.

“A gente preferiu índice vetorial no DynamoDB a OpenSearch por causa do custo por byte.”
  • Assistentes esquecem

    Toda sessão começa vazia. O que você explicou ontem sumiu, e você precisa explicar de novo.

  • Notas exigem a palavra certa

    Busca textual só acha o que você já sabe formular. A nota que você não consegue nomear é a nota que você não alcança.

  • O EchoBrain guarda

    O que você fala vira uma memória buscável por significado — então “por que a gente não foi de OpenSearch?” encontra a frase acima, com quase nenhuma palavra em comum.

No aplicativo

Dois segundos para guardar. Uma pergunta para recuperar.

A transcrição cai no campo de captura para você confirmar antes de qualquer coisa ser guardada — a transcrição erra nomes, e uma memória que você nunca viu é uma memória que você não tem como corrigir.

EchoBrain⌥Espaço

Recursos

Feito para o jeito como você pensa em voz alta

Tudo aqui está no código que já roda. Nada nesta página é a maquete de um recurso que ainda não existe.

  • Fale, não digite

    ⌥Espaço — o mesmo atalho do Raycast e dos apps de desktop do Claude e do Gemini — traz a janela e ativa o ditado. Fale, aperte de novo, confirme.

    whisper.cpp · large-v3-turbo · Metal · no dispositivo

  • Busca por significado

    A recuperação é busca vetorial de verdade, não casamento de palavras. Cada resultado mostra o quão perto ele realmente ficou, então um resultado ruim se lê como uma busca ruim, e não como uma resposta errada com ar de certeza.

    distância COSINE, invertida uma única vez, no domínio

  • Modo conversa

    O microfone continua aberto. Um detector decide quando você parou de falar, e falar por cima da resposta a interrompe no meio da palavra — esse comportamento é o que separa uma conversa de uma URA.

    quadros em streaming · endpointing · barge-in

  • Ele sabe de quem é a voz

    Uma voz cadastrada descarta o que a televisão disse e carimba quem falou na memória. Não é uma tranca, então está ligada a exatamente essas duas coisas — e apertar ⌥Espaço nunca é filtrado.

    desligado até você cadastrar

  • De graça, a menos que você pergunte em voz alta

    Guardar e buscar custam um embedding. Sem um modelo de resposta configurado — o padrão — o app não gasta um token sequer. Perguntar por voz é o único caminho que chega a um modelo.

    um piso de similaridade barra o modelo, e as fontes sempre aparecem

  • Um hexágono que o compilador cobra

    O crate de domínio não tem Tauri, nem cpal, nem SQLite, nem AWS. Um import acidental quebra o build em vez de corroer a fronteira em silêncio — e o frontend espelha isso, então a UI inteira roda sem toolchain Rust e sem conta AWS.

    core · audio · llm · app · ui

Como funciona

De uma frase a uma vizinhança

O aplicativo acessa e busca memórias armazenadas localmente ou gravadas por agentes de terminal. Para que agentes (Claude CLI, Codex CLI, Antigravity CLI) acessem ou gravem memórias, é necessária a instalação do servidor MCP.

  1. Microfone

    cpal captura, rubato reamostra para 16 kHz mono.

  2. Transcrição

    whisper.cpp sobre Metal, inteiramente na sua máquina.

  3. Roteamento

    Frases-guia decidem entre guardar e perguntar — antes de qualquer modelo, então rotear nunca custa um token. O palpite aparece como um chip editável.

  4. Embedding

    A frase vira um vetor, pela API de memória.

  5. DynamoDB

    Vetor e registro caem no mesmo item. A busca percorre ele.

A busca é eventualmente consistente, então a captura aparece na hora como “indexando” e um reconciliador a promove. Uma interface que escondesse a memória até o índice alcançar só pareceria quebrada.

Arquitetura

Um cliente, não um backend

Não há código de backend neste repositório — nem código de embedding, nem SDK da AWS para armazenamento. O EchoBrain é um terceiro adaptador condutor sobre a porta do serviço de memória, ao lado do Lambda e do servidor MCP que integra a mesma memória semântica a agentes no terminal (Claude CLI, Codex CLI e Antigravity CLI) via Model Context Protocol (MCP).

Lambda

API HTTP

Servidor MCP

stdio, para agentes (Claude CLI, Codex CLI, Antigravity CLI)

EchoBrain

macOS

MemoryService

a porta, em agent-memory-core

HTTP + SigV4

API Gateway → Lambda → DynamoDB + Bedrock

A lista curta de dependências do crate de domínio é a arquitetura. Os componentes falam com uma interface de gateway, e é por isso que a UI inteira pode ser desenvolvida contra fixtures, sem rede e sem custo.

Instalar

Colocando para rodar

macOS hoje.

Baixar para macOS

macOS 13 Ventura ou superior · Apple Silicon ou Intel

Leia antes de baixar

Ainda não há release publicada, então o botão abre a página de releases. Quando houver, o build terá assinatura ad-hoc e não será notarizado — o Gatekeeper irá recusá-lo em qualquer Mac que não seja o que o compilou. Você pode contornar isso removendo o atributo de quarentena do macOS com `xattr -d com.apple.quarantine EchoBrain.app` (e garantindo permissão de execução com `chmod +x`), embora compilar do código seja o caminho suportado até que a notarização esteja disponível.

Configuração

Um arquivo, e não variáveis de ambiente: um app aberto pelo Finder não herda perfil de shell. Todo campo é opcional — deixe o modelo de resposta de fora e o app nunca gasta um token.

config.toml
endpoint = "https://memory-mcp-example.execute-api.us-east-1.amazonaws.com/"
region   = "us-east-1"   # the API's region — this is what SigV4 signs for
profile  = "rfsales"
github_login = "dmux"    # attribution only, never authorization

Status

Onde estamos

Verificado de ponta a ponta contra a API implantada. Clippy sem warnings (tratados como erros), 174 testes, export estático compilando.

  1. 0Esqueleto andantepronto

    Workspace, domínio, UI e Tauri ligados à API real.

  2. 1Ditado com ⌥Espaçopronto

    cpal → rubato → whisper-rs sobre Metal.

  3. 1.5Respostas por vozpronto

    Respostas faladas sobre Bedrock, roteamento guardar-ou-perguntar, configurações.

  4. 2.5Modo conversapronto

    Quadros em streaming, endpointing, barge-in, janela de acompanhamento.

  5. 2Diário e bibliotecapronto

    Diário em SQLite, visão de biblioteca, reconciliador, avaliação e desativação.

  6. 3Painel nativo

    NSPanel, vibrancy, ícone na barra de menus, animação.

  7. 4Palavra de ativação

    E o modelo de embedding por trás da identidade de quem fala.