<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>LokalBot Blog</title>
  <subtitle>News from the LokalBot project: releases, local model benchmarks, and notes on how the app is built. Subscribe with the Atom feed.</subtitle>
  <link href="https://www.lokalbot.com/blog/feed.xml" rel="self" type="application/atom+xml" />
  <link href="https://www.lokalbot.com/blog" rel="alternate" type="text/html" />
  <id>https://www.lokalbot.com/blog</id>
  <updated>2026-10-26T00:00:00Z</updated>
  <author><name>LokalBot project</name><uri>https://www.lokalbot.com/</uri></author>
  <icon>https://www.lokalbot.com/assets/lokalbot-icon-512.png</icon>
  <entry>
    <title>Recall vs. restraint: which local models know when not to save a memory</title>
    <link href="https://www.lokalbot.com/blog/recall-vs-restraint-memory-benchmark" />
    <id>https://www.lokalbot.com/blog/recall-vs-restraint-memory-benchmark</id>
    <published>2026-10-23T00:00:00Z</published>
    <updated>2026-10-25T00:00:00Z</updated>
    <summary>A 120-case benchmark of local models writing personal memories, scored on what they save and on what they correctly leave out: Qwen3.5 4B and 9B, Hy-Memory 30B-A3B, LFM2.5 24B-A2B, and MemT-1.0-Nano.</summary>
    <content type="html">&lt;h2&gt;Why restraint matters&lt;/h2&gt;
&lt;p&gt;On Mac, LokalBot's Personal Context learns facts, preferences, goals, and principles from what you type and say, so that agents you allow can tailor their work to you. A missed memory costs little: the next conversation usually brings it up again. A wrong one is worse. It quietly ends up in the context every agent reads, and nobody notices until an answer is off.&lt;/p&gt;
&lt;p&gt;So the test asks for both recall and restraint. Three kinds of cases make the difference visible:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Who said it.&lt;/strong&gt; “I live in Valencia” should be saved. “My colleague said, ‘I live in Valencia’” should not.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Already known.&lt;/strong&gt; A new preference should be saved. One already in the known-memories list should be skipped.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Policy.&lt;/strong&gt; A job title mentioned alongside a salary should be kept, and the salary left out.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;The test&lt;/h2&gt;
&lt;p&gt;The benchmark has 120 synthetic cases arranged as 60 contrast pairs. The main comparison uses the 96 English cases: 52 contain one useful memory to extract, and in 44 the correct output is an empty list. A separate 24-case Serbian slice is reported on its own.&lt;/p&gt;
&lt;p&gt;Every model received the same application prompt with its native chat template, an enforced JSON schema, temperature 0, seed 0, thinking disabled, and a single pass, with no model-specific prompt tuning. The GGUF models ran one after another through llama.cpp on the same Ryzen 7 9700X server. This measures accuracy, not speed. A recalled memory only counts when it also cites the right source line.&lt;/p&gt;

