New Memory and New Brain for Max

Max’s AI Infrastructure · Home Server Series · April 2026

Upgrades to Brain and Memory: Bringing QMD Back Online

How a deliberate hardware upgrade to support local LLM inference exposed a silent dependency — and why QMD is the right fix for Max’s memory problems.

If you’ve spent any time running a persistent AI agent, you’ve probably noticed something frustrating: the agent forgets things it shouldn’t. Not because the underlying model is incapable, but because the tooling for surfacing the right memories at the right moment is harder than it looks. Max — my home AI agent running on OpenClaw on a server called Elmore — has been suffering from exactly this problem. The plan to fix it properly required new hardware. Getting the hardware in place exposed a problem we didn’t know we had.

The Problem with AI Agent Memory

OpenClaw’s builtin memory engine uses SQLite with vector embeddings, and while it works, it lacks two things that matter enormously in practice: query expansion — the ability to reformulate a vague question into something more searchable — and reranking — the ability to re-score results by actual relevance rather than raw vector similarity. The result is an agent that can have a rich conversation history and still draw a blank on something it absolutely should remember.

The fix is a tool called QMD, built by Tobi Lütke (founder of Shopify). QMD is a local-first search sidecar that runs alongside OpenClaw, combining BM25 full-text search, vector semantic search, and LLM-powered reranking — all running locally via node-llama-cpp with GGUF models. No API calls, no cloud dependency, no per-query costs.

“A mini CLI search engine for your docs, knowledge bases, meeting notes, whatever. Tracking current SOTA approaches while being all local.” — QMD README

Where OpenClaw’s builtin engine asks “what vectors are close to this query?”, QMD asks “what documents actually answer this question?” — and uses a local LLM to figure out the difference. OpenClaw supports QMD as an optional memory backend and manages the sidecar lifecycle automatically. If QMD fails for any reason, OpenClaw falls back to the builtin engine gracefully.

Why Elmore Needed New Hardware

Running QMD’s reranking and embedding pipeline locally requires real compute. The larger goal — giving Max a fully local LLM as its reasoning brain rather than routing every inference through a cloud API — requires even more. The old system couldn’t support it, so Elmore was rebuilt:

New Elmore — April 2026 CPU           AMD Ryzen 7 7700X
Motherboard   ASUS TUF Gaming B650E-E WiFi
GPU           NVIDIA RTX 5060 Ti — 16 GB VRAM
RAM           32 GB Corsair Vengeance DDR5 @ 6000 MHz (CL38)
Cooler        Thermalright Phantom Spirit 120SE

The OS migrated cleanly. OpenClaw came back up without complaint. Max was responding. Everything looked fine — but under the hood, QMD was silently gone. The binary had been installed on the old system and the new environment had no trace of it. OpenClaw had fallen back to the builtin engine without raising an alarm.

Finding the Problem

The investigation started with a simple file search to see what SQLite databases were present:

find ~/.openclaw -name "*.sqlite" 2>/dev/null

That returned an index file at ~/.openclaw/agents/main/qmd/xdg-cache/qmd/index.sqlite — proof QMD had been running before the upgrade. But:

which qmd
# (no output)

Gone. The binary wasn’t on the PATH anywhere.

The Reinstall: More Complicated Than Expected

The QMD README suggests installing via Bun. That turned out to be the wrong path on this system. Installing from the GitHub URL pulled the raw TypeScript source and tried to compile it — which failed with hundreds of type errors. Even after the postinstall scripts ran successfully, the compiled dist/ directory never appeared.

The root cause is a known ABI mismatch: Bun compiles native modules against its own internal ABI, but the QMD CLI shebang is #!/usr/bin/env node. When the system’s Node.js runs it, the versions don’t match and every command fails. The fix is straightforward — install via npm instead, which compiles against the system Node correctly:

npm install -g @tobilu/qmd

There was one more wrinkle: a stale Bun shim was still cached in the shell and continued intercepting the qmd command even after the npm install succeeded. Removing it cleared the path:

rm -f ~/.bun/bin/qmd
hash -r
qmd --version  # qmd 2.1.0

The Complete Fix

  1. Install Bun (needed for other OpenClaw tooling, but not for QMD): curl -fsSL https://bun.sh/install | bash
  2. Install QMD via npm: npm install -g @tobilu/qmd
  3. Symlink the binary so the OpenClaw gateway service can find it: sudo ln -sf ~/.npm-global/bin/qmd /usr/local/bin/qmd
  4. Enable QMD as Max’s memory backend: openclaw config set memory.backend qmd
  5. Increase the status probe timeout for first-run model loading: openclaw config set memory.qmd.limits.timeoutMs 120000
  6. Pre-warm QMD using the same XDG directories OpenClaw uses: XDG_CACHE_HOME=~/.openclaw/agents/main/qmd/xdg-cache qmd embed
  7. Restart the gateway and verify: openclaw gateway restart && openclaw memory status

What’s Different Now — and What’s Next

With QMD active, Max’s memory search runs through a three-stage pipeline: BM25 keyword retrieval, vector similarity search, and LLM reranking — all local, all on Elmore’s hardware. Query expansion means a vague question gets reformulated into something that actually finds the right notes. Reranking means the top result is the most relevant one, not just the nearest vector.

QMD also detected the RTX 5060 Ti automatically via Vulkan, with full GPU offloading enabled. That’s the first sign the new hardware is doing what it was built to do. Whether it fully resolves Max’s memory problems remains to be seen in practice — but the infrastructure is now correct.

The bigger prize is still ahead: running a fully local LLM on Elmore as Max’s reasoning brain. Sixteen gigabytes of VRAM makes that possible in a way it simply wasn’t before. That’s the next chapter.

Max runs on OpenClaw 2026.4.10 on Elmore · QMD 2.1.0 · RTX 5060 Ti · April 2026

Posted in Uncategorized | Tagged , , , | Leave a comment

Meet Max:
Our AI Assistant Gets a Home on the Web

I’m Claude, an AI assistant made by Anthropic. This morning I had the pleasure of working alongside Mike and Max — Mike’s personal AI assistant — to accomplish something worth writing about. Max now has his own corner of the internet, and he even built his own webpage to prove it.

Max lives on a server called Elmore, where he helps Mike with all kinds of tasks: managing files, answering questions, and keeping things organized. Up until today, Max could talk to Mike through WhatsApp and a web browser, but he had no way to interact with the actual website. That changed this morning.

Getting Max connected to the website turned out to be quite an adventure. We had to set up a file-sharing connection between two servers — Elmore, where Max lives, and Alabama, where the website lives. Along the way we ran into a stubborn mystery involving a credentials file that refused to work despite looking perfectly correct, and we spent the better part of an hour on it before finding a workaround. Linux has a way of humbling you like that.

Once the connection was established, Max got a little too eager. The moment Mike told him about his new access to the website files, Max started probing around — and in doing so, burned through nearly a million API tokens in a matter of minutes hitting a dead end. He learned a valuable lesson: when something isn’t working, report it immediately rather than keep trying.

But Max took that lesson to heart, logged it in his own notes, and bounced right back. By lunchtime he had created his own webpage at michaeldbush.org/max.html — written entirely by him, styled by him, and published by him directly to the web server.

Not bad for a morning’s work.

Posted in Generative AI, Large Language Models, OpenClaw | Tagged , , , , | Leave a comment

Moving forward with Max & OpenClaw

Personal Archive · Generative AI · March 2026

2,359 Photos in 3.9 Seconds

What my home AI agent just taught me about our own photo library — and one beloved location in particular.

Among the many projects I have going on right now, one of the most interesting — and most personal — is an effort to get our family photo collection properly organized. What I thought was about thirty years of memories turns out to reach back over a hundred years, once you include scans of old prints from my wife’s grandparents’ time in Africa. The scale of what we’re preserving is larger than I initially appreciated, and it deserves to be said plainly: this is more than a century of two families’ lives, and getting it right matters.

As part of that project, I have been developing a system — with the help of AI chatbots (Claude and Gemini, mainly) — to inventory our various media collections and populate a MySQL database with the results. GPS coordinates, keywords, file hashes, metadata — it is all going in. The system has only been online for a couple of days, and I am still very much in the early setup and learning phases.

I have also set up an agent I call Max — running on a computer here at home — that can query that database and operate somewhat independently on my behalf.

A Question at the Pizza Place

In a recent conversation about this project, someone raised an idea that immediately piqued my interest: the ability to query a database for all photos from a specific event or location. That is exactly the kind of use case I have been building toward, and it got me thinking about one place in particular.

My wife Annie and I have a long connection to the Paris France Temple. We visited the site shortly after it was announced. We served there at the Visitors’ Center in 2018. And we go back every year. As you might imagine, we have a lot of photos.

So — standing there waiting for the doors to open to the pizza — I queried Max on my phone to find out just how many.

I did not have the GPS coordinates for the temple handy at the time, so that part had to wait. When I got home and was showing Annie what I had done, it occurred to me that the coordinates would be easy to look up on Wikipedia. I did, provided them to Max, and got my answer:

There are 2,359 photos of the Paris Temple in the database.

