Skip to content

Voice-captured memory · DynamoDB vector search

EchoBrain

The Second Brain for Developers

Press ⌥Space and speak — or store data via agents like Claude CLI, Codex CLI, and Antigravity CLI. Three weeks later, ask for it in words you never used — and get it back.

No release is tagged yet — the button opens the releases page. Builds are ad-hoc signed, not notarised.

Say it

⌥Space opens the microphone. Speech is transcribed on your machine, by whisper.cpp over Metal — the audio never leaves it.

The problem

The context dies with the session

Gemini for Mac, the Claude and ChatGPT desktop apps, and terminal tools like Claude CLI, Codex CLI, and Antigravity CLI all share one limitation: you tell them something today and tomorrow they know nothing about it.

“We picked a DynamoDB vector index over OpenSearch because of the per-byte cost.”
  • Assistants forget

    Every session starts empty. What you explained yesterday is gone, and you explain it again.

  • Notes need the right word

    Full-text search only finds what you can already phrase. The note you cannot name is the note you cannot reach.

  • EchoBrain keeps it

    What you say becomes a memory searchable by meaning — so “why didn’t we go with OpenSearch?” finds the sentence above, sharing almost none of its words.

In the app

Two seconds to capture. One question to get it back.

The transcript lands in the capture field for you to confirm before anything is stored — transcription misreads names, and a memory you never saw is one you cannot correct.

EchoBrain⌥Space

Features

Built for the way you actually think out loud

Everything here is in the shipped code. Nothing on this page is a mockup of a feature that does not exist yet.

  • Speak, don’t type

    ⌥Space — the shortcut Raycast and the Claude and Gemini desktop apps use — raises the window and toggles dictation. Speak, press it again, confirm.

    whisper.cpp · large-v3-turbo · Metal · on-device

  • Search by meaning

    Recall is real vector search, not keyword matching. Every hit shows how close it actually was, so a bad result reads as a bad search rather than a confident wrong answer.

    COSINE distance, inverted once, in the domain

  • Conversation mode

    The microphone stays open. An endpointer decides when you stopped talking, and talking over the answer stops it mid-word — that one behaviour is what separates a conversation from a phone menu.

    streaming frames · endpointing · barge-in

  • It knows whose voice

    An enrolled voice print drops what the television said and stamps who spoke onto the memory. It is not a lock, so it is wired to exactly those two things — and pressing ⌥Space is never filtered.

    off until you enrol it

  • Free unless you ask out loud

    Capture and search cost one embedding. With no answer model configured — the default — the app never spends a token at all. Spoken questions are the one path that reaches a model.

    a similarity floor gates the model, and sources are always shown

  • A hexagon the compiler enforces

    The core crate has no Tauri, no cpal, no SQLite and no AWS. An accidental import fails the build instead of quietly eroding the boundary — and the frontend mirrors it, so the whole UI runs with no Rust toolchain and no AWS account.

    core · audio · llm · app · ui

How it works

From a sentence to a neighbourhood

The app accesses and searches memories stored locally or recorded by terminal agents. For agents (Claude CLI, Codex CLI, Antigravity CLI) to access or store memories, installing the MCP server is required.

  1. Microphone

    cpal captures, rubato resamples to 16 kHz mono.

  2. Transcription

    whisper.cpp on Metal, entirely on your machine.

  3. Routing

    Cue phrases decide store or ask — before any model, so routing never costs a token. The guess shows as an editable chip.

  4. Embedding

    The sentence becomes a vector via the memory API.

  5. DynamoDB

    Vector and record land in the same item. Recall searches it.

Search is eventually consistent, so a capture appears immediately as “indexing” and a reconciler promotes it. A UI that hid the memory until the index caught up would just look broken.

Architecture

A client, not a backend

There is no backend code in this repository — no embedding code, no AWS SDK for storage. EchoBrain is a third driving adapter on the memory service port, next to the Lambda and the MCP server which integrates the same semantic memory into terminal agents (Claude CLI, Codex CLI, and Antigravity CLI) via the Model Context Protocol (MCP).

Lambda

HTTP API

MCP server

stdio, for agents (Claude CLI, Codex CLI, Antigravity CLI)

EchoBrain

macOS

MemoryService

the port, in agent-memory-core

HTTP + SigV4

API Gateway → Lambda → DynamoDB + Bedrock

The short dependency list in the core crate is the architecture. Components talk to a gateway interface, which is why the entire UI can be developed against fixtures with no network and no cost.

Install

Get it running

macOS today.

Download for macOS

macOS 13 Ventura or later · Apple Silicon or Intel

Read this before you download

No release is tagged yet, so the button opens the releases page. When one lands, the build is ad-hoc signed and not notarised — Gatekeeper will refuse it on any Mac but the one that built it. You can bypass this by removing the macOS quarantine attribute with `xattr -d com.apple.quarantine EchoBrain.app` (and granting executable permission with `chmod +x`), though building from source remains the supported path until notarisation is set up.

Configuration

A file rather than environment variables: an app opened from the Finder inherits no shell profile. Every field is optional — leave the answer model out and the app never spends a 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

Where we are

Verified end to end against the deployed API. Clippy clean with warnings denied, 174 tests, static export building.

  1. 0Walking skeletondone

    Workspace, core, UI and Tauri wired to the real API.

  2. 1⌥Space dictationdone

    cpal → rubato → whisper-rs on Metal.

  3. 1.5Voice answersdone

    Spoken answers over Bedrock, record-or-ask routing, settings.

  4. 2.5Conversation modedone

    Streaming frames, endpointing, barge-in, follow-up window.

  5. 2Journal and librarydone

    SQLite journal, library view, reconciler, rating and deactivation.

  6. 3Native panel

    NSPanel, vibrancy, menu-bar icon, animation.

  7. 4Wake word

    And the embedding model behind speaker identity.