murmur
Health Uyari
- License Γ’β¬β License: AGPL-3.0
- Description Γ’β¬β Repository has a description
- Active repo Γ’β¬β Last push 0 days ago
- Low visibility Γ’β¬β Only 5 GitHub stars
Code Basarisiz
- rm -rf Γ’β¬β Recursive force deletion command in .claude/hooks/selftest.sh
Permissions Gecti
- Permissions Γ’β¬β No dangerous permissions requested
Bu listing icin henuz AI raporu yok.
ποΈπ§ Local-first macOS meeting notes with an on-device brain β records, transcribes (whisper.cpp) & reasons over your meetings entirely on your Mac. Talk to it live via @brain threads, ask across your whole history, and query it from Claude over a read-only MCP server. Obsidian-native Β· AGPL-3.0.
Murmur
A local-first macOS app that records your meetings, transcribes & reasons over them entirely on your Mac,
and gives you an AI you can talk to live, in the meeting β and across everything you've ever recorded.
β¬οΈ Download Β· Quick start Β· The brain Β· Features Β· Architecture Β· MCP Β· Privacy
Most meeting tools just transcribe and ship your audio to someone else's cloud. Murmur gives your
meetings a brain β and keeps it on your Mac. While you're still in the call you can jot a note, drop@brain in front of a question, and get a grounded answer with sources drawn from everything
you've recorded before β the recording never stops. After the call it writes a clean structured note
and remembers it forever: searchable, linkable, and queryable by your own AI. With Ollama or the
bundled on-device model, none of it ever leaves the device.
ποΈ Record β π§ transcribe & reason on-device β π¬ ask your brain β live in the meeting β
π and across your whole history. (And yes β every note is plain Markdown you own.)
Mid-meeting: take notes as you go, type @brain + a question to open a thread, and the
on-device brain answers β grounded, with sources β without ever pausing the recording.
β¨ Why Murmur is different
- π§ A brain you can talk to β mid-meeting. Type
@brainin your notes (or tap the mic) and the
on-device assistant answers out of your meeting history, live, with citations, in a Slack-style
thread β while the recording keeps rolling. - π€ The agent proposes, you accept. The brain never writes to your notes on its own. When it drafts
something useful it offers a quiet "β Add to notes" β nothing enters your notes unless you say so. - π Truly local-first. The brain, transcription, and search all run on your Mac. Pick a fully-local
stack (Ollama or the bundled GGUF model) and nothing ever leaves the device. - π Memory across every meeting. Ask one question and get an answer synthesized from months of calls,
each claim linked back to the meeting it came from. - π§ It hears the whole call. Your mic and the other side's system audio are captured and transcribed
separately, then merged into a Me / Others transcript. - π§© One store, three surfaces. An encrypted SQLite DB is the single source of truth; the app, a
read-only MCP server, and your Obsidian vault are thin readers β never diverging copies. - π You own the output. Notes are plain Markdown (and Obsidian-friendly) β no proprietary format, no lock-in.
- πͺ A Liquid Glass shell (macOS 26). Floating glass rails that collapse into an Apple TV-style pill bar,
a βK spotlight over your whole vault, βN for a new note, light/dark, and a transparency slider that
honors macOS "Reduce transparency".
π Quick start
Requires macOS 13.4+ (Apple Silicon or Intel).
Just want to use it? β Download the latest signed & notarized build,
drag Murmur.app to Applications, and open it. A first-run wizard walks you through the Whisper model,
an AI provider, and (optionally) an Obsidian vault.
To run the in-meeting brain fully offline, download an on-device model (Bielik / Qwen) and turn on
realtime reactions in Settings β it gives grounded, cited answers on device. The full model-driven
agentic loop (the brain chooses which tools to call) runs with a provider connection β including
local Ollama β while a downloaded on-device model uses a grounded retrieval floor. See
Providers & the on-device brain.
Building from source? Jump to Development.
π§ The brain β your meeting memory you can talk to
This is the part most note-takers don't have. Murmur treats everything you record as one brain:
your transcripts and notes are the memory, an on-device (or cloud) model is the reasoning, and internal
retrieval + consent-gated connectors are the tools. You talk to it live in the meeting, ask it across
your whole history, and browse what it knows β all over the same store.
π¬ Live, in the meeting
- Notes-first, thread-native. The record screen is a calm notes surface. Jot as you go; drop a
standalone@brainto open an anchored, multi-turn thread where the assistant answers β the
recording bar stays out of the way at the top. - Voice or text, one loop. Ask by voice (wake phrase or a single Ask AI click, click-to-stop
so it catches your whole question) or by typing@brainβ both funnel through the same brain. With a
provider connection (including local Ollama) it's a model-driven agentic loop that decides
which gated tools to call, with a live tool-trace ("Searching notesβ¦ β"); a downloaded on-device model
answers from a grounded retrieval floor instead. - Grounded, not hallucinated. Every answer is retrieved from your own transcripts and notes first,
then summarized β with the source meetings cited as chips you can open. - β¨ Ask brain on any note. Hover a note and hit β¨ ask brain to open a thread seeded from that
line β the note stays a note; the thread just hangs under it.
ποΈ The /brain hub β what it knows
Everything the assistant can reason over, in one place β meetings, imported documents, and typed notes.
- One page for your whole brain. A status header counts your (visible) meetings, documents,
and notes, shows whether semantic search is on, and links straight to Ask. - Expand it with your own sources. Drop in Markdown/text documents, or paste a quick note β
each is chunked and (when the on-device embedding model is present) vector-indexed into the same brain,
gated by the same per-folder lock. - See the connections. A collapsible graph shows how people and projects link across everything.
π Ask across every meeting
Ask Your Vault β one question, answered across months of meetings, every claim linked to its source.
- Ask Your Vault β full-page grounded chat across all your (visible) meetings, answered by the same
agentic loop, every answer linked back to the meetings it came from. Single-meeting chat cites
time-indexed transcript segments. - Hybrid retrieval β keyword search (FTS) fused with on-device semantic vectors
(multilingual-e5-small, 384-dim,sqlite-vecKNN, Reciprocal Rank Fusion). On device and on by
default; it downloads a ~470 MB on-device embedding model from Settings to activate, and falls back to
keyword search until then. - Related meetings (semantic neighbors) and entity dossiers that synthesize a person or project
across everything they touched.
People & Projects, extracted automatically and counted β sealed folders stay hidden.
π§ Features
ποΈ Capture & transcribe
- Dual-stream recording β microphone (
cpal) plus the other side's system audio (a Swift
ScreenCaptureKit sidecar, or a Core Audio process tap on macOS 14.4+), transcribed independently
and merged by host wall-clock into Me / Others. - On-device Whisper (
whisper.cppviawhisper-rs, Metal). A Fast pass drives ~3-second live
captions while you record; an Accurate beam-search pass (anti-hallucination gates) runs once after you stop. - Live captions are mic-only until you stop. During the call, the live captions (and the live
@brain
context) transcribe your microphone; the other side's system audio is captured in parallel and folded
into the full Me / Others transcript only after you stop. - Best-effort extras, graceful by default β Silero VAD, optional speaker diarization of the
others stream, offline echo cancellation, and opt-in hi-fidelity native-rate masters; each degrades
cleanly when its model is absent. - Guardrails β a 4-hour cap, live mic-mute that preserves sync, an input-device picker, and detection
of a running meeting app (Zoom / Teams / Webex). Whisper sizestinyβ¦large-v3(defaultsmall,
~470 MB β a RAM-safe default; all sizes stay selectable) download once from Settings.
The signature floating recorder bar (ββ§R) β record (and ask) from anywhere.
π Notes & structure
![]() |
![]() |
| A structured note β summary, decisions, action items, quotes. | The merged Me / Others transcript, time-indexed. |
- Structured notes generated from the transcript: summary, decisions, action items, and notable quotes β
re-summarize any meeting with a different model. - Recipes turn a transcript into emails, decision logs, or action lists; action items can push to Apple Reminders.
- Timeline & more β an interactive speaker + topic timeline, pin-a-moment block refs, weekly
digests, and deterministic cross-meeting Topic Threads. Your on-device macOS calendar
(EventKit, zero-OAuth) is reachable on demand as the brain'scalendar_lookuptool when you ask in
Ask /@brain(e.g. "who's in my next meeting?") β there is no standalone proactive brief screen.
![]() |
![]() |
| Library β folders, tags, and lock-aware rows (π sealed folders). | Totals, a 30-day activity chart, and a status breakdown. |
π Yours to keep
A nice-to-have, not a lock-in: every note is also exported as plain Obsidian Markdown β atomic .md
with YAML front-matter, [[wikilinks]], obsidian:// deep-links, and a .canvas board option. People and
projects mirror into vault stub notes, so your Obsidian graph builds itself. Don't use Obsidian? The files
are still just Markdown you own. (The encrypted SQLite DB β not the vault β is the source of truth.)
ποΈ Architecture
Murmur is a Tauri 2.11 desktop app: a Rust core (crate murmur, lib meetnotes_lib, bin Murmur)
talks to an Angular 18 zoneless frontend over Tauri IPC. There's no NgRx β every screen is a standalone
signals component calling a single IpcService. The Rust side captures, transcribes, summarizes, and
persists everything to one SQLCipher-encrypted SQLite database β the canonical store. Over it sit the
brain (a grounded RAG + reasoning layer powering the in-meeting assistant and Ask β full model-driven
agentic tool-choice with a provider connection incl. local Ollama, a grounded retrieval floor on a
downloaded on-device model), plus three read surfaces: the app UI, a read-only MCP server, and your
Obsidian vault.
flowchart LR
mic["ποΈ Mic (cpal)"] --> asr
sys["π System audio<br/>ScreenCaptureKit / Core Audio tap"] --> asr
asr["π£οΈ whisper.cpp Β· Metal<br/>Fast live + Accurate batch"] --> merge
merge["β±οΈ Wall-clock merge β Me / Others"] --> db
merge --> redact
redact["π‘οΈ Redaction firewall"] --> prov
prov["βοΈ Summarizer<br/>claude_code Β· anthropic Β· ollama Β· gateway"] --> db
db[("ποΈ SQLite + SQLCipher<br/>per-folder AES-256-GCM lock")]
db --> brain["π§ Brain (grounded RAG + reasoning)<br/>GGUF/cloud reasoner Β· e5 vectors"]
brain --> live["π¬ In-meeting @brain threads"]
brain --> ask["π Ask across all meetings"]
db --> mcp["π§© MCP server Β· 127.0.0.1:8765"]
db --> vault["π Obsidian vault (.md Β· .canvas)"]
The pipeline, stage by stage: capture (mic + optional system audio) β resample/segment β transcribe
each stream on-device β merge by wall-clock into Me/Others β persist to the SQLCipher DB β summarize (any
cloud-bound text first passes the redaction firewall) β export the note atomically. Status events stream to
the UI at each stage.
π§© The MCP server
Murmur runs a read-only Model Context Protocol server on127.0.0.1:8765 so Claude Desktop / Claude Code (or any MCP client) can query your meeting memory
with zero egress β your notes stay on your Mac, and the client reads them locally.
- Six tools β
search_meetings,get_meeting,list_recent_meetings,search_semantic,get_open_commitments,get_entity_dossier. - Same visibility gates as the app β sealed-and-not-unlocked meetings are invisible here too, routed
through the exactvisibility_clausethe UI uses. - Token-protected by default β a bearer token is required unless you turn it off.
// ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"murmur": { "url": "http://127.0.0.1:8765" }
}
}
The MCP config is shown (with a copy button) in Settings β Privacy & Integrations.
π Privacy & the lock model
Privacy isn't a setting in Murmur β it's the architecture. The brain, transcription, and search are designed
to run without a network.
Murmur tells you, in plain language, exactly what leaves your Mac.
What runs where β honestly:
| Brain / provider | Where it runs | Does meeting text leave your Mac? |
|---|---|---|
| On-device brain (Bielik / Qwen GGUF) | Fully local | No. Grounded reasoning + the in-meeting assistant, on-device. |
| Ollama | Fully local | No. Nothing leaves the device. |
| Claude Code (default summarizer) | Local CLI β Anthropic's cloud | Yes β the redacted transcript is sent to Anthropic. |
| Anthropic API (BYO key) | Direct HTTPS β Anthropic | Yes β the redacted transcript is sent to Anthropic. |
| AI Gateway (BYO OpenAI-compatible) | HTTPS β your gateway | Yes β the redacted transcript is sent to your endpoint. |
- π§± Two encryption layers at rest. The whole SQLite DB is SQLCipher-encrypted (key in the
macOS Keychain). On top, a per-folder lock adds AES-256-GCM content keys wrapped by a master KEK
released only by a Touch ID prompt β no app-side password. - πͺ Every read is gated. A sealed-and-not-unlocked meeting leaks nothing β across the app, search, the
graph, MCP, and even the audio asset path. Its title shows asπ Locked. - β»οΈ Seals verify-before-destroy. Murmur proves the ciphertext decrypts before it ever blanks the
plaintext β content is never lost β and re-locking is fully reversible. - π‘οΈ Redaction firewall. Emails, card-like numbers, and phone numbers are always scrubbed before any
cloud call; person-name redaction kicks in when the on-device NER model is installed. - β
Cloud egress is fail-closed. No meeting text reaches a cloud provider until you grant a one-time,
revocable consent β a flag a normal settings save can't flip. - π Content-free egress ledger. A local ledger records metadata only β call counts, tokens, and how
many PII items were scrubbed β never the text that left. - πΊ Screen-share aware. A best-effort watcher can auto-relock sealed folders and zeroize the cached key
the moment screen sharing is detected.
β οΈ Honest caveat: Touch ID, lock-at-rest, and screen-share auto-relock only truly verify on a
Developer-ID-signed build (the published releases). An unsigned local dev build degrades biometrics to
a permissive stub β handy for development, not a security guarantee.
π€ Providers & the on-device brain
![]() |
![]() |
| One provider seam β set a connection up once, then pick per feature. | The on-device brain registry + on-device intelligence toggles. |
The summarizer is one SummarizerProvider trait with swappable backends β claude_code
(default), anthropic (BYO Keychain key), ollama (local), and a BYO OpenAI-compatible gateway
(LiteLLM / Kong / Portkey / vLLM). Per-feature roles (Notes / Ask / Live) can each point at a different
connection. Separately, the heavy on-device ML β the mistralrs GGUF brain, the candle e5 embedder,
and the candle DeBERTa NER redactor β is always compiled in (no cargo feature flags) and activates at
runtime only when its model files are present, otherwise degrading to a clean no-op.
- π§ On-device reasoners. A curated GGUF registry β Bielik-11B, Qwen3-14B, Qwen2.5-3B β runs
locally viamistralrs(Metal). Download one and the on-device brain activates with grounded, cited
answers; nothing leaves your Mac. The full model-driven agentic tool-choice runs with a provider
connection (including local Ollama). - π Optional live web (off by default). A consent-gated Brave connector (BYO key) lets the brain
reach the web when you ask it to; web hits are shown distinctly as "via web", and queries are redacted
before they leave.
π οΈ Development
Toolchain- Rust (
rustup, toolchain pinned to 1.96.0) βcurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - Node + npm
- cmake + clang / Xcode CLT β builds
whisper.cppand the Metal toolchain (brew install cmake pkg-config,xcode-select --install)
git clone https://github.com/murmur-io/murmur.git && cd murmur
npm install
source ~/.cargo/env
# Dev run. MURMUR_DEV_DEK uses a fixed dev DB key so each rebuild doesn't re-prompt
# the Keychain. No --features needed β the ML/brain stack is always compiled.
MURMUR_DEV_DEK=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef npm run dev
# β Angular on http://localhost:1420, MCP on 127.0.0.1:8765
A cold first build compiles the full
mistralrs/candleML tree (hundreds of MB) β let it finish;
the incremental loop is fast once warm.
Quality gates
( cd src-tauri && cargo test --lib ) # ~128 fast unit tests (the inner loop)
npx ng lint
npx ng build
bash scripts/ci.sh # full gate: clippy -D warnings + tests + lint + build + headless E2E
Screenshots in this README are the real Angular UI rendered from the shipping code, populated with a
privacy-safe demo dataset (no private meetings). Regenerate them withscripts/screenshots.
π§± Tech stack
| Layer | Tech |
|---|---|
| Shell | Tauri 2.11 Β· Rust (edition 2021, toolchain 1.96) Β· macOS-first, universal (arm64 + x86_64), min macOS 13.4 |
| Frontend | Angular 18.2 zoneless Β· standalone + signals Β· TypeScript 5.5 Β· marked + DOMPurify Β· no NgRx |
| Audio | cpal Β· whisper-rs (Metal) Β· ScreenCaptureKit / Core Audio tap Β· sherpa-onnx diarization Β· offline AEC |
| On-device brain | mistralrs (GGUF reasoner) Β· candle (e5 embeddings + DeBERTa NER) Β· sqlite-vec |
| Storage / crypto | rusqlite + SQLCipher Β· aes-gcm + zeroize Β· macOS Keychain Β· Touch ID (LAContext) |
π Project layout
murmur/
ββ src/ Angular 18 frontend (standalone, zoneless, signals)
β ββ app/
β ββ core/ ipc.service.ts Β· models.ts Β· recorder.store.ts Β· meeting-conversation.store.ts
β ββ features/ record Β· library Β· detail Β· folders Β· graph Β· ask Β· brain Β· analytics Β· settings Β· onboarding Β· bar
ββ src-tauri/ Rust core (Tauri 2)
β ββ src/ commands.rs Β· pipeline.rs Β· reason.rs Β· embed.rs Β· mcp.rs Β· crypto.rs Β· audio/ Β· transcribe/ Β· summarize/ Β· storage/ Β· secrets/ Β· export/
ββ docs/ design notes, research, branding, screenshots
πΊοΈ Status
Murmur ships at v0.6.4 β a signed, notarized macOS app. The full record β transcribe β summarize
pipeline, the conversation-first record screen with in-meeting @brain threads, the on-device brain +
semantic search, the /brain knowledge hub, the per-folder Touch ID lock, the knowledge graph,
Ask-Your-Vault, and the MCP server are all implemented. Some capabilities β live ScreenCaptureKit capture,
the Touch ID prompt, and screen-share auto-relock β can only be fully exercised on a signed build on a
real Mac, and are documented as such.
π License
Murmur is open source under the GNU AGPL-3.0 license.
π macOS-first Β· π§ on-device brain Β· π local-first Β· π§© MCP-native Β· built with Tauri + Angular + Rust
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi





