EN · DE

← Max Riechelmann

Personal project

Personal AI Agent Infrastructure

An assistant I run myself — my hardware, my tools, my rules. It started in August 2026 as a wake-word experiment and became the thing I actually use: voice at the desk, a watch on my wrist, a root server that holds the tools. Everything on this page is in daily operation, not a slide.

I build it the way I build at work: run it in production, write down why, and keep the failure modes where the next person can read them. What follows includes the decisions that turned out wrong.

Two machines, one assistant

   Nyx — desktop, home LAN          Button — root server, always on
 +-------------------------------+   +-------------------------------+
 | wake word + VAD (on device)   |   | HTTPS gateway (watch, phone)  |
 | speech in / speech out, HUD   |   | headless agent sessions       |
 | speakers, scanner, documents  |<=>| 21 MCP servers                |
 | 4 MCP servers                 |ssh| dashboard collector, services |
 +-------------------------------+   +-------------------------------+

The split is not symmetry, it is reachability. Tools that need the home network — the speakers, the scanner, anything else with a local address — only work from the desktop. Everything else lives on the server, because the server is the one that is always on. A session hook tells every agent session which of the two machines it woke up on, since the answer changes what it is allowed to do.

Requests are routed between them by keyword match, not by a model call. Asking a model where to run the request would have cost an extra round trip per turn and eaten exactly the savings that moving to the local CLI had produced.

Ways in

The tool layer

Everything the assistant can actually do sits behind the Model Context Protocol: 21 servers on the root server, 4 on the desktop. Messaging, tasks and notes, media and home devices, health and training data, documents, a browser, a literature search.

Five of them I wrote from scratch, because no usable server existed — among them the speakers, a chat platform, and two device integrations whose vendors offer no public API at all. Three more are upstream projects carrying local patches. Both live in their own repository, separate from where they run: the running installs hold tokens and session data and are deliberately not synced, which made them the only copy of work that could not be reinstalled.

That inventory is also why the personal dashboard collects through the same MCP servers rather than calling a dozen vendor APIs itself. The logins, token refresh and local repairs already exist once. Doing it twice means breaking twice.

One chain, end to end

 watch --> phone (Health Connect) --> self-written Android app
       --> gateway --> SQLite --> MCP server --> agent / dashboard

The clearest example of how far it goes. The vendor offers no consumer cloud API, so the missing link got written: an Android app that reads the phone's health store and pushes to the server every 30 minutes. From there the data is a normal MCP source — the assistant can answer from it, and the dashboard renders it, without either of them knowing where it came from.

Memory and configuration

What I got wrong

What it runs

None of this is a product evaluation. It is the same habit I bring to engineering: build it, run it in production, measure it, and write down why — including the parts that did not work.