stevyhacker/lokalbot

A local LLM workhorse that keeps a memory of your workday. On-device meeting notes, dictation, autocomplete, and recall for macOS. GPLv3.

36

stars

425

commits

Swift

primary language

Sep 10, 2026

updated

www.lokalbot.com
ai
apple-silicon
autocomplete
diarization
dictation
llama-cpp
local-first
local-llm
macos
mcp
meeting-notes
mlx
note-taking
on-device
privacy
speech-to-text
swift
swiftui
transcription
whisper

README

LokalBot icon

LokalBot

A local LLM workhorse that keeps a private memory of your workday. Open source, on-device by default.

Records both sides of meetings without a bot, turns conversations and the workday context you choose into searchable memory, and helps you recall decisions, draft follow-ups, dictate, and autocomplete in any app.

No account. No telemetry. No LokalBot cloud. Verify the local path yourself.

Download LokalBot for macOS

Free · Developer ID signed, notarized & stapled · Apple Silicon, macOS 15+ · all releases

Latest release macOS 15.0+ License: GPLv3

30-second feature demo with voiceover · Meetings, cited recall, Dictation, Autocomplete, daily summaries, and local privacy · open the MP4 directly

Features · How it works · Privacy — verify it · Download · FAQ · Build from source


The memory starts with meetings. Your mic is captured as Me and a Core Audio tap on the meeting app as Them, so speaker labels come free and no bot joins the call. LokalBot then produces a recap, separates decisions from action items, and links outcomes back to the audio that supports them.

The same private library connects four moves: Remember meetings and optional day context. Recall decisions with evidence. Write with Dictation and Autocomplete. Act through reviewable actions, fixed-scope local routines, exports, and approved Agent Mode sessions.

Network access is limited to model/runtime downloads, optional update checks, remote inference origins you explicitly approve, and network-capable Agent Mode commands you explicitly approve. Details in Privacy.

Why LokalBot

Bot-free captureTwo synchronized audio tracks record you and the meeting app without adding a participant to the call.
Outcomes, not transcript pilesReview decisions, action items, open questions, and the day-level tasks that still need attention.
Evidence attachedSearch by words or meaning, open the exact meeting or retained moment, and jump to the supporting audio.
Local by defaultBuilt-in transcription, summaries, search, and writing run on your Mac; remote inference is explicit and per-origin approved.
Free and auditableNo account or API key is required. The GPLv3 source and network traffic are both yours to inspect.
LokalBot super-app map: one on-device language model at the center, connected to meetings, cotyping autocomplete, chat, search, the day timeline, the agent CLI, and bring-your-own models

See it in action

Start with what needs attention. Today combines the day digest with reviewable meeting actions and one-click access to Ask, the Timeline, and Agent Mode.

LokalBot Today showing the day summary, digest tasks, and meeting actions that need attention

Turn a call into outcomes you can act on. Check off or reassign action items, review decisions, and jump from an outcome to its cited audio or transcript evidence.

LokalBot Meetings showing an audio player, reviewable action items, cited decisions, and a structured summary

Recall without leaving the app you are in. Quick Recall searches saved moments, captured text, and meeting transcripts from one shortcut.

LokalBot Quick Recall searching Redis across a saved Slack moment, captured screen text, and meeting transcripts

Understand the day as work, not raw telemetry. Timeline groups activity into work sessions and meetings; the raw capture remains available when you need exact evidence or cleanup.

LokalBot Timeline showing a day digest, grouped work sessions, meetings, and access to the underlying capture evidence
LokalBot Type showing the Autocomplete readiness check, in-app suggestion preview, and two-step rehearsal
Autocomplete — rehearse locally, then enable Cotyping in almost any app
LokalBot model settings showing the Transcribe, Think, and Autocomplete roles, recommended presets, and model storage
Model stack — see readiness and change each local role in one place

Captured at Retina resolution from the real macOS UI with a synthetic demo library. Click any image for the full-resolution frame; no personal meeting or screen data is shown.

Features

Remember

  • Records both sides of the call. Auto-detects Zoom, Teams, Meet, Slack, Webex, and FaceTime, then captures you and them on two synced tracks — no bot in the participant list.
  • Follows the call live. A live meeting view while you talk: quick notes that land in the finished meeting, plus an opt-in rolling transcript.
  • Transcribes locally. IBM Granite Speech 4.1 by default; Parakeet for speed (up to ~190× realtime in local benchmarks), Whisper for 99 languages, Qwen3-ASR for harder recordings.
  • Turns talk into outcomes. After processing, you get a TL;DR, decisions, action items, and open questions. Mark work done, reassign it, open it in Agent Mode, or jump to the supporting evidence.
  • Explains the day. Today surfaces the digest and open actions; Timeline groups activity into work sessions and meetings while preserving access to the raw evidence.

Recall

  • Search every word you've heard. Full-text and meaning-based search — jump straight to the audio behind any hit.
  • Chat with your meetings. "What did we decide?" answered from your library, with citations. Kokoro TTS can read answers aloud on-device.
  • Recall with evidence. Choose activity only, accessible text, or accessible text plus encrypted visuals. Search captured text by meaning, app, or date; open the exact retained moment behind an answer; save important moments; or inspect a work session down to its raw capture.

Write

  • Dictation — voice typing anywhere. Hold ⌥ Space, talk, release: transcribed on-device and pasted at the cursor. Pauses your music first; deletes the audio after. Opt-in.
  • Autocomplete (Cotyping). Ghost text appears as you type in almost any app; Tab accepts. The Type screen lets you test and rehearse the real local pipeline before enabling it system-wide. Opt-in; never reads password fields.

Act

  • Move reviewed work forward. Send a meeting action or today's open list into Agent Mode with its source context attached; file and shell access still follow the configured approval policy.
  • Automate drafts safely. Opt-in routines create local post-meeting follow-ups, stand-ups, weekly work logs, action rollups, and journal notes. They use fixed local scopes, write only to your chosen folder, and cannot run scripts, send messages, or contact services.
  • Private by construction. Accessible text is preferred and local OCR fills gaps. Private windows, excluded apps/domains, secure fields, and detected credentials fail closed; credentials force text-only retention. Optional pixels are AES-GCM encrypted and auto-delete after 14 days unless you explicitly save a moment. External screen-memory tools have an independent, time-scoped permission.

Power users: bring your own model (any GGUF, Ollama, an OpenAI-compatible server, or Apple Intelligence), run the embedded coding agent, or give your coding agents read-only library access — see For developers & agents. Full technical detail: DEVELOPMENT.md.

How it works

LokalBot's local-first pipeline: capture (mic as Me via AVAudioEngine, system audio as Them via a Core Audio process tap) → transcribe on-device → summarize with the built-in local model or an explicitly approved server → index locally in SQLite. Model and update downloads use the network.
  1. It notices the meeting. LokalBot automatically starts when it detects a call by default (configurable: auto / ask / manual), or you start it from the menu bar.
  2. It creates outcomes with evidence. The selected engines turn audio into a labeled transcript, structured recap, decisions, and action items. The built-in defaults run on-device; first use may include model downloads.
  3. It builds a local working memory. Meetings, outcomes, activity, and optional screen context land in local files and SQLite you can search, replay, review, or hand to trusted tools.

Example model stack and performance

This measured higher-capacity example occupies about 12.4 GB after every model below has been downloaded. It was tested on a 48 GB M4 Max MacBook Pro using LokalBot's bundled llama.cpp runtime with full Metal offload. It is not the default preset: the current Recommended stack uses the smaller LFM2.5 1.2B model for Autocomplete.

RoleModelQuantization / formatModel filesMeasured generation
TranscriptionIBM Granite Speech 4.1 2BQ4_K_M + F16 projector2.30 GBASR; use realtime factor
Summaries and chatQwen3.5 4BQ4_K_M2.74 GB~100 tokens/s
AutocompleteGemma 4 E4BUD-Q5_K_XL6.66 GB~78 tokens/s
Semantic searchQwen3-Embedding 0.6BQ8_00.64 GBEmbeddings; not generative
Speaker diarizationpyannote-community-1 via FluidAudioCore ML~0.10 GBDiarization; not generative

Explore the interactive benchmark summary and the recommended local model stack.

Generation speed varies with context length, thermals, and other workloads. Model files download on first use, so features you do not enable do not incur their full model footprint.

Embeddings live in SQLite with brute-force cosine similarity, because at personal scale brute force is instant.

Privacy — verify it

Privacy is the architecture. Audio, transcripts, summaries, embeddings, screenshots, and activity live in local files and SQLite under your account. There is no account or telemetry, and audio is never sent to a LokalBot service.

Depending on the features and backends you enable, LokalBot may make these outbound connections:

  1. One-time model downloads the first time you use a local engine — weights from Hugging Face, sherpa-onnx archives from GitHub. Once cached, those local engines no longer need network access.
  2. A backend you explicitly configure — point summaries, chat, or Agent Mode at Ollama or any OpenAI-compatible server and traffic goes only where you send it, after a per-origin approval. The built-in llama.cpp runtime is localhost-only.
  3. Agent Mode setup, if you enable it — a one-time, checksum-verified download of the Bun runtime and the lockfile-pinned pi package. The pi runtime disables its own telemetry and version checks; LLM requests stay local when you select the built-in backend.
  4. App updates via Sparkle — automatic checks are on by default for new installs and can be disabled in Settings; update downloads come from GitHub Releases.
  5. Agent Mode commands you approve — approved shell commands run with your macOS user permissions and can access any network destination available to your account. Their destinations and data handling are outside LokalBot's control.

