Work / Side Projects / Personal AI Stack

Side Project — Personal AI Stack

The operating system behind everything else on this page

Claude Code, an Obsidian vault, agent skills, and connections to my browser, my tools and the platforms I use, wired together into the system I run my work through, and built so any AI agent can pick it up. Every other project on this site was built, documented, and is maintained inside it.

Obsidian · graph view
Obsidian vault graph view
5,000+notes in a single Markdown vault
40+AI systems built and documented as their own notes
81agent skills I built or extended and run my work on

What It Is

This is my daily operating system. Claude Code is the agent that does the work, and an Obsidian vault is the memory it reads and writes to. Agent skills hold the rules for each kind of task, so a cover letter, a site deploy and an ad report each follow their own steps every time. Command-line tools, direct API connections and MCP connectors link it to Google Analytics, Gmail, Apollo, Clay, n8n and the other platforms I use. MCP, short for Model Context Protocol, is a standard way for an agent to use an outside service as a tool. A live connection into my own Chrome browser covers the screens that have no API. Two messaging channels sit on top of that, Telegram and iMessage, so I can reach it, or it can reach me, from my phone even when I'm not at a laptop.

Why I Built It

Every tool I'd tried before this held a piece of context and lost the rest of it. A chat thread knew what I'd told it in that conversation and nothing before. A saved prompt library was write-only. I'd add to it, but nothing read it back automatically. What I needed was a system that remembered decisions across sessions, months apart, without me re-explaining them every time, and that could act on what it understood instead of just answering questions about it.

AI companies also ship new models, agents and features almost every week, and some of them are better at my work than what I used the month before. If my work lived inside one AI app, every launch would mean rebuilding it. So I keep everything that matters in plain files I own: my rules in one file, each workflow as a skill, my memory in the vault, and my connections as scripts and MCP servers. Any agent that can read files can pick the work up. Switching models is usually one setting. Switching apps is where people get stuck, because the app holds the checks, saved commands and permissions they've built up, so I keep as little as possible inside any one app.

What It Does

The vault is the memory layer: more than 5,000 notes covering client and personal work, standardized frontmatter on every note so status, dates, and relationships stay queryable, and a set of dashboards that surface what's live, what's stale, and what's waiting on me. More than 40 separate systems are documented there as their own notes, each one tracking what it is, how it's configured, and what broke the last time I touched it. When a session starts, that history is read before any new work begins, so a decision made months ago doesn't get re-litigated or contradicted by accident.

81 skills I built or extended hold the steps and checks for each kind of work, along with the mistakes I've already made once so I don't make them again. The connections give those skills real data. Google Analytics, Search Console and Tag Manager run through a separate service account for each of my sites, so the agent has its own access to them. Gmail runs through an OAuth app I set up myself, with a kill switch that stops every send. Apollo, Clay, Google Drive and my self-hosted n8n connect as MCP tools. Hooks check every file as it's written and catch things like banned phrases and counts that have gone stale. Codex works as a second agent. It reads the same rules and skills through a short adapter file, reviews copy, and takes over when I hit Claude's usage limits. On a normal day this runs my go-to-market engineering work: account research in Apollo and Clay, finding emails with Hunter and Prospeo, drafting outreach through Gmail, and checking how each of my sites is doing. Every email, post and deploy passes a check before it leaves my machine. Three scheduled jobs run every day without me.

Two channel plugins turn Claude Code into something I can reach outside a terminal window. A Telegram bot and iMessage are both wired so a message from my phone lands as a live event inside a running session, gets acted on, and replies back on the same thread. A separate browser bridge connects Claude Code to my actual, logged-in Chrome, so it can open a dashboard, click through a screen with no API, read what's on the page, and act on it the same way I would, instead of stopping at whatever a static integration happens to support.

What It Taught Me

Two real alerts once passed every automated check and still never reached me. The build had finished successfully by every measure I was watching, except the one that mattered: whether the email arrived at all. That gap between a process finishing and a process working now gets checked everywhere in this stack. The stack keeps changing too, most weeks something in it moves. This page is proof of that: it was written and published using the exact system it describes.