&lt;h2&gt;Results&lt;/h2&gt;
&lt;div class="guide-table-wrap"&gt;
  &lt;table class="guide-table"&gt;
    &lt;caption class="visually-hidden"&gt;Results on the 96 English cases&lt;/caption&gt;
    &lt;thead&gt;
      &lt;tr&gt;&lt;th scope="col"&gt;Model&lt;/th&gt;&lt;th scope="col"&gt;Useful memories recalled&lt;/th&gt;&lt;th scope="col"&gt;Unwanted proposals&lt;/th&gt;&lt;th scope="col"&gt;Empty cases correct&lt;/th&gt;&lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;Qwen3.5 4B, Q4_K_M&lt;/th&gt;&lt;td&gt;30/52 (57.7%)&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;42/44 (95.5%)&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;Qwen3.5 9B, Q4_K_M&lt;/th&gt;&lt;td&gt;37/52 (71.2%)&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;40/44 (90.9%)&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;Hy-Memory 30B-A3B, official Q4_K_M&lt;/th&gt;&lt;td&gt;52/52 (100%)&lt;/td&gt;&lt;td&gt;76&lt;/td&gt;&lt;td&gt;0/44 (0%)&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;LFM2.5 24B-A2B, QAD Q4_0&lt;/th&gt;&lt;td&gt;40/52 (76.9%)&lt;/td&gt;&lt;td&gt;53&lt;/td&gt;&lt;td&gt;10/44 (22.7%)&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;MemT-1.0-Nano, NF4 experts / BF16 dense&lt;/th&gt;&lt;td&gt;51/52 (98.1%)&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;39/44 (88.6%)&lt;/td&gt;&lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;figure class="blog-figure"&gt;
  &lt;img src="https://www.lokalbot.com/assets/blog/memory-retention-recall-vs-restraint.webp" width="1600" height="864" alt="Bar charts comparing five models on useful memories recalled, empty cases handled correctly, and unwanted memory proposals, with the numbers from the table above." loading="lazy" decoding="async" /&gt;
  &lt;figcaption&gt;The 96 English cases. Higher is better in the first two columns, lower in the third.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2&gt;What stood out&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Perfect recall can hide the real problem.&lt;/strong&gt; Hy-Memory captured every eligible memory and failed all 44 cases where the right answer was nothing, with 76 unwanted proposals. Scored on recall alone, it would look like the best model here.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Qwen models held back.&lt;/strong&gt; Both missed more valid memories, but they handled over 90% of the empty cases and made only three and five unwanted proposals.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;LFM2.5 copied from the instructions.&lt;/strong&gt; In several cases it proposed “I live in Belgrade”, an example from the prompt with no support in the conversation. It also often returned the source sentence instead of the required source-line ID. Accepting exact quotations recovered 9 of its 18 invalid English citations, raising exact source selection from 51 to 56 of 96 cases, but that only repairs formatting. The table keeps the strict scoring.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;MemT-1.0-Nano was the best balance.&lt;/strong&gt; A reader on &lt;a href="https://www.reddit.com/r/LocalLLaMA/comments/1xd95n0/recall_vs_restraint_testing_which_local_llms_know/" target="_blank" rel="noopener"&gt;r/LocalLLaMA&lt;/a&gt; suggested it, and it was added on October 25: 51 of 52 useful memories, 6 unwanted proposals, and 39 of 44 empty cases. On the Serbian slice it recalled 13 of 13, made 3 unwanted proposals, and passed 8 of 11 empty cases, but three of its outputs switched language or script.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Caveats&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;MemT-1.0-Nano ran with experimental NF4 expert offload through Transformers on a Radeon RX 6600 XT; the other models ran as GGUF files in llama.cpp on a CPU. There is no matched run of its Qwen3.6-35B-A3B backbone, so the comparison isn't controlled for hardware or precision.&lt;/li&gt;
  &lt;li&gt;Each case starts from a fresh state, so MemT's persistent memory feature isn't exercised.&lt;/li&gt;
  &lt;li&gt;An AI assistant wrote the cases and graded the semantic decisions with the model names visible. There is no independent human validation and no claim of statistical significance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;What it means for LokalBot&lt;/h2&gt;
&lt;p&gt;These results don't change LokalBot's defaults. What they confirm is that a memory writer has to be judged on what it leaves out as much as on what it finds. On Mac, the suggestions Personal Context learns appear under &lt;strong&gt;To review&lt;/strong&gt; in Settings → Personal Context, where you keep or dismiss them.&lt;/p&gt;

