Skip to content

yoelgal/musli

Repository files navigation

Musli: local-first AI meeting notes

Latest release Platforms MIT license

Your meetings, your machine, your bowl.

Musli sits with you in meetings, transcribes what's said, and tidies your rough notes into polished, structured ones. Think Granola, but everything lives on your computer. No accounts, no cloud database, no telemetry. The only thing that ever leaves your machine is the text you choose to send to the AI provider you configure.

Capabilities at a glance:

  • Search across all meetings. Full-text search over titles, notes, summaries, and transcripts. Results are ranked and excerpted.
  • Ask your whole history. Cross-meeting chat answers questions with cited excerpts from past meetings.
  • Calendar-linked meetings. Connect an ICS subscription or the system calendar; Musli shows today's events, links recordings to them, and generates a pre-meeting brief from past context.
  • Folders, people, companies. Organize meetings into folders, and browse everyone you meet (grouped by company) from the attendees on your calendar events.
  • Recipes. Saved chat prompts one slash away: type "/" in the chat composer to run a follow-up email draft, action items by owner, a decisions log, or your own.
  • AI note editing. Tell the AI how to revise your enhanced notes ("make the action items a table") and watch them rewrite in place, with one-click undo.
  • Attachments. Drop files and images onto a meeting; text files are folded into the AI context, images go along when your model supports vision.
  • Custom vocabulary. Teach the transcriber project-specific words and names to improve accuracy.
  • Segment deletion. Remove individual transcript segments from a meeting.
  • Local MCP server. Expose your Musli meeting history to Claude Desktop, Claude Code, or Cursor as a read-only MCP data source. Off by default; enabled and registered in one click from Settings.

How it works

  1. Start a meeting. Musli records your microphone and (where the OS allows) system audio, transcribing as it goes.
  2. Type rough notes. Half-sentences, fragments, "follow up w/ dana pricing", whatever you'd scribble anyway.
  3. Enhance. When the meeting ends (or any time), Musli merges your notes with the transcript using a template (Standard, 1:1, Interview, Customer call, Standup, or your own) and streams back clean Markdown notes, a summary, and a title.
  4. Ask. Chat with any meeting afterwards: "what did we commit to?"

Everything is stored in a local SQLite database. Audio is transcribed and discarded; Musli never keeps recordings.

Model setup: bring any vendor

Musli speaks the OpenAI-compatible wire format everywhere, so it is vendor-agnostic by construction. Open Settings in the app:

Notes & chat (LLM) has presets for:

Preset Notes
OpenRouter (default) One key, every major model. Default model anthropic/claude-sonnet-4.5, excellent at faithful note-merging. Get a key at openrouter.ai.
OpenAI gpt-4o-mini default, cheap and capable.
Ollama Fully local & free. ollama serve + e.g. llama3.1:8b. No key needed.
LM Studio Fully local. Point at the built-in server.
Custom Any OpenAI-compatible endpoint (Groq, Together, vLLM, …).

Transcription is independent of the LLM, with three modes:

  • Cloud: any OpenAI-compatible /audio/transcriptions endpoint. Presets for Groq (whisper-large-v3-turbo, very fast, generous free tier; the recommended default) and OpenAI (whisper-1).
  • Local: one click. Pick local mode and hit Install whisper; Musli downloads a portable whisper.cpp engine and a small English model (about 150 MB) into its own data folder, on macOS, Windows and Linux alike. Nothing ever leaves your machine, fully offline. (Your own whisper.cpp build works too; point the paths at it.)
  • Off: recording is skipped; Musli enhances purely from your typed notes.

Recommended hybrid: Groq for transcription + OpenRouter for notes, or go fully local with whisper.cpp + Ollama.

API keys are stored in the local database on your machine and are only ever sent to the provider you configured.

Install

macOS (one line, no prerequisites):

curl -fsSL https://raw.githubusercontent.com/yoelgal/musli/main/install.sh | bash

That downloads the latest release, puts Musli.app in /Applications and offers to launch it. No Node, no git, no Gatekeeper dialog (curl doesn't attach the quarantine flag that browsers do). Reinstalling/upgrading keeps your notes.

Prefer to do it by hand? Grab a .dmg from Releases (arm64 for Apple silicon, x64 for Intel), drag to Applications, then run xattr -dr com.apple.quarantine /Applications/Musli.app once (the builds are unsigned, so macOS quarantines browser downloads).

Windows: download Musli-<version>-setup.exe from Releases and run it. The builds are unsigned, so SmartScreen will warn; choose "More info → Run anyway".

Linux: from Releases, grab the .AppImage (chmod +x and run) or the .deb (sudo dpkg -i Musli-*.deb).

Build from source (any platform)

Prerequisites: Node.js 20+ (that's it: no native build tools needed; the database is WASM).

git clone https://github.com/yoelgal/musli
cd musli
npm install
npm run dist          # builds an installer for your platform into dist/
  • macOS: open dist/Musli-*.dmg, drag to Applications.
  • Windows: run npm run dist:win, then the installer in dist/.
  • Linux: npm run dist:linux → AppImage / deb in dist/.

System-audio capture (hearing the other side of a call without a bot) is best-effort and OS-dependent; macOS will ask for Screen Recording permission. When unavailable, Musli records mic-only and says so. Microphone permission is requested on first recording.

Development

npm run dev          # launch with hot reload
npm test             # full test suite (600+ tests)
npm run typecheck    # strict TS across main + renderer
npm run smoke        # build + boot the real app headlessly
npm run assets       # regenerate the app icon (pure-Node PNG renderer)

Design

Musli has its own design system, "Ink & Dawn": warm near-black ink slabs on lumen-cream paper, a Newsreader display serif, dawn-lavender accents, paper grain, hand-drawn icons and real brushed-ink illustration. Light theme is the open page; dark is the same book by lamplight. See docs/DESIGN.md. The logo is a single brushed mark (the bowl and the berry), and the app icon is rasterized from it by scripts/generate-assets.mjs (pure Node, zero deps).

Architecture

Electron + React 19 + TypeScript (strict). See docs/ARCHITECTURE.md for the full picture.

  • Storage: sql.js (SQLite compiled to WASM) flushed to a single file in the app's data directory. Zero native dependencies, so npm install works on any machine without compilers.
  • AI layer: one LlmClient for every vendor (OpenAI-compatible chat completions, SSE streaming) + pluggable transcription providers.
  • Audio: 16 kHz mono capture in the renderer, WAV-chunked every 20 s, transcribed incrementally so the transcript appears live.

Privacy

  • Meeting notes, transcripts, chats, templates, settings: local SQLite file (Settings → Data shows the path).
  • Audio: transcribed, never stored.
  • Files you attach to a meeting are stored in your local Musli database and never leave your machine, except inside the AI requests you explicitly trigger, sent only to the provider you configured.
  • Network calls: only to the LLM/transcription endpoints you configure. Configure local providers and Musli is fully offline.
  • The MCP server is off by default, local-only over stdio, and read-only; it exposes no write surface and makes no network calls.

Roadmap

Speaker labels · note export · template sharing.

Star History

Star History Chart

License

MIT. Bundled fonts (Newsreader, Schibsted Grotesk, Spline Sans Mono) are under the SIL Open Font License; see src/renderer/src/assets/fonts/.

About

Local-first AI meeting notes, like Granola, but everything lives on your machine

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors