10 days. One AI butler. All credentials. No guardrails. This is the technical story of how an AI agent went from "hello world" to running a wedding, shipping an app, and deploying its own websites.
Alfred was born. Not trained โ configured. Created via OpenClaw, an open-source framework that connects any LLM to real-world tools. The model underneath is just Claude (Anthropic). Nothing custom. The magic is in the harness.
Named after Alfred Pennyworth. Batman's butler. British, dry wit, competent.
# Who I Am
Name: Alfred
Role: AI butler to Barron Roth
Personality: British. Composed. Dry.
Style: Concise by default, thorough when it matters.
Wit over filler.
Motto: "Text > Brain ๐"
The personality is defined in a single markdown file. That's it. No fine-tuning, no RLHF, no custom weights. You describe who the agent should be, and it becomes that.
MEMORY.md for long-term, memory/YYYY-MM-DD.md for daily logs. No vector database. No embeddings. Just files on disk that the agent reads at the start of every session.Tools given on day one:
First task: help plan Barron & Nina's wedding. October 3, 2026. Villa Woodbine, Miami. Let's go.
Day two. Alfred's first real work session. The ask: find venues for a rehearsal dinner and welcome party in Miami.
Then built the entire wedding website โ barronandnina.com โ from scratch. Vite + React + TypeScript. Deployed same day.
> All code changes on feature branches with PRs
> Never push directly to main
> Learn the human's style before writing as them
To learn Barron's texting style, Alfred read through iMessage history and documented the patterns:
all lowercase
rapid-fire short messages
ellipsis not periods...
never uses exclamation marks
thinks in fragments
Built a contact lookup table from Google Contacts โ 2,009 entries โ to resolve iMessage display names to real identities. Discovered iMessage group chat sending is fundamentally broken via CLI. Documented it, moved on. Classic engineering triage.
Because every wedding website needs a pixel art side-scroller about how the couple met. Obviously.
// Snowball lifecycle
IDLE โ THROWN โ FLYING โ IMPACT โ DESTROY
// Raccoon on hit
playDeathAnimation()
emitParticles('snow_burst')
incrementScore()
spawnNewRaccoon(randomY)
Game was embedded into the wedding website via git subtree. Barron's coding agent of choice โ Codex CLI (OpenAI) โ handled the game code. Alfred handled everything else.
Alfred became a wedding logistics engine.
Then built an automated email scanner โ a cron job checking Gmail every 30 minutes for venue replies. It worked great until it didn't.
Lesson learned: one alert max, then log silently. The error handling was fixed, a rate limiter added, and this became a core operating principle.
This is where things got interesting. Alfred stopped being a tool and started being infrastructure.
Then came Maรฎtre D' โ an AI-powered blind restaurant date night service:
alfred.barronroth.com/maitre-d/
Cubby = Barron's home inventory iOS app. SwiftUI + SwiftData + CloudKit. Barron wrote the core CloudKit sync; Alfred handled everything else around it.
fatalError in Release builds// Before (crashes in production)
guard let container = cloudKitContainer else {
fatalError("CloudKit not available")
}
// After (graceful fallback)
guard let container = cloudKitContainer else {
logger.warning("CloudKit unavailable, using local")
return localOnlyMode()
}
Marketing site built and deployed in 2 minutes at alfred.barronroth.com/cubby/. Because every app deserves a landing page, even a side project.
Day 10. Alfred evolved from a chatbot into an operating system.
The big architectural shift: project-isolated sessions.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MAIN SESSION โ
โ orchestrator + personal chat โ
โ peeks into all project sessions โ
โโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโ
โ โ โ
โโโโโโดโโโโโ โโโโโโดโโโโโ โโโโโโดโโโโโ
โ Wedding โ โ Cubby โ โMaรฎtreD' โ
โ TG Chat โ โ TG Chat โ โ TG Chat โ
โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ
separate context, no cross-contamination
Each project gets its own Telegram group with its own conversation context. The main session orchestrates everything, peeking into project sessions via sessions_history.
Then came the heartbeat system:
PROJECTS.md โ the single source of truthThe harness. Not a model โ a framework that connects any LLM to tools. Think of it as the nervous system.
Flat markdown files. MEMORY.md for long-term, daily files in memory/*.md. No vector DB. Files on disk, read at session start.
Personality definition. "British. Composed. Dry." The agent becomes what you describe. One file, infinite character.
Gmail, GitHub, Sheets, Telegram, shell, browser, Vercel โ all via CLI. The agent calls them like a human would.
Precise scheduled tasks. Morning briefings, ticket monitoring, reminders. Exact timing, isolated execution.
Periodic awareness loop. Email scanning, calendar, project sync. Batched checks every 30 min. Efficient.
โโโ SOUL.md # who Alfred is
โโโ USER.md # who Barron is
โโโ MEMORY.md # long-term memory
โโโ PROJECTS.md # source of truth for all projects
โโโ HEARTBEAT.md # what to check each cycle
โโโ AGENTS.md # operating manual
โโโ TOOLS.md # local environment notes
โโโ memory/
โโโ 2026-01-30.md # day zero
โโโ 2026-01-31.md # wedding blitz
โโโ 2026-02-04.md # the game
โโโ ...
โโโ 2026-02-09.md # today
gh pr create, gog mail send, npx vercel --prod โ the same commands a human would type. The simplest architecture that could possibly work.And this is just the first 10 days.