murmur

mcp
Guvenlik Denetimi
Basarisiz
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.

SUMMARY

πŸŽ™οΈπŸ§  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.

README.md

Murmur β€” your meetings, with a brain, on-device

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.

version macOS 13.4+ on-device brain MCP server Tauri 2.11 Rust 1.96 local-first license AGPL-3.0

⬇️ 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.)

The conversation-first record screen: take notes while recording, drop @brain to open a thread, and the on-device brain answers with sources
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 @brain in 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.

First-run onboarding wizard

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

An @brain thread answered live with vault citations, on the conversation-first record screen

  • Notes-first, thread-native. The record screen is a calm notes surface. Jot as you go; drop a
    standalone @brain to 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

The /brain page: status header with counts, three knowledge-source cards, and a connections graph
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 β€” grounded Q&A with source citations across all meetings
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-vec KNN, 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 knowledge graph, automatically extracted and counted
People & Projects, extracted automatically and counted β€” sealed folders stay hidden.


🧭 Features

πŸŽ™οΈ Capture & transcribe

Live recording with on-device transcription, waveform, and live captions

  • 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.cpp via whisper-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 sizes tiny…large-v3 (default small,
    ~470 MB β€” a RAM-safe default; all sizes stay selectable) download once from Settings.

Floating always-on-top recorder bar
The signature floating recorder bar (βŒ˜β‡§R) β€” record (and ask) from anywhere.

πŸ“ Notes & structure

AI-generated structured note Me / Others transcript with timestamps
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's calendar_lookup tool when you ask in
    Ask / @brain (e.g. "who's in my next meeting?") β€” there is no standalone proactive brief screen.

Interactive speaker + topic timeline

Library β€” folders, tags, lock-aware rows Analytics dashboard
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 on
127.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 exact visibility_clause the 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.

Privacy & integrations settings β€” honest about what leaves the device, plus the MCP config
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

Provider seam β€” on-device and redacted-first cloud connections On-device brain model registry β€” Bielik / Qwen download cards
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 via mistralrs (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.cpp and 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 / candle ML 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 with
scripts/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)

Sonuc bulunamadi