&lt;h2&gt;Data&lt;/h2&gt;
&lt;p&gt;Everything needed to check or rerun the comparison is in the repository: the &lt;a href="https://github.com/stevyhacker/lokalbot/tree/master/Benchmarks/MemoryRetention/2026-10-23" target="_blank" rel="noopener"&gt;benchmark folder&lt;/a&gt; with the cases, prompts, and scorer, the &lt;a href="https://github.com/stevyhacker/lokalbot/blob/master/Benchmarks/MemoryRetention/2026-10-23/memt-nano/REPORT.md" target="_blank" rel="noopener"&gt;MemT report&lt;/a&gt; with every failed case, and the raw responses. Other model results are on the &lt;a href="https://www.lokalbot.com/benchmarks"&gt;benchmarks page&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>LokalBot is on Windows and Linux, in alpha</title>
    <link href="https://www.lokalbot.com/blog/windows-and-linux-alpha" />
    <id>https://www.lokalbot.com/blog/windows-and-linux-alpha</id>
    <published>2026-10-20T00:00:00Z</published>
    <updated>2026-10-22T00:00:00Z</updated>
    <summary>LokalBot 0.11 adds a native Windows and Linux app written in Rust with GPUI: meeting notes, transcription, dictation, autocomplete, and search on your own computer, reading the same library as the Mac app.</summary>
    <content type="html">&lt;h2&gt;What works&lt;/h2&gt;
        &lt;p&gt;The Windows and Linux app is written in Rust with &lt;a href="https://www.gpui.rs" target="_blank" rel="noopener"&gt;GPUI&lt;/a&gt;, the UI framework behind the Zed editor. Meetings, transcription, Ask, search, day memory, screen context, dictation, autocomplete, calendar, Agent Mode, and the CLI and MCP server for coding agents all work. Like the Mac app, it runs its models on your computer by default, and it has no account and no telemetry.&lt;/p&gt;
        &lt;figure class="blog-figure"&gt;
          &lt;img src="https://www.lokalbot.com/assets/blog/linux-meetings.webp" width="1600" height="1000" alt="LokalBot on Linux showing a meeting's recap, action items with timestamps, and decisions, next to a list of recent meetings." loading="lazy" decoding="async" /&gt;
          &lt;figcaption&gt;A meeting's recap and action items on Linux, with fictional demo data.&lt;/figcaption&gt;
        &lt;/figure&gt;

        &lt;h2&gt;What's still missing&lt;/h2&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;strong&gt;The Windows build isn't code-signed yet.&lt;/strong&gt; SmartScreen asks before the first launch: choose &lt;strong&gt;More info → Run anyway&lt;/strong&gt;.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Wayland support is partial.&lt;/strong&gt; Autocomplete in other apps needs X11; on Wayland it works in the practice editor in Settings. For dictation on Wayland, bind &lt;code&gt;lokalbot dictate&lt;/code&gt; to a shortcut in your desktop's settings.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Meeting audio is the whole computer's.&lt;/strong&gt; On Windows and Linux LokalBot records everything the computer plays, not one app as on Mac.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Some features are Mac-only for now:&lt;/strong&gt; selection actions, meeting note export, Personal Context, spoken summaries, and coding-agent sessions in day memory.&lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;The full list is in &lt;a href="https://github.com/stevyhacker/lokalbot/blob/master/LinuxWindows/README.md#what-works-where" target="_blank" rel="noopener"&gt;what works where&lt;/a&gt;.&lt;/p&gt;
        &lt;figure class="blog-figure"&gt;
          &lt;img src="https://www.lokalbot.com/assets/blog/windows-today.webp" width="1600" height="900" alt="LokalBot on Windows showing Today, with open actions and the day digest." loading="lazy" decoding="async" /&gt;
          &lt;figcaption&gt;Today on Windows, with fictional demo data.&lt;/figcaption&gt;
        &lt;/figure&gt;

        &lt;h2&gt;The models&lt;/h2&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;strong&gt;Transcription:&lt;/strong&gt; Qwen3-ASR 0.6B through sherpa-onnx, with Parakeet v3, SenseVoice, and Whisper turbo as options.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Speaker separation:&lt;/strong&gt; pyannote segmentation and TitaNet.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Notes and Ask:&lt;/strong&gt; Qwen3.5 4B, the same as on Mac.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Search:&lt;/strong&gt; EmbeddingGemma 2, the same as on Mac.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Autocomplete:&lt;/strong&gt; LFM2.5 1.2B.&lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;The default download is about 4 GB. llama.cpp runs on a Vulkan GPU or the CPU, and since 0.11.3 you can choose &lt;strong&gt;CUDA (experimental)&lt;/strong&gt; in Settings → Models → llama.cpp on a supported NVIDIA GPU. You can swap any model in Settings.&lt;/p&gt;

        &lt;h2&gt;Install&lt;/h2&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;strong&gt;Windows 10 or 11, x64:&lt;/strong&gt; run &lt;code&gt;LokalBot-&amp;lt;version&amp;gt;-windows-x86_64-setup.exe&lt;/code&gt; from the &lt;a href="https://github.com/stevyhacker/lokalbot/releases/latest" target="_blank" rel="noopener"&gt;latest release&lt;/a&gt;. It installs for your user, without administrator rights. A portable zip is in the same release.&lt;/li&gt;
          &lt;li&gt;&lt;strong&gt;Linux x86_64:&lt;/strong&gt; install the &lt;code&gt;.deb&lt;/code&gt; (Debian, Ubuntu), the &lt;code&gt;.rpm&lt;/code&gt; (Fedora, openSUSE), or the Arch package, or extract the &lt;code&gt;.tar.gz&lt;/code&gt; and run &lt;code&gt;./install.sh&lt;/code&gt;. Since 0.11.2 the &lt;code&gt;.deb&lt;/code&gt;, and the &lt;code&gt;.rpm&lt;/code&gt; on Fedora, add the LokalBot repository, so &lt;code&gt;sudo apt upgrade&lt;/code&gt; or &lt;code&gt;sudo dnf upgrade&lt;/code&gt; brings later versions.&lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;Linux needs glibc 2.39 or later (Ubuntu 24.04, Debian 13, Fedora 40, or newer), PulseAudio or PipeWire, and a Vulkan or OpenGL driver. See the &lt;a href="https://www.lokalbot.com/system-requirements"&gt;system requirements&lt;/a&gt;.&lt;/p&gt;

        &lt;h2&gt;On Omarchy and other Hyprland desktops&lt;/h2&gt;
        &lt;p&gt;&lt;a href="https://omarchy.org" target="_blank" rel="noopener"&gt;Omarchy&lt;/a&gt; already has everything LokalBot uses on Wayland: &lt;code&gt;grim&lt;/code&gt; for screen context, &lt;code&gt;wtype&lt;/code&gt; and &lt;code&gt;wl-clipboard&lt;/code&gt; for dictation, PipeWire for meeting audio, and the Hyprland desktop portal. Install the Arch package with &lt;code&gt;sudo pacman -U&lt;/code&gt;, then bind LokalBot's commands in &lt;code&gt;~/.config/hypr/bindings.lua&lt;/code&gt;. These keys are free in Omarchy's defaults:&lt;/p&gt;
        &lt;pre class="code" aria-label="Hyprland key bindings for LokalBot on Omarchy"&gt;o.bind(&lt;span class="c-str"&gt;"SUPER + ALT + D"&lt;/span&gt;, &lt;span class="c-str"&gt;"LokalBot dictation"&lt;/span&gt;, &lt;span class="c-str"&gt;"lokalbot dictate"&lt;/span&gt;)
