DietMenus.com
Programmatic SEO directory to find restaurant meals that fit your dietary needs.
A multi-agent Discord setup for content ops, client work, and everything else
For twelve years I’d been on the marketing side of the wall.
That’s the side where you spec out what you want built — a dashboard, an integration, a scraper, a plugin — and you wait for an engineer to build it. Or you don’t get it built at all, because engineers are busy and your idea lands in their backlog behind six other things. I’d worked around it for a long time — I learned enough Python to be dangerous, taught myself enough SQL to pull my own data, hacked things together with Make and n8n. But the wall was always there.
In early 2025 the wall came down.
Vibe coding — sitting with Claude (or Cursor, or Claude Code) and describing what you want in plain English while the model writes the actual code — went from “neat party trick” to “this genuinely works.” Within a few weeks I’d shipped things I’d been wanting to ship for years. A WordPress plugin that turned a client’s dormant custom post type into a full SEO-optimized directory. A Python pipeline that scraped a client’s content archive to reverse-engineer their writing voice. A content pipeline that chained three AI tools together to produce bulk article drafts.
For the first time, I was the one building the things I’d been specifying my whole career.
But vibe coding has a ceiling. And I hit it fast.
The ceiling is this: Claude Code only works when you’re sitting in front of it. It’s reactive. You prompt, it responds. The moment you close the laptop, it goes to sleep. And it turns out a lot of the most valuable work isn’t reactive — it’s the stuff you want happening when you’re not there.
A morning content brief waiting for me at 6am. A weekly content review queued every Sunday. A client recap drafted at 6pm so I could review it over dinner. None of that fits into the “open Claude Code and vibe” pattern. I still needed to be the button someone pushed.
I was building faster than ever, but I was still the bottleneck.
Then I came across OpenClaw and something clicked.
OpenClaw is an open-source “agent gateway” — think of it as the plumbing that lets an LLM live permanently on a server, respond to Discord messages, run on a schedule, and call external tools. It handles the things you don’t want to write yourself: session management, Discord integration, cron scheduling, hooks, the Model Context Protocol for tool use.
I didn’t build OpenClaw. What I built is what lives on top of it: a team of AI personas with their own jobs, voices, and schedules — all sharing one chassis, all running whether I’m at the keyboard or not.
This is what an actually autonomous AI workflow looks like. Not “I prompted Claude to do a thing.” It’s “I woke up to three pieces of finished work waiting for me to review.”
Instead of spinning up separate agents for every workstream, I kept it simple: one agent:main process, four personas, each living in its own set of Discord channels. Each one has its own “soul file” — a markdown document describing who they are, how they think, what they do, what their voice sounds like.
537 lines of personality spec across the four files. Swapping a persona’s voice isn’t a deploy — it’s a text edit.
The same agent process becomes a completely different person depending on which Discord channel you post in.
Drop a message in #axia and Mustapha wakes up in fractional-CMO mode, pre-loaded with that client’s context. Post the same message in #vm-content and Vonnegut picks it up with storytelling context loaded instead. In #thesis, Dalio takes over.
The switching happens at the channel level via per-channel system-prompt overrides. No manual /agent command, no mental context-switching for me. I just post wherever the context belongs and the right voice answers.
The hardest part of any multi-persona setup isn’t the personalities. It’s memory.
Every LLM has a context window. When it fills up, something has to go — older messages get summarized or dropped. Without a memory strategy your agents forget what they did yesterday, which is worse than useless. You end up re-explaining everything every session.
I built three layers to solve this:
memory/YYYY-MM-DD.md before compaction happens. Important things survive./reset or /new, the current state auto-saves. No manual export.Two months in, that has produced 43 automatic memory snapshots. Any persona can look them up before answering. Context across the team is preserved without me babysitting it.
OpenClaw isn’t just a chat bot in Discord. It’s the nervous system for everything I build — the persistent layer that makes all my other systems and automations feel like they’re running themselves.
The jobs that execute without any input from me:
The real leverage isn’t the crons. It’s what Mustapha (the coordinator persona) lets me run with a single Discord message:
An AI content engine for an M&A advisory client. Scrapes their full social archive (8 blog posts, 100+ LinkedIn posts, 80+ tweets), reverse-engineers their founder’s writing voice into a versioned voice-model doc, and drafts LinkedIn and Twitter posts in that voice on demand. “Mustapha, give me 5 LinkedIn posts on [topic]” → 10 minutes later, 5 drafts are staged in Typefully for review. The founder ships without me being in the loop on most days.
A 150-site WordPress portfolio management system for a digital marketing client. Connected via the AI Engine MCP across the full network, giving Mustapha admin-level access (posts, themes, plugins, settings, database queries) to every site at once. Audits, content publishing, plugin deployments, and SEO monitoring run in parallel across the portfolio instead of site-by-site.
A custom PE firm directory plugin. WordPress plugin for the same M&A advisory client — custom post types, custom archive and single templates, JSON-LD schema (Organization, ItemList, FAQPage), lead capture forms wired to the client’s email provider, mobile-first CSS. 18 private equity firms researched and populated with 400-600 word SEO-optimized profiles. Plugin code, content, and deploy all shipped through Mustapha.
A lead reactivation system for service businesses. Supabase-backed (5 tables), FastAPI webhook bridge, 7 SMS templates, AI-powered inbound conversation handler. Currently running on a demo account and a live campaign runner cron while we finalize the messaging provider for launch.
A faceless short-form video pipeline. Claude API → ElevenLabs voice cloning → Remotion (three programmatic video templates: data-card, voiceover B-roll, slideshow) → Postiz distribution. All 1080×1920 30fps. Infrastructure complete and render-verified; waiting on a couple of API keys before the first test sprint.
Each of these plugs into the same chassis — same persona system, same memory layer, same human-in-the-loop review workflow. That’s the point: I didn’t build five different automation stacks. I built one, and it runs all of this.
One thing I learned the hard way: cron sessions default to the first messaging provider you configured, which for me was Telegram. For the first week, Vonnegut’s content reviews were being silently delivered to a Telegram channel I never check. Every cron payload now has an explicit Discord routing guard. Two days of debugging, one line of fix.
The system’s been in production since early February. 4 scheduled workflows across 7 Discord channels with 4 personalities, 43 auto-generated memory snapshots, zero downtime. The Sunday content scans actually happen now instead of being “I’ll get to it this week.” Client context stays warm across sessions. I spend 15 minutes in the morning reviewing staged work and the rest of the day on the work that actually needs me.
I’m the operator now, not the bottleneck. That’s the thing I wanted.
The pattern isn’t specific to me. Any team juggling multiple workstreams and losing quality in the switching cost can use this model:
If that sounds like something you’d want running in your business — I build those. And if you’re hiring an AI Automation Engineer or Marketing Engineer, this is the kind of work I’d do in your first 90 days.
Framework credit: this system runs on OpenClaw by ClawHub. The agent gateway, Discord integration, cron scheduler, and MCP plumbing are OpenClaw. The persona designs, memory architecture, workflow prompts, routing guards, and workspace system are mine.