lyra-ai
Lyra is a personal AI assistant designed to manage the complexities of both work and personal life. It proactively organizes information, sends helpful reminders, and coordinates tasks for individuals and their partners. This agent addresses the common problem of scattered information and forgotten responsibilities, particularly useful for busy professionals like fintech leaders and those sharing a household. Lyra distinguishes itself by running continuously in the background, anticipating needs rather than waiting for prompts, and integrating seamlessly with tools like Telegram and Notion. Ultimately, it aims to streamline daily routines and improve communication within a family or partnership.
README
# Lyra — A Personal AI Agent for Work, Life, and a Household
  
> Built on [OpenClaw](https://openclaw.ai) · Powered by MiniMax M2.7 + Claude · Lives in Telegram · Thinks in Notion · Runs 24/7 on Hetzner
---
I am a product leader in fintech. I lead large teams, advise startups, and create content. My wife and I share a home, a calendar, and a running list of things we keep forgetting to tell each other.
I built Lyra to be the thing that holds it all together — a personal AI that runs 24/7 on a cloud VPS, knows the full context of my life and work, and coordinates the parts of it I share with my wife. It is not a chatbot. It does not wait for me to open an app. It shows up in my Telegram, watches for things, reminds us of tasks, and quietly organises everything into Notion.
This repo is a full write-up of what I built, why, and how. Every config, skill, and decision is documented here.
---
## What Lyra does
**For me:**
- Sends a curated morning digest at 7am — emails, fintech news, AI news, startup news, and tasks due today — directly to Telegram
- Monitors competitors weekly (Revolut, Monzo, Bunq, Starling) and surfaces only what matters
- Captures every voice note I send into a structured Second Brain in Notion (transcribe → classify → save)
- Drafts a content post reminder every day at noon, pulling from my ideas backlog
- On Sunday evening, synthesises my week — decisions made, ideas captured, patterns forming
- Reads and writes to all my Notion databases on command
- Reads and sends email via Gmail (himalaya CLI with App Password)
- Manages Google Calendar — create events, check availability, coordinate joint calendar with wife
- Can update her own memory, rules, and skills — and auto-syncs changes to this GitHub repo
- Sends a daily activity log at 9pm — what she did today, what crons ran, any issues
**For my wife (Abhigna):**
- Has her own access to Lyra on the same Telegram bot
- Gets a friendly onboarding when she first messages ("I can help with reminders, meals, health, trips, shopping")
- Can see and update the shared databases: Health & Meds, Meal Planning, Upcoming Trips, Shopping List, Shared Reminders
- Cannot see my professional databases (enforced by access rules, not by hoping the model behaves)
- Can assign tasks to me via Lyra — they get added to Shared Reminders and I get a Telegram ping
- Gets notified when I complete a task she assigned
**For both of us:**
- Joint task coordination — "Remind Abhigna to follow up with the clinic" works from my Telegram
- Notion Reminder databases (Akash / Shared / Abhigna) with IFTTT bridge to Apple Reminders on iPhone
- Shared Notion databases updated by either person, visible to both
---
## The Stack
| Layer | Tool |
|-------|------|
| Agent framework | [OpenClaw](https://openclaw.ai) v2026.3.13 |
| Tier 0 (CRUD bypass) | Python scripts — deterministic ops at $0/call, ~100ms |
| Default AI model | MiniMax M2.7 (fast, cost-effective — 87% of LLM calls) |
| Escalation models | Claude Haiku 4.5 (fallback, 9%) + Claude Sonnet 4.6 (synthesis, 4%) |
| Messaging interface | Telegram Bot |
| Databases | Notion (13 databases) |
| Email | [himalaya](https://himalaya.cli.rs) CLI (Gmail IMAP/SMTP) |
| Calendar | Google Calendar API v3 (OAuth2) |
| News & RSS | [blogwatcher](https://github.com/openclaw-ai/blogwatcher) CLI |
| Web search | Tavily API |
| Memory | SQLite (persistent semantic memory, local) |
| Scheduled tasks | OpenClaw cron (7 jobs, Europe/Berlin timezone) |
| Hosting | Hetzner VPS (Ubuntu 24.04, 4GB RAM, €5.99/mo) |
| Persistence | systemd service + PostgreSQL (Docker) |
| Secrets | `~/.openclaw/.env` (chmod 600, excluded from git and backups) |
| Backup | Daily at 3am UTC — workspace, config, Postgres dump, 7-day retention |
| Monitoring | Health check every 15 min + status dashboard + auto-recovery |
| Self-edit sync | Bidirectional GitHub sync every 5 min (Lyra pushes self-edits, pulls remote changes) |
| Reminders bridge | Notion → IFTTT → Pushcut → Apple Reminders on iPhone |
**Monthly cost:** ~€18 (Hetzner €5.99 + MiniMax ~€3 + Claude API ~€5-8 + Tavily free tier)
---
## Architecture
```
┌─────────────────────────────────────────────────────────────────┐
│ TELEGRAM │
│ Akash ◄──────────────────► Abhigna │
└──────────────────────────┬──────────────────────────────────────┘
│
┌────────────▼────────────┐
│ LYRA │
│ (OpenClaw Gateway) │
│ Hetzner VPS 24/7 │
│ │
│ ┌─────────────────┐ │
│ │ Tier 0: Python │ │
│ │ CRUD bypass │ │
│ │ $0/call ~100ms │ │
│ └────────┬────────┘ │
│ │ (LLM calls) │
│ ┌────────▼────────┐ │
│ │MiniMax M2.7 │ │
│ │87% of LLM calls│ │
│ └────────┬────────┘ │
│ ┌────────▼────────┐ │
│ │ Claude Haiku │ │
│ │ 4.5 · 9% │ │
│ └────────┬────────┘ │
│ ┌────────▼────────┐ │
│ │ Claude Sonnet │ │
│ │ 4.6 · 4% │ │
│ └─────────────────┘ │
└────────────┬────────────┘
│
┌───────────────────┼────────────────────┐
│ │ │
┌──────▼──────┐ ┌───────▼───────┐ ┌───────▼──────────┐
│ NOTION │ │ CRONS │ │ INTEGRATIONS │
│ Cockpit │ │ │ │ │
│ │ │ 7am digest │ │ himalaya (email) │
│ 13 DBs: │ │ noon content │ │ blogwatcher (RSS)│
│ News │ │ Sun reviews │ │ Tavily (search) │
│ Competitors│ │ Sun brain │ │ wttr.in (weather)│
│ Recruiters │ │ Mon health │ │ IFTTT (reminders)│
│ Content │ │ 9pm log │ │ SQLite Memory │
│ Health │ │ │ │ │
│ Meals │ │ All Europe/ │ │ │
│ Trips │ │ Berlin tz │ │ │
│ Reminders │ │ │ │ │
│ 2nd Brain │ │ │ │ │
└─────────────┘ └───────────────┘ └──────────────────┘
┌─────────────────────────────────────────┐
│ RESILIENCE LAYER │
│ │
│ systemd (auto-restart on failure) │
│ PostgreSQL (session persistence) │
│ ufw firewall (SSH + gateway only) │
│ 2GB swap (OOM protection) │
│ Health check every 15 min + Telegram │
│ Daily backup 3am (7-day retention) │
│ Bidirectional GitHub sync (5 min) │
│ Cron failure alerting │
│ Model fallback: Tier0 → MiniMax → Haiku │
│ Notion failure: describe intent, retry │
│ Auto-recovery playbook (5 failure modes) │
│ Status dashboard (updates every 5 min) │
│ Daily cost tracking + Telegram reports │
│ Structured JSON logging + log rotation │
│ Graceful gateway shutdown wrapper │
│ Secret rotation script │
│ Automatic security updates │
│ TLS via Caddy (Let's Encrypt) │
│ CI pipeline (lint, routing eval, secrets) │
└─────────────────────────────────────────┘
```
---
## Migration story: Mac → Cloud
This setup originally ran on my Mac as a
[truncated…]PUBLIC HISTORY
IDENTITY
Identity inferred from code signals. No PROVENANCE.yml found.
Is this yours? Claim it →METADATA
README BADGE
Add to your README:
