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
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.
Free · Developer ID signed, notarized & stapled · Apple Silicon, macOS 15+ · all releases
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.
| Bot-free capture | Two synchronized audio tracks record you and the meeting app without adding a participant to the call. |
| Outcomes, not transcript piles | Review decisions, action items, open questions, and the day-level tasks that still need attention. |
| Evidence attached | Search by words or meaning, open the exact meeting or retained moment, and jump to the supporting audio. |
| Local by default | Built-in transcription, summaries, search, and writing run on your Mac; remote inference is explicit and per-origin approved. |
| Free and auditable | No account or API key is required. The GPLv3 source and network traffic are both yours to inspect. |
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.
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.
Recall without leaving the app you are in. Quick Recall searches saved moments, captured text, and meeting transcripts from one shortcut.
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.
![]() Autocomplete — rehearse locally, then enable Cotyping in almost any app | ![]() 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.
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.
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.
| Role | Model | Quantization / format | Model files | Measured generation |
|---|---|---|---|---|
| Transcription | IBM Granite Speech 4.1 2B | Q4_K_M + F16 projector | 2.30 GB | ASR; use realtime factor |
| Summaries and chat | Qwen3.5 4B | Q4_K_M | 2.74 GB | ~100 tokens/s |
| Autocomplete | Gemma 4 E4B | UD-Q5_K_XL | 6.66 GB | ~78 tokens/s |
| Semantic search | Qwen3-Embedding 0.6B | Q8_0 | 0.64 GB | Embeddings; not generative |
| Speaker diarization | pyannote-community-1 via FluidAudio | Core ML | ~0.10 GB | Diarization; 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 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:
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 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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
list_meetings, get_meeting, search_meetings, and ask_library.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.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
Agent skill: SKILL.md · architecture, headless flags, testing, and on-disk layout: DEVELOPMENT.md
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.
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:
| Scheme | Bundle id | Notes |
|---|---|---|
| LokalBot | me.dotenv.LokalBot | production; Sparkle auto-update compiled in |
| LokalBot Dev | me.dotenv.LokalBot.dev | Sparkle 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.
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.
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.
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 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
Swift
86.1%
HTML
6.6%
Python
4.5%
Shell
1.5%
CSS
1.0%
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
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.
Free · Developer ID signed, notarized & stapled · Apple Silicon, macOS 15+ · all releases
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.
| Bot-free capture | Two synchronized audio tracks record you and the meeting app without adding a participant to the call. |
| Outcomes, not transcript piles | Review decisions, action items, open questions, and the day-level tasks that still need attention. |
| Evidence attached | Search by words or meaning, open the exact meeting or retained moment, and jump to the supporting audio. |
| Local by default | Built-in transcription, summaries, search, and writing run on your Mac; remote inference is explicit and per-origin approved. |
| Free and auditable | No account or API key is required. The GPLv3 source and network traffic are both yours to inspect. |
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.
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.
Recall without leaving the app you are in. Quick Recall searches saved moments, captured text, and meeting transcripts from one shortcut.
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.
![]() Autocomplete — rehearse locally, then enable Cotyping in almost any app | ![]() 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.
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.
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.
| Role | Model | Quantization / format | Model files | Measured generation |
|---|---|---|---|---|
| Transcription | IBM Granite Speech 4.1 2B | Q4_K_M + F16 projector | 2.30 GB | ASR; use realtime factor |
| Summaries and chat | Qwen3.5 4B | Q4_K_M | 2.74 GB | ~100 tokens/s |
| Autocomplete | Gemma 4 E4B | UD-Q5_K_XL | 6.66 GB | ~78 tokens/s |
| Semantic search | Qwen3-Embedding 0.6B | Q8_0 | 0.64 GB | Embeddings; not generative |
| Speaker diarization | pyannote-community-1 via FluidAudio | Core ML | ~0.10 GB | Diarization; 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 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:
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 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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
list_meetings, get_meeting, search_meetings, and ask_library.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.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
Agent skill: SKILL.md · architecture, headless flags, testing, and on-disk layout: DEVELOPMENT.md
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.
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:
| Scheme | Bundle id | Notes |
|---|---|---|
| LokalBot | me.dotenv.LokalBot | production; Sparkle auto-update compiled in |
| LokalBot Dev | me.dotenv.LokalBot.dev | Sparkle 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.
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.
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.
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 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
Swift
86.1%
HTML
6.6%
Python
4.5%
Shell
1.5%
CSS
1.0%