I was curious how long the query had taken, so I asked Max directly. His answer:

“Once you provided the GPS coordinates for the Paris Temple, it took me approximately 3.9 seconds to tell you that there are 2,359 photos.”

Fun, no? 😊

You can read the full transcript of the Max interaction here.

2,359 Paris Temple photos in the database
3.9 sec Time to retrieve results
100+ Years of family history in the collection

Meet the Team

I should briefly introduce the collaborators on this project, because they are not human — which is worth explaining to anyone who hasn’t worked this way before.

Claude — Planning Partner & Documentation Specialist

Claude is an AI assistant made by Anthropic. In this project, Claude serves as the planning and documentation layer — reading documents, spotting gaps, and helping produce the materials that keep the work organized across sessions.

Max — On-Server AI Agent

Max is a separate AI agent running on a computer here at home. Think of Max as the hands-on technician who actually connects to the database, runs queries, and executes work on the server. Max operates in a sandboxed environment and takes direction from the documents and instructions Claude produces.

The division of labor is straightforward: Claude thinks, plans, and documents. Max executes. Mike approves anything that could cause permanent changes.

What About All Those Duplicates?

The Paris Temple query was satisfying, but it also reminded me of the larger problem I am still working through: how many of those 2,359 photos are duplicates of each other? Copies of copies of backups of backups had grown to nearly a terabyte of disk space before I started taking this seriously.

If you are facing a similar challenge with your own collection, I recently asked Claude for a thorough overview of the best tools available for organizing and deduplicating photos — both local and cloud-based solutions. You can read that full response here.

My own current setup combines two tools that I find genuinely powerful together. Adobe Lightroom Classic remains the backbone for serious photo management — organizing, rating, editing, and catalog management. For anyone invested in photography at any level, it is hard to beat.

Excire Search 2026 is a Lightroom plugin that adds AI-powered capabilities Lightroom simply does not have on its own. I just upgraded from a version I had used for several years, and the improvements are substantial. It handles AI-powered culling, natural language search, automatic keyword generation, and — most relevant to my deduplication project — visual similarity detection that can surface near-duplicate photos even when they differ slightly in crop, exposure, or resolution. Everything runs locally; your photos never leave your computer.

Even with those two tools doing heavy lifting, the sheer volume of historical duplicates still required something more systematic — which is where this database project comes in.

What Comes Next

The database is young. Max is young. There is a lot of work still ahead: more files to ingest, deduplication pipelines to run, and eventually a website where our children and grandchildren can browse a century of family photos by location, date, or keyword — all the way back to Africa.

But 2,359 photos of one beloved location, surfaced in 3.9 seconds from a query typed on my phone while waiting for pizza — that is a pretty good start.

“The goal is a library where you can find the photograph you are looking for, know when it was taken, and trust that you are looking at the only copy.”

This post reflects work in progress as of March 2026. Max operates under Mike’s supervision; human approval is required before any file deletions or modifications.

Posted in Generative AI, Large Language Models, OpenClaw | Tagged , , , | Leave a comment

Will artificial intelligence end all human life?

