Personal project · 2026 — Present
Maria — personal AI assistant
Obsidian vault memory, Slack conversations, and Cursor automations
- Obsidian
- Markdown
- Cursor
- Slack
- Google Calendar MCP
- Git
- Zod
- TypeScript
The problem
Useful conversations disappear when a chat window closes. I wanted a personal assistant that could answer from durable memory, capture decisions and tasks without storing secrets, and stay under my control rather than living inside a vendor's cloud.
The approach
Maria is an Obsidian vault that acts as the source of truth, with Slack as the conversation interface and a Cursor Cloud runtime that reads vault context, answers questions, and writes concise captures back to Markdown. Project rules encode memory policy, permissions, and safety boundaries — including explicit confirmation before external actions and never storing passwords or tokens in Git.
The outcome
A working personal assistant I use daily: it remembers preferences and project state across sessions, routes captures into the right folders, commits vault updates to main, and integrates with Google Calendar through a self-hosted MCP server. It is also a full-stack side project in the boring sense — content schema, automation triggers, OAuth setup, and the discipline of keeping durable memory separate from chat.
Architecture moves
- Obsidian vault structured by folders — inbox, profile, projects, areas, people, meetings, knowledge — with wikilinks instead of duplicate notes.
- Slack (or a Slack relay) as the chat surface; the vault as durable memory, not a transcript dump.
- Cursor automations triggered from Slack with scoped MCP tools for messaging and calendar.
- Google Calendar MCP (`@cocal/google-calendar-mcp`) with OAuth credentials kept outside Git.
- Memory policy: capture facts, decisions, and tasks; never passwords, API keys, or recovery codes.
- Permissions model: read and suggest freely; confirm before sending messages, changing calendar events, or spending money.
Performance levers
- Concise captures instead of full chat logs keep the vault searchable and small.
- Zod-validated content modules in other projects inspired the same boundary-validation pattern here.
- Git commits on main for routine memory updates — no PR overhead for a personal knowledge base.
Engineering impact
- Turned recurring 'where did I write that down?' moments into a searchable vault.
- Gave me hands-on experience designing agent permissions, memory policy, and human-in-the-loop external actions.
- Demonstrates full-stack product thinking beyond UI — schema, integrations, automation, and ops.
Challenges conquered
- Drawing the line between durable memory and chat noise — most of a conversation should not become a note.
- Keeping secrets out of a system designed to remember things, which means strict categories and runtime enforcement.
- First-time OAuth for Calendar in a headless cloud environment, where interactive browser auth cannot complete without a manual step.