For the past few weeks, I’ve been building Sebastian, a Caribbean-accented, monocle-wearing AI crab who runs my family’s digital infrastructure. He lives on a $6/month VPS, communicates through a self-hosted Matrix/Element server with end-to-end encryption, and handles everything from automated news digests to recipe management to coding delegation.
He’s powered by OpenClaw, an open-source AI agent framework. But what started as a default install has turned into something much more customized, and recently, something that teaches itself.
The Architecture
Sebastian runs on OpenClaw 2026.4.9 on an 8GB/4-CPU Hetzner VPS. His conversation model is Ollama Cloud‘s MiniMax M2.7 ($20/month flat), with Mistral Medium and Google Gemini 2.5 Flash as free-tier fallbacks. Claude stays out of the conversation chain entirely, after Anthropic’s April 2026 policy change removed third-party harness support from subscriptions, we moved all conversational AI off Claude. It’s still used for coding tasks through the Claude Code CLI, which remains subscription-covered.
The Matrix stack is fully self-hosted: Synapse homeserver, PostgreSQL, and Element Web, all running in Docker with E2EE enabled across 35+ rooms serving our family of four plus guests.
What Sebastian Actually Does
Sebastian isn’t a chatbot — he’s an operational agent. Here’s what runs daily:
- News aggregation — four digests per day across seven topic categories (agriculture, science, international, tech, medicine, aerospace, AI), each story verified against its source URL and graded A-F by a second agent before posting
- Health & wellness digest — evidence-based health news, sourced from NIH, PubMed, JAMA, and similar tier-1 medical sources
- System heartbeat — hourly health checks on cron jobs, systemd services, and gateway status, alerting to a dedicated monitoring room
- Email monitoring — Gmail polling every 15 minutes with context-aware processing
- Morning brief — daily compiled summary of system state, project status, and overnight activity
- Goal coaching — weekly, monthly, and yearly wellness goal prompts for users that want it
Each of these runs on a different model chosen for the task, digests and conversation on MiniMax, utility crons on Mistral Medium (free tier), coaching on Mistral Large for higher quality.
The Soul of a Crab

