July 3, 2026 — Matteo Merola

How I Replaced My Cloud AI Assistant with a Self-Hosted Agent

What worked, what broke, and what I wish I'd known before migrating to a self-hosted personal agent.

I used to spread my AI usage across four or five different services. A chat app for general questions. A coding assistant in my editor. A separate tool for email summarization. Another for scheduling. Each one had its own subscription, its own context window, and none of them knew what the others were doing.

The turning point wasn't a privacy scare or a billing shock, though both played a part. It was the realization that I was spending more time switching between assistants than I was saving by using them. I'd ask one to summarize a thread, then manually paste the summary into another so it could draft a reply. I had five tools and zero integration.

The setup

I run humux on a small home server — an Intel NUC with 32GB RAM. The entire stack is one Docker container: the agent runtime, the admin UI, voice processing, and the database. No sidecars, no Redis, no Kubernetes. Total resource usage at idle is about 400MB RAM and negligible CPU.

docker compose
services:
  humux:
    image: ghcr.io/mattmezza/humux:latest
    volumes:
      - ./data:/app/data
      - ./config.yml:/app/config.yml
    ports:
      - "8080:8080"
    restart: unless-stopped

That's the whole deployment. The config file defines my agents, their tools, and which LLM provider to use. I started with Anthropic's API for the reasoning model and added a local Ollama instance later for tasks where latency matters more than capability.

What I replaced

I consolidated five separate tools into three humux agents:

The key difference: all three share the same memory database. When I tell sage about a project decision, forge remembers it during the next code review. When atlas reads an email about a deadline, sage can reference it when I ask about the project timeline. Context flows across agents because they share the same infrastructure.

What broke (at first)

The migration wasn't seamless. Three things caught me off guard:

Email credentials were the hardest part. Not technically — the vault handles encryption fine — but getting app passwords from Google, configuring IMAP with the right OAuth scopes, and testing CalDAV endpoints was a full afternoon of work. Cloud services hide this complexity; self-hosting exposes it. The Bitwarden import helped for passwords I already had stored.

Skill authoring took iteration. humux uses markdown skill files to teach agents how to use CLI tools. My first attempt at an email skill was too verbose — the model got confused by the wall of options. I rewrote it to show just the three most common patterns (send, search, list) and added edge cases only when the agent asked for help. The lesson: skills work best when they're concise.

Memory needed tuning. Out of the box, the agent remembered too much. Every offhand comment became a memory entry. I learned to configure the importance threshold and lean on the memory hygiene features (deduplication, reflection filtering) to keep the memory store useful rather than noisy.

What I gained

Three months in, the advantages are clear:

What I'd do differently

If I were starting over:

The migration took a weekend for the basics and about two weeks of incremental tuning to get everything working smoothly. It's not zero effort. But the result is an AI assistant that actually knows my workflow, runs on my hardware, and costs less than what I was paying before. That's the trade-off, and for me it was worth it.

humux is open-source and runs in a single Docker container. Try it yourself →