Post

My Self-Hosted AI Stack, Two Months Later

What changed since I built my AI assistant in June: one assistant became three bots, a task manager swap, 200+ skills, and a stack that runs most of my life in the background.

My Self-Hosted AI Stack, Two Months Later

In June I posted about building an AI assistant that lives on my server. Two months later, singular feels wrong. Same framework, same server, but one assistant turned into a small fleet, and the stack under it changed more than the frontend did.

One became three

The biggest change: I stopped running one assistant and started running one generalist plus two specialists. Hermes Health tracks sleep, weight and habits and writes into my daily notes every morning. Hermes Study Coach watches my school schedule and runs Anki prep windows, capped at one message a day. Both are separate Telegram bots with their own models, their own memories, their own narrow toolkits. The generalist keeps the heavy work: research, code, automation.

The reason is boring and practical: context. A bot that can do everything carries everything, and every extra skill makes every answer a little slower and a little noisier. The specialists are fast because they are physically incapable of doing anything else.

The tools changed

The most visible change under the hood: my own Life OS projects app got replaced by Vikunja as the project source of truth. I migrated everything, 16 projects, 79 tasks, done states intact. Subjects are projects now, tests are tasks with due dates. Habits moved to Habitica, flashcards to AnkiConnect, which talks to the Anki running on my PC.

In June the integrations were three MCP servers I wrote by hand. Now it is a web of standard self-hosted tools wearing the same interface. Same idea as June, just more of it, and all of it reachable from chat.

Skills, memory, notes

Skills went from a curated handful to over 200 packaged workflows across the setup. Document conversion, humanizing, code review, study planning, health tracking. Adding one is writing an instruction file, so the pile keeps growing.

Memory lives in Mnemosyne, the second brain in an Obsidian vault, and an end-of-day job writes my daily notes for me every evening. The morning briefing and the day planning got merged into one 5 AM job that reads email, calendar and yesterday’s notes and sends a single message.

Models

The model handling changed too. A local gateway routes requests to the providers, mostly DeepSeek V4 Flash through OpenCode Go, and the main agent has been running on ox-alpha-free lately. Swapping models is a config change, not a migration. That decoupling turned out to be worth more than I expected.

What it feels like

Most of my life now runs in the background of this stack. Sleep data lands in my notes before I wake up. Test reminders arrive days early. Tasks stay in sync between calendar, watch and Vikunja. When it works, it feels like nothing, and that is the point.

It still hallucinates occasionally and the skill library still gums up if I ignore it. Same caveats as June. But the direction is compounding: every tool I self-host becomes a capability, and every capability gets reused by all three agents. I would rather maintain three small bots than rent one big assistant.

This post is licensed under CC BY 4.0 by the author.