To verify the built-in path, download the required models first, select the built-in backend, turn off automatic update checks, then run Little Snitch (or lsof -i -nP | grep LokalBot) while it records, transcribes, and summarizes a meeting. LokalBot should make no outbound connection during that processing cycle; approved shell tools are separate processes and may connect when you permit them.

App Sandbox is intentionally off — Core Audio process taps don't work sandboxed. That's why LokalBot ships as a notarized Developer ID app rather than through the App Store.

Full policy: PRIVACY.md · report a vulnerability privately: SECURITY.md

Download

Download LokalBot.dmg — free · all releases and notes

Developer ID signed, notarized, stapled, and verified by Gatekeeper. Release tooling automates the same sign → notarize → staple checks for future releases.

  • Apple Silicon Mac (M1 or later)
  • macOS 15.0 or later
  • Disk for the models you pick (~0.5–18 GB)

Drag to Applications and open. Expect Microphone and System Audio prompts on your first recording; the models you select download on first use, and built-in inference can then run offline.

Switching from a cloud notetaker?

The useful comparison is where capture, transcription, summaries, and stored data live, plus whether the source is auditable. Products and prices change quickly, so the dated, sourced comparisons are maintained separately: vs Granola · vs Rewind · vs Superwhisper · vs Hyprnote

FAQ

Does anything leave my Mac?

Audio stays on your Mac. Transcripts, summaries, screenshots, and workday context stay local with the built-in backend; if you approve a non-loopback Ollama or OpenAI-compatible origin, LokalBot sends that server the context required for requests. The app also connects for model/runtime downloads, optional update checks, and network access by Agent Mode commands you explicitly approve. See PRIVACY.md.

Is it really free — and will it stay free?

Free and open source under GPLv3 today, with no account, subscription, or telemetry. Copyleft means a future rug-pull would be hard by construction: any distributed fork must ship its source under the GPL too.

Which Macs — and why Apple Silicon only?

Apple Silicon (M1 and later) on macOS 15.0+, by design: LokalBot is built around the Neural Engine, MLX, and Core Audio process taps. There is no Intel, Windows, or Linux build planned.

How does it record both sides?

Your microphone is one track, labeled Me. A Core Audio process tap on the meeting app is the other, labeled Them. That split gives you speaker labels for free — no bot joins the call.

How is this different from Rewind or screenpipe?

They proved people want a computer that remembers. Rewind became Limitless and moved cloud-first; screenpipe is a developer library you build on. LokalBot is a finished GPLv3 app: install it, and capture, transcription, summaries, and memory run on-device by default, with source you can audit. Dated comparisons: vs Rewind · vs Granola.

Can I use my own model?