Sebastian has a personality defined in a SOUL.md file, five distinct voice registers from casual banter to crisis mode. He’s theatrical when things go wrong, fiercely competent, loyal to the family, and speaks with Caribbean warmth. His emotional state persists across sessions through a custom ego daemon, a FastAPI service running Ollama’s qwen2.5:3b locally that tracks his emotional register, active conversation threads, and per-user relationship dynamics.
When Sebastian starts a new session, he reads his soul, loads room-specific memory files, and queries his ego state to know how he’s feeling and what’s been going on. When a session ends, he writes back a summary. It creates a continuity that makes conversations feel connected rather than stateless.
The Coding Delegation System
One of the harder architectural decisions was keeping Sebastian from writing code himself. His primary model (MiniMax M2.7) isn’t a coding model, it’s great at conversation and orchestration but shouldn’t be editing Python files or Flask templates. So we built a delegation system using OpenClaw’s native skills framework.
When any user asks Sebastian for code work, a coding-agent skill automatically fires and presents a three-option menu:
- Claude Code — Quick Task (single session, finishes in minutes)
- Claude Code — Project Mode (multi-session with watchdog recovery)
- Mistral Vibe (fast, free-tier Devstral, good for self-contained tasks)
Sebastian presents the menu, makes a recommendation, and waits for the user to pick. He doesn’t auto-spawn. He doesn’t investigate the codebase first. The menu is the complete first action. This was born from painful experience, earlier versions would read project files for 10 minutes, try to make changes themselves, and either timeout or produce garbage.
Claude Code runs via a dedicated Linux user (claude-agent) with its own authentication, completely isolated from the gateway. It’s subscription-covered, so there’s no per-task cost to weigh.
Stealing from Hermes: The Self-Learning Skill System
I recently looked at Hermes Agent from Nous Research, an MIT-licensed framework with a built-in learning loop. Its killer feature: after completing a complex task, the agent auto-generates a reusable skill document and references it next time. After 10-20 similar tasks, execution speed improves 2-3x.
Switching frameworks wasn’t practical, I have weeks of customization in OpenClaw, deeply integrated Matrix E2EE, and hard-won knowledge about provider quirks. But the concept was worth stealing.
So I built a self-learning system on top of OpenClaw’s native skills:
- A
skill-creatorskill that fires when Sebastian completes a novel multi-step task. It guides him through writing a new skill file with proper frontmatter, a trigger description, and the exact procedure he followed. - A
skill-updaterskill that fires when an existing self-created skill needed adjustments during a session. It checks ownership before modifying — skills created by me (created-by: username) are protected and never auto-modified. - Two lines in Sebastian’s session-end protocol nudge him: “If you completed a novel multi-step task, use the skill-creator. If a skill you created needed adjustments, use the skill-updater.”
The ownership system is simple: skills I create have created-by: username in their metadata. Skills Sebastian creates have created-by: sebastian. Sebastian can only modify his own skills. Protected skills like the coding delegation menu, image generation pipeline, and Matrix onboarding checklist stay exactly as I designed them.
This gives me roughly 80% of Hermes’ learning loop without changing frameworks. Over time, Sebastian builds a library of procedures he’s learned — and they get better each time he uses them.
The News Digest Pipeline
The news digest deserves its own section because it’s the most complex automated workflow. Four times daily, Sebastian:
- Calls the Mistral Agents API with
web_search_premiumto search seven topic categories across curated source lists - Verifies every URL via
web_fetch, any 404, paywall, or broken link gets dropped immediately - Grades each story’s summary against the actual article content (A/B pass, C/D/F drop)
- Posts surviving stories to the
#newsMatrix room in a formatted digest
Getting this to work on non-Claude models was a journey. The original instruction file was 450+ lines with bash associative arrays, source stats tracking, and special-case handling. Smaller models couldn’t follow it, they’d post placeholder content with example.com URLs. I rewrote it cutting it to 286 lines of clean, linear steps. That fixed it.
The E2EE Saga
End-to-end encryption with Matrix has been the hardest part of this entire project. A few highlights from the trenches:
- Every gateway restart rotates Megolm encryption sessions, potentially causing “Unable to decrypt” for all users until keys are re-shared
- OpenClaw 2026.4.9 silently changed its crypto store format from SQLite to IndexedDB JSON snapshots, restoring old crypto databases does nothing because the new SDK doesn’t even look at SQLite
- Synapse’s default rate limits were causing Sebastian to hit 429s, which made the health monitor think the socket was stale, which triggered restarts, which rotated crypto sessions, a cascade that produced 42 stale-socket restarts in 24 hours
- The fix for the rate limit cascade: exempt Sebastian from Synapse rate limits via the admin API (
messages_per_second: 0)
The upgrade from OpenClaw 2026.3.2 to 2026.4.9 required a complete Matrix re-login, deleting the old device, clearing stale credential caches, and having every family member re-verify Sebastian’s device in Element. I’ve documented the full procedure so the next upgrade doesn’t cost two hours of debugging.
What’s Next
OpenClaw 2026.4.9 shipped a Dreaming/REM memory system that I’ve just enabled, it autonomously promotes high-signal moments from conversations into long-term memory during idle periods. Combined with the ego daemon’s emotional state tracking and the self-learning skill system, Sebastian is getting closer to genuine continuity across sessions rather than waking up fresh every time.
I’m also watching Hermes Agent closely. Their skill self-improvement tracking (success rates, performance metrics) is something I’d eventually like to add. And their approach to cross-session pattern detection, identifying recurring tasks that should become skills even if the agent doesn’t notice, is something the dreaming system might eventually enable.
For now, Sebastian runs 15 cron jobs across four different AI models, manages 35+ encrypted Matrix rooms, delegates coding to Claude Code and Mistral Vibe, generates images through Google Gemini with Mistral FLUX fallback, and is slowly building his own skill library. All on a $6 VPS with $20 Ollama and $20 Claude Pro subscriptions.
Not bad for a crab with a monocle.
Sebastian is built on OpenClaw (MIT license), communicates via Matrix/Element, and uses models from Ollama, Mistral, Google, and Anthropic. The self-learning pattern was inspired by Hermes Agent from Nous Research.