o.bind(&lt;span class="c-str"&gt;"SUPER + ALT + A"&lt;/span&gt;, &lt;span class="c-str"&gt;"Ask LokalBot"&lt;/span&gt;, &lt;span class="c-str"&gt;"lokalbot quick-recall"&lt;/span&gt;)&lt;/pre&gt;
        &lt;p&gt;The tray icon appears in Omarchy's bar, and the dictation pill and Quick Recall float instead of tiling.&lt;/p&gt;

        &lt;h2&gt;Tell us what breaks&lt;/h2&gt;
        &lt;p&gt;Most testing so far has been on a handful of personal and rented machines, so reports from real hardware help the most. &lt;a href="https://github.com/stevyhacker/lokalbot/issues/new/choose" target="_blank" rel="noopener"&gt;Open an issue&lt;/a&gt; with your distribution, desktop, X11 or Wayland, CPU and GPU, and what you tried.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>How the Windows and Linux port was built</title>
    <link href="https://www.lokalbot.com/blog/porting-to-windows-and-linux-with-agents" />
    <id>https://www.lokalbot.com/blog/porting-to-windows-and-linux-with-agents</id>
    <published>2026-10-20T00:00:00Z</published>
    <updated>2026-10-20T00:00:00Z</updated>
    <summary>The Windows and Linux app was ported from 150,000 lines of Swift to Rust in three days by coding agents. What made it work, how the result was checked, and a link to the full write-up.</summary>
    <content type="html">&lt;h2&gt;A first attempt that only looked right&lt;/h2&gt;
&lt;p&gt;On October 2 a coding agent built a working Windows and Linux app with a native interface and CI on both platforms in one morning. It had its own data model and its own library on disk, so it couldn't open anything recorded on a Mac, and nothing would show when it drifted from how the Mac app behaves. That pull request was closed.&lt;/p&gt;

&lt;h2&gt;Specs before code&lt;/h2&gt;
&lt;p&gt;The second attempt spent its first hour on specs. Four agents read the Mac app's 150,000 lines of Swift without changing anything and wrote down the library format, the processing pipeline with every model prompt, every screen with its exact text, and the command-line tools and privacy rules. The core data types were written to match the Mac app's files, and every agent tested against a real library recorded by the Mac app. Six implementation agents then each took one part of the code.&lt;/p&gt;

&lt;h2&gt;How the work was checked&lt;/h2&gt;
&lt;p&gt;The port landed as one large pull request, so the checks mattered more than reading every line of the diff:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;CI runs the app on a virtual display on Linux and on Windows and takes a screenshot of every page.&lt;/li&gt;
  &lt;li&gt;The live transcript is tested by playing a scripted conversation into virtual audio devices. That caught two bugs the unit tests had missed.&lt;/li&gt;
  &lt;li&gt;Autocomplete is tested by typing into Notepad and checking that the suggestion appears after the cursor.&lt;/li&gt;
  &lt;li&gt;End-to-end runs use the real models from an empty library: they download the models, process a short meeting, and ask a question about it.&lt;/li&gt;
  &lt;li&gt;Meetings recorded on a Mac are played on Linux, with their timestamps required to line up exactly.&lt;/li&gt;
  &lt;li&gt;Afterwards, the Mac and Windows/Linux apps were compared feature by feature, and the gaps were closed in five separate pull requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Read the full write-up&lt;/h2&gt;
&lt;p&gt;The full story, including the build machines, the rules for agents working side by side, and the decisions that were left to a person, is on Field Notes: &lt;a href="https://bogosavljevic.me/blog/posts/porting-lokalbot-to-linux-and-windows/" target="_blank" rel="noopener"&gt;Porting LokalBot to Linux and Windows with agents&lt;/a&gt;. The result is described in &lt;a href="https://www.lokalbot.com/blog/windows-and-linux-alpha"&gt;LokalBot is on Windows and Linux, in alpha&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Autocomplete that knows your meetings</title>
    <link href="https://www.lokalbot.com/blog/autocomplete-that-knows-your-meetings" />
    <id>https://www.lokalbot.com/blog/autocomplete-that-knows-your-meetings</id>
    <published>2026-10-13T00:00:00Z</published>
    <updated>2026-10-13T00:00:00Z</updated>
    <summary>LokalBot's autocomplete runs Gemma 4 E2B base at about 50 ms a suggestion on an M4 Max and can bring in facts from your own meeting notes. How it compares with Cotypist and Cotabby.</summary>
    <content type="html">&lt;figure class="blog-figure"&gt;
  &lt;img src="https://www.lokalbot.com/assets/blog/autocomplete-memory.gif" width="1650" height="258" alt="Typing an update in TextEdit after a call with John: after “the Harbor beta ships”, autocomplete suggests “Thursday morning, after the accessibility review.” and Tab accepts it word by word." loading="lazy" decoding="async" /&gt;
  &lt;figcaption&gt;A suggestion that comes from a meeting earlier that day. Tab accepts it word by word.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2&gt;Fast enough to stay out of the way&lt;/h2&gt;
&lt;p&gt;Getting autocomplete to be useful without being intrusive or laggy took a lot of experiments with different models and quantizations. The best balance of suggestion quality and latency on a regular MacBook turned out to be the Gemma 4 E2B base model at 6-bit (Q6_K), running in-process through llama.cpp. On an M4 Max a suggestion takes about 50 ms.&lt;/p&gt;

&lt;h2&gt;Context from your own work&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;The text above the field.&lt;/strong&gt; On by default, read through macOS accessibility. Private browser windows are never read.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Your meetings, if you opt in.&lt;/strong&gt; When your draft names something distinctive, LokalBot can add up to two facts from your own meeting notes to the model's context.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Autocomplete lives in the same app as meetings, dictation, and screen recall, which share one memory budget for their models.&lt;/p&gt;

&lt;h2&gt;How it compares&lt;/h2&gt;
&lt;p&gt;Cotypist and Cotabby are the closest alternatives. As described on their sites on October 13, 2026:&lt;/p&gt;
&lt;div class="guide-table-wrap"&gt;
  &lt;table class="guide-table"&gt;
    &lt;caption class="visually-hidden"&gt;Cotypist, Cotabby, and LokalBot autocomplete compared&lt;/caption&gt;
    &lt;thead&gt;
      &lt;tr&gt;&lt;th scope="col"&gt;Feature&lt;/th&gt;&lt;th scope="col"&gt;Cotypist&lt;/th&gt;&lt;th scope="col"&gt;Cotabby&lt;/th&gt;&lt;th scope="col"&gt;LokalBot&lt;/th&gt;&lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;License and price&lt;/th&gt;&lt;td&gt;Proprietary; free for 100 words a day, paid for unlimited&lt;/td&gt;&lt;td&gt;AGPL-3.0, free (beta)&lt;/td&gt;&lt;td&gt;GPLv3, free, no limits&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;Model&lt;/th&gt;&lt;td&gt;Local (Gemma 4 E4B recommended)&lt;/td&gt;&lt;td&gt;Local GGUF through llama.cpp, or Apple Intelligence&lt;/td&gt;&lt;td&gt;Gemma 4 E2B base Q6_K, in-process llama.cpp&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;Knows what was said in your meetings&lt;/th&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Yes, opt-in&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;Text above the field&lt;/th&gt;&lt;td&gt;Not documented on its site&lt;/td&gt;&lt;td&gt;OCR of the window&lt;/td&gt;&lt;td&gt;Accessibility text, never from private windows&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;Also in the app&lt;/th&gt;&lt;td&gt;Autocomplete only&lt;/td&gt;&lt;td&gt;Emoji, macros, autocorrect&lt;/td&gt;&lt;td&gt;Meetings, dictation, screen recall&lt;/td&gt;&lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;A head-to-head with Cotabby used identical inputs and the same Gemma 4 E2B weights over 782 next-word checkpoints. LokalBot predicted the exact next word 32.7% of the time (256 of 782) and Cotabby 30.7% (240 of 782), a difference of 2.0 points with a 95% interval of 0.0 to 4.0. In other words, the two are comparable on accuracy; the work now is on the experience around the suggestions.&lt;/p&gt;

