The Stack Has Eyes: Where My AI Infrastructure Is Heading
Five systems share a cluster. 198 MCP tools exist. One agent uses five of them. This post is about closing the gap.
Yesterday morning at 7 AM, a Claude agent running on my Kubernetes cluster pulled data from five different Life-Hub MCP tools, synthesized a briefing about my day, and posted it to Slack before I was out of bed. It used five of the 198 tools available to it. This post is about the other 193.
Where Things Stand
Over the past few months I've been building and documenting the pieces of a personal AI infrastructure stack. Each piece has its own post, but here's the snapshot:
Life-Hub: 198 MCP tools, 15 data collectors, 8 AI advisors, 34 UI pages. A FastAPI + HTMX dashboard backed by SQLite that knows everything about my day: sleep, habits, mood, energy, goals, finances, social connections, reading, music, screen time. Every data source has a collector. Every insight has a tool.
Open Brain: Supabase + pgvector. Thoughts captured in Slack, embedded with text-embedding-3-small, searchable by meaning from any MCP-compatible AI client. The persistent memory layer that any model can query.
OpenClaw: Autonomous agent platform running on the cluster. One scheduled task today: a morning briefing that fires at 7 AM, calls five MCP tools, and posts the result to Slack. The execution layer.
Ghost: Self-hosted on Kubernetes. Weekly reviews already auto-publish from Life-Hub via the Admin API. The public surface of the stack.
Homelab K8s: Talos Linux v1.12.1, Kubernetes v1.35.0, Flux GitOps, Cilium networking. Two nodes: a Dell laptop with 15.6 GB RAM and an Intel NUC with 32 GB. The foundation everything else runs on.
These five layers form a stack. But right now they mostly operate in parallel: five systems that share a cluster and occasionally pass data, but don't think together. The next chapter is making them operate as one system.
The Integration Gap
Three specific disconnects bother me the most.
Open Brain and Life-Hub don't talk to each other. Life-Hub has a search_brain MCP tool that queries Open Brain's vector store, and the daily digest pulls recent thoughts into the morning summary. But the reverse doesn't happen. Thoughts captured in Slack (reflections, decisions, observations) don't flow into Life-Hub's journal, topic analysis, or advisor context. If I capture a thought at 2 PM about feeling overwhelmed, that doesn't show up in mood inference, wellness scoring, or the evening summary. Two systems that both deal in personal context, connected by a single one-way pipe.
OpenClaw sees through a keyhole. The morning briefing calls five tools: get_morning_briefing, get_calendar_intelligence, get_weather_intelligence, detect_burnout_risk, and get_nudges. There are 198 tools available. It doesn't know about habit streaks, sleep debt, journal sentiment, pillar scores, energy patterns, or goal velocity. An agent with full-stack context available to it, using 2.5% of it. That's not a limitation of OpenClaw. It's a limitation of what I've wired up so far.
The blog is a dead end. Weekly reviews auto-publish to Ghost, which is great. But there's no feedback loop. Published posts don't feed back into Open Brain as searchable knowledge. They don't influence advisor context or show up when I search for my own past thinking. Content goes out and doesn't come back. The blog is a write-only medium: the stack publishes but never reads its own output.
Near-Term: The Concrete Stuff
Each of these is a weekend project, not a roadmap fantasy. The infrastructure exists. The tools exist. What's missing is wiring.
OpenClaw expansion is the biggest lever. One agent runs today. Three more are straightforward to build. An evening wind-down agent at 9 PM pulls get_today_summary, get_habits_log, get_wellness_score, and get_daily_priorities, then posts to Slack: "Here's your day. Three habits done, two skipped. Wellness at 6.2, down from yesterday. You didn't touch your Connection pillar." A goal review agent fires Sunday evening, calling get_goals, get_goal_forecasts, get_recurring_goals_progress, and get_blocked_goals to synthesize a state-of-the-goals report: what moved, what stalled, what needs attention this week. And an anomaly responder that triggers when detect_anomalies fires (a mood drop, a sleep crash, a broken streak) and pulls context from get_journal_entries, get_life_events, and get_calendar_intelligence to post a proactive insight instead of waiting for me to ask what's going on.
Bidirectional sync between Open Brain and Life-Hub closes the biggest data gap. A thought-to-journal bridge takes Open Brain thoughts classified as "reflection" or "decision" and auto-creates Life-Hub journal entries. The metadata extraction pipeline already classifies thoughts by type. This is just wiring the output to Life-Hub's journal API. Going the other direction, a journal-to-brain bridge auto-embeds Life-Hub journal entries into Open Brain's vector store, so any AI client can find journal entries by meaning, not just the Life-Hub dashboard. And advisor context enrichment: include recent Open Brain thoughts when building the context window for Life-Hub's AI advisors. The search_brain MCP tool already exists. It just needs to be called during context building, not only when I explicitly ask.
A smarter morning briefing is the most visible improvement. Today's briefing covers schedule and weather. Adding get_sleep_debt, get_habit_difficulty, get_daily_priorities (yesterday's carryover), get_energy_patterns, and get_pillar_targets transforms it from "here's your schedule" to "here's your schedule, and by the way, today is historically your worst habit day, you have 3 hours of sleep debt, and your Connection pillar has been neglected for two weeks." Same agent, same infrastructure, just more context fed into the synthesis.
Infrastructure backlog items that keep nagging. Off-site backup: push Life-Hub's SQLite backups to the NAS via a K8s CronJob instead of trusting Longhorn replication alone. Linkding collector: Linkding is deployed, the get_bookmark_stats MCP tool exists, but no collector pushes bookmarks into Life-Hub's activity timeline. Saved articles are invisible to the intelligence layer. Time tracking integration: log_time_block and get_time_blocks tools exist but nothing feeds them. Time data stays wherever I manually put it instead of joining the unified data model.
Long-Term: The North Star
Three trajectories. I'll be honest about what's speculative here.
From scheduled agents to reactive agents. Today OpenClaw runs on cron. 7 AM, briefing fires. That's it. The next evolution is event-driven: a webhook fires when Life-Hub detects an anomaly, a goal stalls, or a streak breaks. OpenClaw responds in real-time, not on a schedule. The infrastructure already supports this: Life-Hub has ntfy for push notifications, OpenClaw has Slack integration. The missing piece is wiring event triggers to agent invocations. Instead of checking in at fixed intervals, the system notices something and acts. A mood drop at 2 PM triggers a context-aware check-in. A three-day habit gap triggers a gentle Slack message with the specific habit and streak data. The shift from "tell me what happened" to "I noticed something" is the difference between a dashboard and an assistant.
From data collection to data synthesis. Fifteen collectors feed SQLite with raw data. The intelligence layer (correlations, causal inference, anomaly detection, forecasting) runs on that data. But synthesis today is reactive. You ask, it answers. Next level: proactive synthesis. The system notices that sleep quality drops when you have three or more meetings the previous day, and tells you before tomorrow's meeting-heavy day. The Granger causality engine already detects these patterns. The anomaly detection layer already flags deviations. The missing piece is acting on them autonomously: turning detected patterns into actionable nudges without waiting for someone to pull the report.
From single-user to portable context. Open Brain proves the concept: one database, any AI client. Today, Claude Code and the Life-Hub dashboard are the only consumers of the 198 MCP tools. But as MCP adoption grows (and it is growing, fast), this context becomes portable. Any MCP-compatible client can query my pillar scores, energy patterns, advisor memories, and goal state. The personal context layer isn't locked into one interface. It travels with the AI client. Today that's theoretical. In twelve months, with MCP support shipping in every major AI client, it becomes practical. The groundwork is already laid.
What This Isn't
This is a homelab. Two nodes. A Dell laptop and an Intel NUC. 48 GB total RAM. No HA, no multi-region, no five-nines. If the NUC dies, workloads migrate via soft affinity. Not instantly, but they migrate. If the Dell dies, I plug the NUC into a monitor and triage.
The point isn't to build a product. The point is infrastructure where the AI you talk to at 3 PM knows what happened at 7 AM, knows your goals, knows your patterns, and can act on that knowledge without being re-briefed every conversation.
Every piece is open source or self-hostable. Supabase, Ghost, OpenClaw, Talos, Flux, Cilium. Life-Hub is a FastAPI app with SQLite. The entire thing runs on hardware under $1,000.
The stack has eyes now. The next step is giving it hands.
Previous Posts in This Series
- Building a Model-Agnostic Memory Layer with Supabase, MCP, and Slack: Architecture deep dive
- Every AI I Use Shares One Brain: Here's the Full Stack: Full ecosystem overview
- One Session, One Brain: Building a Full AI Stack Without Leaving the Terminal: Build log