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
Voice-captured memory · DynamoDB vector search
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
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.”
Every session starts empty. What you explained yesterday is gone, and you explain it again.
Full-text search only finds what you can already phrase. The note you cannot name is the note you cannot reach.
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
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.
Features
Everything here is in the shipped code. Nothing on this page is a mockup of a feature that does not exist yet.
⌥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
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
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
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
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
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
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.
cpal captures, rubato resamples to 16 kHz mono.
whisper.cpp on Metal, entirely on your machine.
Cue phrases decide store or ask — before any model, so routing never costs a token. The guess shows as an editable chip.
The sentence becomes a vector via the memory API.
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
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
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
macOS today.
macOS 13 Ventura or later · Apple Silicon or Intel
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.
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.
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 authorizationStatus
Verified end to end against the deployed API. Clippy clean with warnings denied, 174 tests, static export building.
Workspace, core, UI and Tauri wired to the real API.
cpal → rubato → whisper-rs on Metal.
Spoken answers over Bedrock, record-or-ask routing, settings.
Streaming frames, endpointing, barge-in, follow-up window.
SQLite journal, library view, reconciler, rating and deactivation.
NSPanel, vibrancy, menu-bar icon, animation.
And the embedding model behind speaker identity.