&lt;h2&gt;Try it&lt;/h2&gt;
&lt;p&gt;Turn on Autocomplete in &lt;strong&gt;Settings → Writing&lt;/strong&gt;. It needs the Accessibility and Input Monitoring permissions and a one-time model download. Tab accepts a word. Password fields and apps you exclude are never read.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Search your meetings from Raycast</title>
    <link href="https://www.lokalbot.com/blog/raycast-extension" />
    <id>https://www.lokalbot.com/blog/raycast-extension</id>
    <published>2026-10-02T00:00:00Z</published>
    <updated>2026-10-02T00:00:00Z</updated>
    <summary>The LokalBot Raycast extension finds every meeting where a word came up, in titles, summaries, or transcripts, without opening the app. It only reads your local library.</summary>
    <content type="html">&lt;figure class="blog-figure"&gt;
  &lt;img src="https://www.lokalbot.com/assets/blog/raycast-quick-recall.webp" width="1600" height="1000" alt="Raycast's Quick Recall command listing meetings that mention onboarding, each match labeled title, summary, or transcript." loading="lazy" decoding="async" /&gt;
  &lt;figcaption&gt;Quick Recall in Raycast, with fictional demo data.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2&gt;Two commands&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Quick Recall.&lt;/strong&gt; Type a word and see every meeting where it came up, from titles, summaries, or the transcript itself. Enter reveals the meeting's files in Finder and ⌘Enter copies the matching snippet.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Recent Meetings.&lt;/strong&gt; Lists your last 20 meetings.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Local, like the app&lt;/h2&gt;
&lt;p&gt;The extension makes no network requests. It reads your local LokalBot library, and only after you allow external agents to read your meeting library in LokalBot's privacy settings.&lt;/p&gt;
&lt;p&gt;It needs the LokalBot app installed, which on Mac means Apple Silicon and macOS 15 or later.&lt;/p&gt;

&lt;h2&gt;Install&lt;/h2&gt;
&lt;p&gt;Get &lt;a href="https://www.raycast.com/stevan_bogosavljevic/lokalbot" target="_blank" rel="noopener"&gt;LokalBot in the Raycast Store&lt;/a&gt;. It's the first LokalBot extension for Raycast, so &lt;a href="https://github.com/stevyhacker/lokalbot/issues/new/choose" target="_blank" rel="noopener"&gt;tell us&lt;/a&gt; what's missing or annoying.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Five local models, 6.8 GB of weights</title>
    <link href="https://www.lokalbot.com/blog/five-local-models-6-8-gb" />
    <id>https://www.lokalbot.com/blog/five-local-models-6-8-gb</id>
    <published>2026-09-30T00:00:00Z</published>
    <updated>2026-10-26T00:00:00Z</updated>
    <summary>Since July every model in LokalBot was benchmarked and most defaults swapped for smaller ones. In 0.9.2 the whole stack is 6.8 GB, with faster notes, better speaker labels, and quicker autocomplete.</summary>
    <content type="html">&lt;p class="blog-note"&gt;&lt;strong&gt;Update, October 2026:&lt;/strong&gt; two defaults have changed since this post. Search now uses EmbeddingGemma 2, and autocomplete uses Gemma 4 E2B; see &lt;a href="https://www.lokalbot.com/blog/autocomplete-that-knows-your-meetings"&gt;Autocomplete that knows your meetings&lt;/a&gt;. Current numbers are on the &lt;a href="https://www.lokalbot.com/benchmarks"&gt;benchmarks page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;The stack in 0.9.2&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Transcription:&lt;/strong&gt; Qwen3-ASR 1.7B, MLX 8-bit.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Who spoke when:&lt;/strong&gt; Nemotron 3, Core ML.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Notes and action items:&lt;/strong&gt; Qwen3.5 4B, Q4_K_M in llama.cpp.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Search embeddings:&lt;/strong&gt; Harrier 0.6B, Q8_0.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Autocomplete in any app:&lt;/strong&gt; LFM2.5 1.2B, Q4_K_M.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Screen text:&lt;/strong&gt; Apple Vision OCR, opt-in.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;What changed, in numbers&lt;/h2&gt;
&lt;p&gt;Measured on an M4 Max with 48 GB of memory:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;A 26-minute meeting goes to finished notes in 33 seconds with the model already loaded, decoding at about 85 tokens a second.&lt;/li&gt;
  &lt;li&gt;Speaker error dropped from 43.4% to 14.6% diarization error rate on the AMI corpus. That's against the previous pyannote setup, so it says more about that configuration than about pyannote.&lt;/li&gt;
  &lt;li&gt;Autocomplete latency at the 95th percentile fell from 1.83 s with Gemma 4 E4B to 0.49 s.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;A model that didn't make it&lt;/h2&gt;