Yes. Use the built-in llama.cpp runtime with any GGUF you download (there's a Hugging Face browser in Settings), or point LokalBot at Ollama, any OpenAI-compatible server, or Apple Intelligence.

Is my screen being watched?

Fresh installs select day tracking with text and encrypted visual context by default. Collection starts only after you grant macOS Accessibility and Screen Recording permissions, and you can turn off tracking or choose a less detailed mode at any time. Visuals are deleted after 14 days by default; a moment you explicitly save is retained until you unsave or delete it. Private/incognito windows, excluded apps and domains, and focused secure fields are skipped. Detected credentials are redacted and the associated pixels are dropped. No detector is perfect, so exclude any app or domain whose content should never be retained.

Is the bundled llama.cpp server safe?

It's compiled from pinned source at build time, copied out of the app bundle before executing, bound to localhost only, and terminated when LokalBot quits.

Is it legal to record my calls?

LokalBot is a personal recorder, not a covert bot — and you're responsible for telling participants, the same as with any recorder. Recording-consent laws vary by place; when in doubt, announce it.

Known limitations
  • Automatic Sparkle update checks are on by default for new installs and can be disabled in Settings.
  • If system-audio tap creation fails, recording falls back gracefully to mic-only, with a warning.
  • AAC encoding assumes Float32 tap/mic formats — verified on M-series hardware.

For developers & agents

lokalbot-cli is embedded in the app bundle and gives coding agents read-only access to the local library. It supports list, get, search, and path from the shell, with JSON output by default. The same binary can run as a stdio MCP server:

  • Meeting access: list_meetings, get_meeting, search_meetings, and ask_library.
  • Screen-memory access: search_screen, get_timeline, get_recent_activity, get_app_usage, and get_screenshot_detail, behind a separate permission for today, the last seven days, or all retained history.
  • Privacy boundary: screen tools return captured text and metadata, never decrypted pixels or screenshot paths. Out-of-scope ids appear missing.

LokalBot does not upload library content, but an MCP client such as Claude Desktop or Cursor may transmit tool inputs and results under its own privacy terms. Connect only clients you trust. Scripts/build-mcpb.sh packages the server as a one-click LokalBot.mcpb for GUI MCP clients.

lokalbot-cli search "auth refactor"
lokalbot-cli get latest --include summary
lokalbot-cli mcp        # stdio MCP: meeting tools + separately gated screen-memory tools
Animated terminal session: lokalbot-cli lists meetings as a table, searches transcripts for redis and returns JSON, then prints the latest meeting summary

Agent skill: SKILL.md · architecture, headless flags, testing, and on-disk layout: DEVELOPMENT.md

skills.sh

Claude Code users can install this access as a plugin: /plugin marketplace add stevyhacker/lokalbot, then /plugin install lokalbot@lokalbot. It adds the namespaced /lokalbot:recall command, the lokalbot-cli skill, and a stdio MCP server — details in Distribution/claude-plugin/README.md.

Build from source

You'll need Xcode 16+ with a signing team, XcodeGen, and CMake (brew install xcodegen cmake).

git clone https://github.com/stevyhacker/lokalbot.git
cd lokalbot
xcodegen generate
open LokalBot.xcodeproj

Set your team under Signing & Capabilities, pick a scheme, and run:

SchemeBundle idNotes
LokalBotme.dotenv.LokalBotproduction; Sparkle auto-update compiled in
LokalBot Devme.dotenv.LokalBot.devSparkle compiled out; a distinct bundle id keeps its own permission grants, so running from Xcode never disturbs the released app

The first build vendors pinned llama.cpp (b10173) via a pre-build phase; models download on first use, and macOS prompts for Microphone and System Audio on your first recording.

Contributing & security

Issues and pull requests are welcome — see the issue templates and PR template, and please run the unit tests before opening a PR (DEVELOPMENT.md has the commands). Security issues: report privately via SECURITY.md · usage help: SUPPORT.md.

If LokalBot is useful to you, a star helps other people find it.

License

GPLv3 — free software you can redistribute and modify (LICENSE). Because the GPL is copyleft, the "read every line, or build it yourself" guarantee is enforced by the license, not just promised.

Acknowledgements

Built on llama.cpp, IBM Granite Speech, Parakeet, Whisper, and Qwen3-ASR for transcription, FluidAudio for diarization, Sparkle for updates, and XcodeGen for the project manifest. The Autocomplete feature's Cotyping engine shares its loop with Cotabby.

LokalBot for LLMs

LokalBot is a free, open-source (GPLv3) private AI work-memory app for macOS that runs on-device by default: a local LLM workhorse that keeps a memory of each workday. It records both sides of meetings without a bot, turns conversations and optional workday context into searchable, evidence-backed memory, then helps users recall, dictate, write, and automate. It is an alternative to Granola, Otter.ai, Rewind, Limitless, screenpipe, Superwhisper, and Hyprnote that runs transcription and summarization locally on Apple Silicon Macs (macOS 15+). Your microphone is captured as "Me" and the meeting app's system audio as "Them" via a Core Audio process tap, giving speaker-labeled transcripts without a meeting bot. Transcription engines include IBM Granite Speech 4.1, NVIDIA Parakeet, Whisper large-v3 turbo, and Qwen3-ASR, running on the Neural Engine via CoreML and MLX. Summaries are generated by a bundled llama.cpp runtime on localhost, or optionally by Ollama, any OpenAI-compatible server, or Apple Intelligence. There is no account, telemetry endpoint, or LokalBot cloud. Disclosed network paths are model/runtime downloads, optional update checks, remote inference origins the user explicitly approves, and network-capable Agent Mode commands the user explicitly approves. LokalBot also includes system-wide dictation, local Autocomplete powered by its Cotyping engine, opt-in Quick Recall, accessibility-first text context with optional encrypted visuals and local OCR fallback, evidence-backed citations, semantic search over meetings and captured text, fixed-scope local routines, scheduled Markdown/Obsidian/Logseq memory export, Memory Health diagnostics, chat over local memory, and a read-only CLI and MCP server for coding agents. External MCP clients may independently transmit tool inputs and results under their own privacy terms.

Guides: local AI meeting notes on Mac · offline meeting transcription · local transcription models compared · open-source AI meeting notes · record both sides of a Mac meeting without a bot

Contributors

stevyhacker

421 commits

claude

1 commits

stevyhacker/lokalbot

A local LLM workhorse that keeps a memory of your workday. On-device meeting notes, dictation, autocomplete, and recall for macOS. GPLv3.

36

stars

425

commits

Swift

primary language

Sep 10, 2026

updated

www.lokalbot.com
ai
apple-silicon
autocomplete
diarization
dictation
llama-cpp
local-first
local-llm
macos
mcp
meeting-notes
mlx
note-taking
on-device
privacy
speech-to-text
swift
swiftui
transcription
whisper

README

LokalBot icon

LokalBot

A local LLM workhorse that keeps a private memory of your workday. Open source, on-device by default.

Records both sides of meetings without a bot, turns conversations and the workday context you choose into searchable memory, and helps you recall decisions, draft follow-ups, dictate, and autocomplete in any app.

No account. No telemetry. No LokalBot cloud. Verify the local path yourself.

Download LokalBot for macOS

Free · Developer ID signed, notarized & stapled · Apple Silicon, macOS 15+ · all releases

Latest release macOS 15.0+ License: GPLv3

30-second feature demo with voiceover · Meetings, cited recall, Dictation, Autocomplete, daily summaries, and local privacy · open the MP4 directly

Features · How it works · Privacy — verify it · Download · FAQ · Build from source


The memory starts with meetings. Your mic is captured as Me and a Core Audio tap on the meeting app as Them, so speaker labels come free and no bot joins the call. LokalBot then produces a recap, separates decisions from action items, and links outcomes back to the audio that supports them.

The same private library connects four moves: Remember meetings and optional day context. Recall decisions with evidence. Write with Dictation and Autocomplete. Act through reviewable actions, fixed-scope local routines, exports, and approved Agent Mode sessions.

Network access is limited to model/runtime downloads, optional update checks, remote inference origins you explicitly approve, and network-capable Agent Mode commands you explicitly approve. Details in Privacy.

Why LokalBot

Bot-free captureTwo synchronized audio tracks record you and the meeting app without adding a participant to the call.
Outcomes, not transcript pilesReview decisions, action items, open questions, and the day-level tasks that still need attention.
Evidence attachedSearch by words or meaning, open the exact meeting or retained moment, and jump to the supporting audio.
Local by defaultBuilt-in transcription, summaries, search, and writing run on your Mac; remote inference is explicit and per-origin approved.
Free and auditableNo account or API key is required. The GPLv3 source and network traffic are both yours to inspect.
LokalBot super-app map: one on-device language model at the center, connected to meetings, cotyping autocomplete, chat, search, the day timeline, the agent CLI, and bring-your-own models

See it in action

Start with what needs attention. Today combines the day digest with reviewable meeting actions and one-click access to Ask, the Timeline, and Agent Mode.

LokalBot Today showing the day summary, digest tasks, and meeting actions that need attention

Turn a call into outcomes you can act on. Check off or reassign action items, review decisions, and jump from an outcome to its cited audio or transcript evidence.

LokalBot Meetings showing an audio player, reviewable action items, cited decisions, and a structured summary

Recall without leaving the app you are in. Quick Recall searches saved moments, captured text, and meeting transcripts from one shortcut.

LokalBot Quick Recall searching Redis across a saved Slack moment, captured screen text, and meeting transcripts

Understand the day as work, not raw telemetry. Timeline groups activity into work sessions and meetings; the raw capture remains available when you need exact evidence or cleanup.

LokalBot Timeline showing a day digest, grouped work sessions, meetings, and access to the underlying capture evidence
LokalBot Type showing the Autocomplete readiness check, in-app suggestion preview, and two-step rehearsal
Autocomplete — rehearse locally, then enable Cotyping in almost any app
LokalBot model settings showing the Transcribe, Think, and Autocomplete roles, recommended presets, and model storage
Model stack — see readiness and change each local role in one place

Captured at Retina resolution from the real macOS UI with a synthetic demo library. Click any image for the full-resolution frame; no personal meeting or screen data is shown.

Features

Remember

  • Records both sides of the call. Auto-detects Zoom, Teams, Meet, Slack, Webex, and FaceTime, then captures you and them on two synced tracks — no bot in the participant list.
  • Follows the call live. A live meeting view while you talk: quick notes that land in the finished meeting, plus an opt-in rolling transcript.
  • Transcribes locally. IBM Granite Speech 4.1 by default; Parakeet for speed (up to ~190× realtime in local benchmarks), Whisper for 99 languages, Qwen3-ASR for harder recordings.
  • Turns talk into outcomes. After processing, you get a TL;DR, decisions, action items, and open questions. Mark work done, reassign it, open it in Agent Mode, or jump to the supporting evidence.
  • Explains the day. Today surfaces the digest and open actions; Timeline groups activity into work sessions and meetings while preserving access to the raw evidence.

Recall

  • Search every word you've heard. Full-text and meaning-based search — jump straight to the audio behind any hit.
  • Chat with your meetings. "What did we decide?" answered from your library, with citations. Kokoro TTS can read answers aloud on-device.
  • Recall with evidence. Choose activity only, accessible text, or accessible text plus encrypted visuals. Search captured text by meaning, app, or date; open the exact retained moment behind an answer; save important moments; or inspect a work session down to its raw capture.

Write

  • Dictation — voice typing anywhere. Hold ⌥ Space, talk, release: transcribed on-device and pasted at the cursor. Pauses your music first; deletes the audio after. Opt-in.
  • Autocomplete (Cotyping). Ghost text appears as you type in almost any app; Tab accepts. The Type screen lets you test and rehearse the real local pipeline before enabling it system-wide. Opt-in; never reads password fields.

Act

  • Move reviewed work forward. Send a meeting action or today's open list into Agent Mode with its source context attached; file and shell access still follow the configured approval policy.
  • Automate drafts safely. Opt-in routines create local post-meeting follow-ups, stand-ups, weekly work logs, action rollups, and journal notes. They use fixed local scopes, write only to your chosen folder, and cannot run scripts, send messages, or contact services.
  • Private by construction. Accessible text is preferred and local OCR fills gaps. Private windows, excluded apps/domains, secure fields, and detected credentials fail closed; credentials force text-only retention. Optional pixels are AES-GCM encrypted and auto-delete after 14 days unless you explicitly save a moment. External screen-memory tools have an independent, time-scoped permission.

Power users: bring your own model (any GGUF, Ollama, an OpenAI-compatible server, or Apple Intelligence), run the embedded coding agent, or give your coding agents read-only library access — see For developers & agents. Full technical detail: DEVELOPMENT.md.

How it works

LokalBot's local-first pipeline: capture (mic as Me via AVAudioEngine, system audio as Them via a Core Audio process tap) → transcribe on-device → summarize with the built-in local model or an explicitly approved server → index locally in SQLite. Model and update downloads use the network.
  1. It notices the meeting. LokalBot automatically starts when it detects a call by default (configurable: auto / ask / manual), or you start it from the menu bar.
  2. It creates outcomes with evidence. The selected engines turn audio into a labeled transcript, structured recap, decisions, and action items. The built-in defaults run on-device; first use may include model downloads.
  3. It builds a local working memory. Meetings, outcomes, activity, and optional screen context land in local files and SQLite you can search, replay, review, or hand to trusted tools.

Example model stack and performance

This measured higher-capacity example occupies about 12.4 GB after every model below has been downloaded. It was tested on a 48 GB M4 Max MacBook Pro using LokalBot's bundled llama.cpp runtime with full Metal offload. It is not the default preset: the current Recommended stack uses the smaller LFM2.5 1.2B model for Autocomplete.

RoleModelQuantization / formatModel filesMeasured generation
TranscriptionIBM Granite Speech 4.1 2BQ4_K_M + F16 projector2.30 GBASR; use realtime factor
Summaries and chatQwen3.5 4BQ4_K_M2.74 GB~100 tokens/s
AutocompleteGemma 4 E4BUD-Q5_K_XL6.66 GB~78 tokens/s
Semantic searchQwen3-Embedding 0.6BQ8_00.64 GBEmbeddings; not generative
Speaker diarizationpyannote-community-1 via FluidAudioCore ML~0.10 GBDiarization; not generative

Explore the interactive benchmark summary and the recommended local model stack.

Generation speed varies with context length, thermals, and other workloads. Model files download on first use, so features you do not enable do not incur their full model footprint.

Embeddings live in SQLite with brute-force cosine similarity, because at personal scale brute force is instant.

Privacy — verify it

Privacy is the architecture. Audio, transcripts, summaries, embeddings, screenshots, and activity live in local files and SQLite under your account. There is no account or telemetry, and audio is never sent to a LokalBot service.

Depending on the features and backends you enable, LokalBot may make these outbound connections:

  1. One-time model downloads the first time you use a local engine — weights from Hugging Face, sherpa-onnx archives from GitHub. Once cached, those local engines no longer need network access.
  2. A backend you explicitly configure — point summaries, chat, or Agent Mode at Ollama or any OpenAI-compatible server and traffic goes only where you send it, after a per-origin approval. The built-in llama.cpp runtime is localhost-only.
  3. Agent Mode setup, if you enable it — a one-time, checksum-verified download of the Bun runtime and the lockfile-pinned pi package. The pi runtime disables its own telemetry and version checks; LLM requests stay local when you select the built-in backend.
  4. App updates via Sparkle — automatic checks are on by default for new installs and can be disabled in Settings; update downloads come from GitHub Releases.
  5. Agent Mode commands you approve — approved shell commands run with your macOS user permissions and can access any network destination available to your account. Their destinations and data handling are outside LokalBot's control.

To verify the built-in path, download the required models first, select the built-in backend, turn off automatic update checks, then run Little Snitch (or lsof -i -nP | grep LokalBot) while it records, transcribes, and summarizes a meeting. LokalBot should make no outbound connection during that processing cycle; approved shell tools are separate processes and may connect when you permit them.

App Sandbox is intentionally off — Core Audio process taps don't work sandboxed. That's why LokalBot ships as a notarized Developer ID app rather than through the App Store.

Full policy: PRIVACY.md · report a vulnerability privately: SECURITY.md

Download

Download LokalBot.dmg — free · all releases and notes

Developer ID signed, notarized, stapled, and verified by Gatekeeper. Release tooling automates the same sign → notarize → staple checks for future releases.

  • Apple Silicon Mac (M1 or later)
  • macOS 15.0 or later
  • Disk for the models you pick (~0.5–18 GB)

Drag to Applications and open. Expect Microphone and System Audio prompts on your first recording; the models you select download on first use, and built-in inference can then run offline.

Switching from a cloud notetaker?

The useful comparison is where capture, transcription, summaries, and stored data live, plus whether the source is auditable. Products and prices change quickly, so the dated, sourced comparisons are maintained separately: vs Granola · vs Rewind · vs Superwhisper · vs Hyprnote

FAQ

Does anything leave my Mac?

Audio stays on your Mac. Transcripts, summaries, screenshots, and workday context stay local with the built-in backend; if you approve a non-loopback Ollama or OpenAI-compatible origin, LokalBot sends that server the context required for requests. The app also connects for model/runtime downloads, optional update checks, and network access by Agent Mode commands you explicitly approve. See PRIVACY.md.

Is it really free — and will it stay free?

Free and open source under GPLv3 today, with no account, subscription, or telemetry. Copyleft means a future rug-pull would be hard by construction: any distributed fork must ship its source under the GPL too.

Which Macs — and why Apple Silicon only?

Apple Silicon (M1 and later) on macOS 15.0+, by design: LokalBot is built around the Neural Engine, MLX, and Core Audio process taps. There is no Intel, Windows, or Linux build planned.

How does it record both sides?

Your microphone is one track, labeled Me. A Core Audio process tap on the meeting app is the other, labeled Them. That split gives you speaker labels for free — no bot joins the call.

How is this different from Rewind or screenpipe?

They proved people want a computer that remembers. Rewind became Limitless and moved cloud-first; screenpipe is a developer library you build on. LokalBot is a finished GPLv3 app: install it, and capture, transcription, summaries, and memory run on-device by default, with source you can audit. Dated comparisons: vs Rewind · vs Granola.

Can I use my own model?

Yes. Use the built-in llama.cpp runtime with any GGUF you download (there's a Hugging Face browser in Settings), or point LokalBot at Ollama, any OpenAI-compatible server, or Apple Intelligence.

Is my screen being watched?

Fresh installs select day tracking with text and encrypted visual context by default. Collection starts only after you grant macOS Accessibility and Screen Recording permissions, and you can turn off tracking or choose a less detailed mode at any time. Visuals are deleted after 14 days by default; a moment you explicitly save is retained until you unsave or delete it. Private/incognito windows, excluded apps and domains, and focused secure fields are skipped. Detected credentials are redacted and the associated pixels are dropped. No detector is perfect, so exclude any app or domain whose content should never be retained.

Is the bundled llama.cpp server safe?

It's compiled from pinned source at build time, copied out of the app bundle before executing, bound to localhost only, and terminated when LokalBot quits.

Is it legal to record my calls?

LokalBot is a personal recorder, not a covert bot — and you're responsible for telling participants, the same as with any recorder. Recording-consent laws vary by place; when in doubt, announce it.

Known limitations
  • Automatic Sparkle update checks are on by default for new installs and can be disabled in Settings.
  • If system-audio tap creation fails, recording falls back gracefully to mic-only, with a warning.
  • AAC encoding assumes Float32 tap/mic formats — verified on M-series hardware.

For developers & agents

lokalbot-cli is embedded in the app bundle and gives coding agents read-only access to the local library. It supports list, get, search, and path from the shell, with JSON output by default. The same binary can run as a stdio MCP server:

  • Meeting access: list_meetings, get_meeting, search_meetings, and ask_library.
  • Screen-memory access: search_screen, get_timeline, get_recent_activity, get_app_usage, and get_screenshot_detail, behind a separate permission for today, the last seven days, or all retained history.
  • Privacy boundary: screen tools return captured text and metadata, never decrypted pixels or screenshot paths. Out-of-scope ids appear missing.

LokalBot does not upload library content, but an MCP client such as Claude Desktop or Cursor may transmit tool inputs and results under its own privacy terms. Connect only clients you trust. Scripts/build-mcpb.sh packages the server as a one-click LokalBot.mcpb for GUI MCP clients.

lokalbot-cli search "auth refactor"
lokalbot-cli get latest --include summary
lokalbot-cli mcp        # stdio MCP: meeting tools + separately gated screen-memory tools
Animated terminal session: lokalbot-cli lists meetings as a table, searches transcripts for redis and returns JSON, then prints the latest meeting summary

Agent skill: SKILL.md · architecture, headless flags, testing, and on-disk layout: DEVELOPMENT.md

skills.sh

Claude Code users can install this access as a plugin: /plugin marketplace add stevyhacker/lokalbot, then /plugin install lokalbot@lokalbot. It adds the namespaced /lokalbot:recall command, the lokalbot-cli skill, and a stdio MCP server — details in Distribution/claude-plugin/README.md.

Build from source

You'll need Xcode 16+ with a signing team, XcodeGen, and CMake (brew install xcodegen cmake).

git clone https://github.com/stevyhacker/lokalbot.git
cd lokalbot
xcodegen generate
open LokalBot.xcodeproj

Set your team under Signing & Capabilities, pick a scheme, and run:

SchemeBundle idNotes
LokalBotme.dotenv.LokalBotproduction; Sparkle auto-update compiled in
LokalBot Devme.dotenv.LokalBot.devSparkle compiled out; a distinct bundle id keeps its own permission grants, so running from Xcode never disturbs the released app

The first build vendors pinned llama.cpp (b10173) via a pre-build phase; models download on first use, and macOS prompts for Microphone and System Audio on your first recording.

Contributing & security

Issues and pull requests are welcome — see the issue templates and PR template, and please run the unit tests before opening a PR (DEVELOPMENT.md has the commands). Security issues: report privately via SECURITY.md · usage help: SUPPORT.md.

If LokalBot is useful to you, a star helps other people find it.

License

GPLv3 — free software you can redistribute and modify (LICENSE). Because the GPL is copyleft, the "read every line, or build it yourself" guarantee is enforced by the license, not just promised.

Acknowledgements

Built on llama.cpp, IBM Granite Speech, Parakeet, Whisper, and Qwen3-ASR for transcription, FluidAudio for diarization, Sparkle for updates, and XcodeGen for the project manifest. The Autocomplete feature's Cotyping engine shares its loop with Cotabby.

LokalBot for LLMs

LokalBot is a free, open-source (GPLv3) private AI work-memory app for macOS that runs on-device by default: a local LLM workhorse that keeps a memory of each workday. It records both sides of meetings without a bot, turns conversations and optional workday context into searchable, evidence-backed memory, then helps users recall, dictate, write, and automate. It is an alternative to Granola, Otter.ai, Rewind, Limitless, screenpipe, Superwhisper, and Hyprnote that runs transcription and summarization locally on Apple Silicon Macs (macOS 15+). Your microphone is captured as "Me" and the meeting app's system audio as "Them" via a Core Audio process tap, giving speaker-labeled transcripts without a meeting bot. Transcription engines include IBM Granite Speech 4.1, NVIDIA Parakeet, Whisper large-v3 turbo, and Qwen3-ASR, running on the Neural Engine via CoreML and MLX. Summaries are generated by a bundled llama.cpp runtime on localhost, or optionally by Ollama, any OpenAI-compatible server, or Apple Intelligence. There is no account, telemetry endpoint, or LokalBot cloud. Disclosed network paths are model/runtime downloads, optional update checks, remote inference origins the user explicitly approves, and network-capable Agent Mode commands the user explicitly approves. LokalBot also includes system-wide dictation, local Autocomplete powered by its Cotyping engine, opt-in Quick Recall, accessibility-first text context with optional encrypted visuals and local OCR fallback, evidence-backed citations, semantic search over meetings and captured text, fixed-scope local routines, scheduled Markdown/Obsidian/Logseq memory export, Memory Health diagnostics, chat over local memory, and a read-only CLI and MCP server for coding agents. External MCP clients may independently transmit tool inputs and results under their own privacy terms.

Guides: local AI meeting notes on Mac · offline meeting transcription · local transcription models compared · open-source AI meeting notes · record both sides of a Mac meeting without a bot

Contributors

stevyhacker

421 commits

claude

1 commits

Languages

Swift

86.1%

HTML

6.6%

Python

4.5%

Shell

1.5%

CSS

1.0%