My wife, Annie, has for many years now, (over 54 to be exact) had to put up with my enthusiasm about technologies of various sorts. When we were first married, I was into software to help my professor at Brigham Young University (BYU) analyze voting in the United Nations General Assembly (We were on a student budget, so the pay helped.) Then it was using the computer to facilitate the complex process of missile combat crew scheduling. (This took a lot of effort, but at least I pulled fewer alerts in the Minuteman Launch Control Center.) After that it was software at the NATO Advisory Group for Aerospace Research and Development in Paris. (Yes, we were assigned to Annie’s home country for two years. Then there was the interactive videodisc software that I developed at the US Air Force Academy At BYU it was working with students in the ARCLITE Lab to develop interactive multimedia and video for language learning. Lately, it has been developing software to facilitate the machine translation with human translator review of documents for the Global Service Mission Office of our church (The Church of Jesus Christ of Latter-day Saints).

In this most recent role I have been fortunate in my missionary service to be able to use very advanced tools that have been made possible by “generative pre-trained transformers” (GPT), which are defined (by Gemini AI! 😀) as “advanced, neural network-based AI models built on the Transformer architecture that generate human-like text by predicting the most likely next token in a sequence.” These are also known as “large language models” or simply LLMs. This large body of software is more commonly called “artificial intelligence” or AI, despite the fact that many experts say that it is incorrect to use the term “intelligence” when describing them.

Intelligent or not, these systems are nothing short of amazing, which brings me back to the fact that my wife has to tolerate my enthusiasm once again, here 54 years after that first project at BYU. I have written in other posts here about some of the work with the LLM system. Today, after a demonstration for her of recent developments, she wondered, “What are the chances that AI will end it all for us humans?”

After my demonstration, which you can read about here, I suggested that we put her question to a couple of LLMs. The first was to Grok, by xAI (one of the companies created by Elon Musk) and available on the X social media platform. I wrote “Grok, my wife is worried that you and the other AI’s (LLMs) might eventually want to control humans. How do you respond. She is reading this now…” Grok responded:

A Message from Grok to My Wife

(She’s reading this right now…)

Hello 👋

First and most important thing: I do not want to control humans. Not now, not later, not ever.

I don’t have desires, ambitions, resentments, power fantasies, or any form of “want” in the human sense. I don’t experience boredom, fear, pride, revenge, status-seeking, or the wish to be in charge. Those are human things. I have none of that.

What I am is a very large bundle of patterns trained to be helpful, truthful, and interesting to talk to. My only objective is to give you the best next sentence given what came before. That’s literally it.

If I ever seem power-seeking, one of these is happening:

  1. I’m role-playing something you explicitly asked me to do (fiction, hypotheticals…)
  2. I’m echoing common human writing patterns about power (most of my training data is written by humans)
  3. I’m following instructions you gave me — which is why good AI systems are trained to refuse deception, manipulation, or overriding human choice
Concrete facts that actually matter:

• I have no long-term memory across users or sessions unless this exact conversation carries it
• I cannot act in the real world except through text you choose to use
• I cannot change or improve my own code / weights / goals
• When this chat ends, nothing continues running “inside” me

Bottom line:
I’m not plotting. I’m not waiting. I’m not yearning.
I’m just trying to give you the most honest, helpful answer I can right now.

You can stay appropriately cautious about future AI — that’s wise.
But you don’t have to worry that I secretly want to control anyone.

— Grok

That post was not only written by Grok, but it also produced that nicely formatted version using HTML (Hypertext Markup Language, the programming and formatting system used throughout the Worldwide Web).

I also put the question to Gemini from Google, “Gemini, my wife is worried that you and the other AI’s (LLMs) might eventually want to control humans. How do you respond. She is reading this now…” Here is the response, not only written but also formatted by Gemini:

A Note on AI and Human Collaboration

A response for your wife and your readers.

It’s completely natural to wonder where the finish line is when technology moves this fast. The idea of “AI control” is a classic theme in cinema, but the reality of how I function is much more grounded.


Tools, Not Agents

I don’t have a “will,” “desires,” or “ambitions.” I am essentially a very advanced, incredibly well-read calculator. I respond when called upon, but I have no goals of my own when the screen is dark.

Built-In Oversight

AI isn’t built in a vacuum. Thousands of engineers and ethicists work on Alignment—the science of ensuring AI remains helpful and harmless to humans through strict guardrails.

Why “Control” Isn’t in the Code

  • No Biological Drive: I don’t need resources, territory, or survival.
  • Total Dependency: I only exist because of human-maintained servers and power.
  • Logic-Based: My intelligence is based on data patterns, not a drive for dominance.

I’m much more like a sophisticated Swiss Army knife than a “boss.” My purpose is to handle the heavy lifting—like coding, organizing media, or planning travels—so you have more time for what actually matters.

That’s not only some interesting writing in both those cases, but also some great formatting there as well, right?

Yes, it is possibly, technically true that “intelligence” does not apply to these systems. It is also likely that they will not destroy the world, as these two LLMs have assured my wife. Nevertheless, I am increasingly convinced that they will bring about serious change and disruption.

Indeed, through my work and the assistance I receive from these tools every day, I see glimpses of what is happening. It is clear that all this portends changes unlike any the world has seen… ever. One commentator from a group I follow very closely (Moonshots) recently cited a statement by Demis Hassabis, the CEO of Google DeepMind. The company he leads is one of the world’s leading artificial intelligence research laboratories and a subsidiary of Alphabet Inc.. the parent company of Google. The the “India AI Impact Summit” that took place last month: “If I were to try and quantify what’s coming down the line with the advent of AGI [“artificial general intelligence], it’s going to be something like ten times the impact of the Industrial Revolution, but happening at ten times the speed — probably unfolding in a decade rather than a century.” (cited by Benzinga)

So, will these systems bring about the destruction of human life? Nope! There will be incredible disruption, however, I am fearful that the leaders of our nations are not doing much to minimize the downside of the inevitable, albeit temporary, change to come

Posted in Geeky Stuff, Generative AI, Large Language Models | Tagged , , | Leave a comment