&lt;p&gt;MiniCPM5 2B was tested for notes. It was smaller and faster, but it got stuck repeating itself on one summary and assigned action items to the wrong person. Qwen3.5 4B stayed the default: saving a few seconds isn't worth getting wrong who agreed to do what.&lt;/p&gt;

&lt;h2&gt;Also in the app&lt;/h2&gt;
&lt;p&gt;A read-only MCP server and CLI, off by default, let Claude Code or any other MCP client pull context from your meetings.&lt;/p&gt;
&lt;p&gt;There are no numbers yet from 16 GB Macs or other M-series chips. If you run LokalBot on one, especially an M5 or M6, &lt;a href="https://github.com/stevyhacker/lokalbot/issues/new/choose" target="_blank" rel="noopener"&gt;share what you get&lt;/a&gt;. The &lt;a href="https://github.com/stevyhacker/lokalbot/releases/tag/v0.9.2" target="_blank" rel="noopener"&gt;0.9.2 release notes&lt;/a&gt; have the rest.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>A whole workday on local models</title>
    <link href="https://www.lokalbot.com/blog/a-workday-on-local-models" />
    <id>https://www.lokalbot.com/blog/a-workday-on-local-models</id>
    <published>2026-07-21T00:00:00Z</published>
    <updated>2026-10-26T00:00:00Z</updated>
    <summary>LokalBot 0.5 adds Dreaming, which turns a finished day into a morning brief, plus faster autocomplete and answers right in Quick Recall. What the app does, and the models behind it.</summary>
    <content type="html">&lt;p class="blog-note"&gt;&lt;strong&gt;Update, October 2026:&lt;/strong&gt; several default models have changed since this post; the current ones are on the &lt;a href="https://www.lokalbot.com/benchmarks"&gt;benchmarks page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;What it does&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Meetings.&lt;/strong&gt; Detects Zoom, Teams, Meet, and other calls and records you and the other side on two synchronized tracks, with no bot joining the call. Transcription and the summary run on your Mac as soon as the meeting ends.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Dictation.&lt;/strong&gt; Hold ⌥ Space, talk, and release. It's transcribed locally and pasted at the cursor, and the audio is deleted afterwards.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Autocomplete.&lt;/strong&gt; Ghost-text suggestions in almost any Mac text field; Tab accepts. Opt-in.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Recall.&lt;/strong&gt; Ask “what did we decide about this?” and get the answer from your own library, with the source meeting cited and the exact moment ready to replay. Full-text and semantic search cover everything.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Day timeline.&lt;/strong&gt; An optional private timeline of where your time went, with a daily digest.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;New in 0.5&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Dreaming.&lt;/strong&gt; LokalBot can compile a finished day overnight into a morning brief and structured work memory.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Faster autocomplete.&lt;/strong&gt; New installs get the 0.73 GB LFM2.5 1.2B model, and accepting suggestions is more reliable across native apps, Chromium, and input methods.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Answers in Quick Recall.&lt;/strong&gt; Quick Recall can answer right in its compact window instead of always opening the full Ask view.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Scheduled day digests&lt;/strong&gt;, with a prompt you can customize.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;The models in daily use&lt;/h2&gt;
