Building my personal AI Assistant
I built an AI assistant that runs on my homelab. I named her Tatl, after the fairy from Majora’s Mask.
In May I attended AI Engineer Singapore, Singapore Foreign minister Vivian Balakrishnan gave a keynote about his personal AI setup, a self-hosted assistant running on a Raspberry Pi. It was his second brain. He shared the setup in a public gist.
It clicked so I had to build my own.
What Tatl Can Do
Tatl connects to the services I use daily:
- Gmail - summarises yesterday’s emails every morning
- Google Calendar - briefs me on today’s agenda each morning
- Garmin + Strava + Oura - pull my fitness data and training plans on demand
- Home Assistant - check cameras
- Homelab - monitors services like Uptime Kuma and Grafana, sends alerts when something is down
- Voice notes - send a voice message and she transcribes it locally via whisper.cpp
The morning briefing means I can mute most of my notifications during the day.
Every message is processed with persistent memory. She builds up a knowledge graph over time and recalls relevant context before responding.
Visualising the Wiki
The memory graph synthesises into markdown pages that Tatl writes and maintains. To browse them I use Quartz - a static site generator that turns markdown into an Obsidian-style website with graph view. Self-hosted privately.
The Stack
Built on NanoClaw.
- Runs on the Mac Mini and handles message routing
- Each conversation spins up an isolated Docker container running Claude
- Credentials are managed through a local vault - containers never see API keys
- Memory is stored in a local knowledge graph via mnemon
- Voice notes transcribed locally via whisper.cpp
- Wiki is visualised using Quartz
What I learned
I tried local models first - Qwen, Mistral, Gemma. At the time, they weren’t reliable enough for tool use. The ecosystem is moving fast though and I will revisit this.
The memory layer is what makes it feel different. Without it, it’s just a chatbot with integrations.
Get your own
NanoClaw is open source and runs on anything from a Raspberry Pi to a Mac Mini.
- Get a Claude API key
- Start with Telegram as the main messaging channel.
Then explore from there, you’ll find yourself adding more of your day-to-day to it naturally.
The hardest part was finding a name for the agent.