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.
- Start a meeting. Musli records your microphone and (where the OS allows) system audio, transcribing as it goes.
- Type rough notes. Half-sentences, fragments, "follow up w/ dana pricing", whatever you'd scribble anyway.
- 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.
- 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.
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/transcriptionsendpoint. 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.
macOS (one line, no prerequisites):
curl -fsSL https://raw.githubusercontent.com/yoelgal/musli/main/install.sh | bashThat 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).
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 indist/. - Linux:
npm run dist:linux→ AppImage / deb indist/.
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.
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)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).
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 installworks on any machine without compilers. - AI layer: one
LlmClientfor 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.
- 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.
Speaker labels · note export · template sharing.
MIT. Bundled fonts (Newsreader, Schibsted Grotesk, Spline Sans Mono) are under
the SIL Open Font License; see src/renderer/src/assets/fonts/.