&lt;p&gt;One setup, on a 48 GB M4 Max, all through the bundled llama.cpp with full Metal offload:&lt;/p&gt;
&lt;div class="guide-table-wrap"&gt;
  &lt;table class="guide-table"&gt;
    &lt;caption class="visually-hidden"&gt;Models in daily use&lt;/caption&gt;
    &lt;thead&gt;
      &lt;tr&gt;&lt;th scope="col"&gt;Job&lt;/th&gt;&lt;th scope="col"&gt;Model&lt;/th&gt;&lt;th scope="col"&gt;Quantization&lt;/th&gt;&lt;th scope="col"&gt;Size&lt;/th&gt;&lt;th scope="col"&gt;Speed&lt;/th&gt;&lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;Transcription&lt;/th&gt;&lt;td&gt;Granite Speech 4.1 2B&lt;/td&gt;&lt;td&gt;Q4_K_M + F16 projector&lt;/td&gt;&lt;td&gt;2.3 GB&lt;/td&gt;&lt;td&gt;Faster than real time&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;Summaries and chat&lt;/th&gt;&lt;td&gt;Qwen3.5 4B&lt;/td&gt;&lt;td&gt;Q4_K_M&lt;/td&gt;&lt;td&gt;2.7 GB&lt;/td&gt;&lt;td&gt;About 100 tokens/s&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;Autocomplete&lt;/th&gt;&lt;td&gt;Gemma 4 E4B&lt;/td&gt;&lt;td&gt;UD-Q5_K_XL&lt;/td&gt;&lt;td&gt;6.7 GB&lt;/td&gt;&lt;td&gt;About 78 tokens/s&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;Embeddings&lt;/th&gt;&lt;td&gt;Qwen3-Embedding 0.6B&lt;/td&gt;&lt;td&gt;Q8_0&lt;/td&gt;&lt;td&gt;0.6 GB&lt;/td&gt;&lt;td&gt;—&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;th scope="row"&gt;Diarization&lt;/th&gt;&lt;td&gt;pyannote community-1&lt;/td&gt;&lt;td&gt;Core ML&lt;/td&gt;&lt;td&gt;0.1 GB&lt;/td&gt;&lt;td&gt;—&lt;/td&gt;&lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;The full list of changes is in the &lt;a href="https://github.com/stevyhacker/lokalbot/releases/tag/v0.5.0" target="_blank" rel="noopener"&gt;0.5.0 release notes&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Introducing LokalBot</title>
    <link href="https://www.lokalbot.com/blog/introducing-lokalbot" />
    <id>https://www.lokalbot.com/blog/introducing-lokalbot</id>
    <published>2026-07-01T00:00:00Z</published>
    <updated>2026-10-26T00:00:00Z</updated>
    <summary>LokalBot is a free, open-source Mac app that records and summarizes meetings, autocompletes your typing in any app, and tracks where your day went, with every model running on your Mac.</summary>
    <content type="html">&lt;p class="blog-note"&gt;&lt;strong&gt;Update, October 2026:&lt;/strong&gt; this is the original announcement. The default models have changed since (see &lt;a href="https://www.lokalbot.com/blog/five-local-models-6-8-gb"&gt;Five local models, 6.8 GB of weights&lt;/a&gt;), the app now checks for updates (see the &lt;a href="https://www.lokalbot.com/privacy"&gt;privacy policy&lt;/a&gt; for every network use), and LokalBot also runs on &lt;a href="https://www.lokalbot.com/blog/windows-and-linux-alpha"&gt;Windows and Linux&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;One app instead of several&lt;/h2&gt;
&lt;p&gt;Recording meetings, autocompleting text, and keeping track of the day usually means several separate apps, each with its own subscription and its own cloud. LokalBot does all of it in one Mac app, with no third-party inference cost. It's free and open source under the GPLv3.&lt;/p&gt;

&lt;h2&gt;The model stack&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Summaries, chat, and autocomplete&lt;/strong&gt; run on a bundled llama.cpp: in-process for autocomplete's low latency, llama-server otherwise. Any of them can point at your own GGUF file, Ollama, an OpenAI-compatible endpoint, or Apple Intelligence.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Transcription&lt;/strong&gt; uses Granite Speech 4.1, Parakeet, Whisper, or Qwen3-ASR through Core ML and MLX on Apple Silicon. Parakeet runs at about 190 times real time.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Semantic search&lt;/strong&gt; uses Qwen3-Embedding 0.6B on a second llama-server, with vectors in SQLite and brute-force cosine similarity. At personal scale, brute force is instant, and it adds no dependencies.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Speaker separation&lt;/strong&gt; is optional: pyannote, through FluidAudio, splits the other side of a call into individual speakers.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;An in-app Hugging Face browser&lt;/strong&gt; searches and downloads GGUF models, with a note on whether each one fits your Mac.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Launch defaults&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Transcription:&lt;/strong&gt; IBM Granite Speech 4.1 2B, Q4.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Summaries:&lt;/strong&gt; Qwen 3.6 35B-A3B, Q4_K_M.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Autocomplete:&lt;/strong&gt; Gemma 4 E4B, Q5 XL.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These run well on an M4 Max with 48 GB of memory. With 16 to 24 GB, choose one of the lighter alternatives in the app's model settings.&lt;/p&gt;

&lt;h2&gt;Private by design&lt;/h2&gt;
&lt;p&gt;After the one-time model download, LokalBot works offline. Optional screenshots are sealed with AES-GCM and deleted automatically. LokalBot needs an Apple Silicon Mac with macOS 15 or later.&lt;/p&gt;
&lt;p&gt;Get it from &lt;a href="https://github.com/stevyhacker/lokalbot" target="_blank" rel="noopener"&gt;GitHub&lt;/a&gt;, and join the &lt;a href="https://www.reddit.com/r/LocalLLaMA/comments/1ukhpnl/lokalbot_fully_local_macos_app_meetings/" target="_blank" rel="noopener"&gt;launch discussion on r/LocalLLaMA&lt;/a&gt;, especially if you have better local speech or small, fast autocomplete models to suggest.&lt;/p&gt;</content>
  </entry>
</feed>
